k8s系列之二 服务质量

一、Qos类等级 

Kubernetes 使用 QoS 类来决定 Pod 的调度和驱逐策略。
Kubernetes 中如果一个 Node 节点上的 Pod 占用资源过多并且不断飙升导致 Node 节点资源(内存)不足,可能会导致为了保证节点可用,将容器杀掉。在遇见这种情况时候,我们希望先杀掉那些不太重要的容器,确保核心容器不会首先被杀掉。为了衡量先杀掉哪个程序,所以推出了优先级机制 QoS (Quality of Service)来做判断,Kubernetes 将容器划分为三种 QoS 等级:

  • Guaranteed
  • Burstable
  • BestEffort

二、Guaranteed

QoS 为 Guaranteed 的 Pod 需要满足以下条件:

  • Pod 中的每个容器必须指定内存限制和内存请求,且两者必须相等
  • Pod 中的每个容器必须指定 CPU 限制和 CPU 请求,且两者必须相等

eg:容器设置了内存请求和内存限制,值都是 200 MiB。 容器设置了 CPU 请求和 CPU 限制,值都是 300 milliCPU

apiVersion: v1
kind: Pod
metadata:
  name: guaranteed-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    resources:
      limits:
        memory: "200Mi"
        cpu: "300m"
      requests:
        memory: "200Mi"
        cpu: "300m"

服务启动之后,可通过下面的命令查看

$ kubectl describe pods guaranteed-pod | grep "QoS Class"
QoS Class:       Guaranteed

如果容器指定了自己的内存限制,但没有指定内存请求,Kubernetes 会自动为它指定与内存限制匹配的内存请求。
如果容器指定了自己的 CPU 限制,但没有指定 CPU 请求,Kubernetes 会自动为它指定与 CPU 限制匹配的 CPU 请求。

三、Burstable

QoS 为 Burstable的 Pod 需要满足以下条件:

  • Pod 不符合 Guaranteed QoS 类标准
  • Pod 中至少一个有容器具备内存或 CPU 请求

eg:容器设置了内存限制 200 MiB 和内存请求 200 MiB

apiVersion: v1
kind: Pod
metadata:
  name: burstable-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "200Mi"

服务启动之后,可通过下面的命令查看

$ kubectl describe pod burstable-pod | grep "QoS Class"
QoS Class:       Burstable

四、BestEffort

QoS 为 BestEffort的 Pod 需要满足以下条件:

  • Pod 中的容器不得设置任何内存、CPU 限制或请求

eg:容器没有设置内存和 CPU 限制或请求

apiVersion: v1
kind: Pod
metadata:
  name: besteffort-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9

服务启动之后,可通过下面的命令查看

$ kubectl describe pods besteffort-pod | grep "QoS Class"
QoS Class:       BestEffort

五、QoS优先级

3种QoS优先级从有低到高(从左向右):

Best-Effort pods -> Burstable pods -> Guaranteed pods

 

他们之间的区别主要体现在两个指标上:内存、CPU

可压缩资源:CPU
当pod使用超过设置的limits值,pod中进程使用cpu会被限制,但不会被kill。

不可压缩资源:内存
当节点开始耗尽计算资源时,由Kubelet启动Pod驱逐,以避免发生系统内存不足(OOM)事件。

官方文档链接:https://kubernetes.io/zh/docs/tasks/configure-pod-container/quality-service-pod/

posted @ 2021-12-10 21:39  划水的猫  阅读(232)  评论(0)    收藏  举报