cka证书怎么准备 (cka证书要准备多久)

上一次我们讲了Pod的基本概念,今天我们来谈谈如何实现Pod的隔离和QoS。

理论知识Pod

Pod的网络隔离

默认情况下,每个Pod都可以相互通讯,没有任何边界。网络策略是Pod的软件防火墙,它通过命令空间选择器和Pod选择器,定义了谁可以访问Pod的哪个端口。

一旦Pod启用了策略,它就会拒绝任何其他入站流量(默认拒绝所有)。

目前有很多网络提供商支持网络策略如Calico,Weave Net。有兴趣的同学可以参考下面的链接来设置

https://medium.com/flant-com/calico-for-kubernetes-networking-792b41e19d69

Pod QoS

当Node存在足够资源时,管理员可以随意部署应用程序。但是一旦达到资源限制,调度器将根据配置执行不同的操作。

根据Pod的设置,Kubernetes将Pod分为三类

  • Guaranteed Pod:保证关键业务比如数据库,相关的主节点(Elasticsearch和HDFS)
  • Burstable Pod: 任何应用都可以用
  • BestEffort Pod: 常用于无状态和可恢复的应用程序

他们的优先级分别是从Guaranteed > Burstable > BestEffort, 具体的配置可以参考下面的链接

https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/#create-a-pod-that-gets-assigned-a-qos-class-of-guaranteed

从配置可以看出,通过在Pod中设定requests和limits来确认其level类型。

Node QoS

为了保证共享相同物理集群的每个项目团队我们使用namepace来进行逻辑隔离,为了保证各团队的服务质量,我们可以使用resource-quotas.

resource-quotas是一个资源对象,允许我们限制命名空间内可以消耗的资源:

  • 计算资源(CPU、Memory)
  • 存储资源(Volume、PV)
  • 对象数量(Pod、RC、ConfigMap、Service、LB)

在设置完Namespace的资源配置后,我们还可以通过LimitRange资源对象指定来指定其namespace内默认Pod的请求和限制。

动手实验

  • 创建名为dev的namespace,限制其可以消耗的资源为
  1. Request: CPU(0.5) Memory(100M)
  2. Limit: CPU(4) Memory(1000M)
  3. Pods: 20(个)

参考文档: https://kubernetes.io/docs/concepts/policy/resource-quotas/

参考代码:

root@u1:~/cka#  kubectl create ns dev
root@u1:~/cka#  cat quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev
spec:
  hard:
    requests.cpu: "0.5"
    requests.memory: "100M"
    limits.cpu: "4"
    limits.memory: 1Gi
    pods: "20"
root@u1:~/cka#  kubectl create -f quota.yaml -n dev
  • 在dev namespace内创建Pod,确认其默认资源请求为
  1. Request: CPU(0.5) Memory(20M)
  2. Limit: CPU(1) Memory(100M)参考文档: https://kubernetes.io/docs/concepts/policy/limit-range/参考代码:
root@u1:~/cka# cat dev-limit.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: dev-limit-range
spec:
  limits:
  - default:
      cpu: 1
      memory: 100Mi
    defaultRequest:
      cpu: 0.5
      memory: 50Mi
    type: Container
    root@u1:~/cka# kubectl run nginx --image=nginx -n dev
    root@u1:~/cka# kubectl describe pod -n dev nginx
  nginx:
    Container ID:
    Image:          nginx
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  100M
    Requests:
      cpu:        500m
      memory:     50M
    Environment:  <none>