QoS(Quality of Service),可译为 “ 服务质量等级 ”,或者译作 “ 服务质量保障 ”,是作用在 Pod 上的一个配置,当 Kubernetes 创立一个 Pod 时,它就会给这个 Pod 调配一个 QoS 等级。Kubernetes 应用 Qos 类来决定 Pod 的调度和驱赶策略。
Guaranteed
- Pod 中的每个容器,蕴含初始化容器,必须指定内存申请和内存限度,并且两者要相等。
- Pod 中的每个容器,蕴含初始化容器,必须指定 CPU 申请和 CPU 限度,并且两者要相等。
# cat qos-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: qos-demo
spec:
containers:
- name: qos-demo-ctr
image: nginx
resources:
limits:
memory: "200Mi"
cpu: "700m"
requests:
memory: "200Mi"
cpu: "700m"
# kubectl apply -f qos-pod.yaml
pod/qos-demo created
# kubectl describe pod qos-demo | grep QoS
QoS Class: Guaranteed
以上能够看出 Kubernetes 为 Pod 配置的 QoS 类为 Guaranteed
如果容器指定了本人的内存限度,但没有指定内存申请,Kubernetes 会主动为它指定与内存限度匹配的内存申请。同样,如果容器指定了本人的 CPU 限度,但没有指定 CPU 申请,Kubernetes 会主动为它指定与 CPU 限度匹配的 CPU 申请。
Burstable
- Pod 不合乎 Guaranteed QoS 类的规范。
- Pod 中至多一个容器具备内存或 CPU 申请。
# cat qos-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-2
spec:
containers:
- name: qos-demo-2-ctr
image: nginx
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
# kubectl apply -f qos-pod.yaml
pod/qos-demo-2 created
# kubectl describe pod qos-demo | grep QoS
QoS Class: Burstable
以上能够看出 Kubernetes 为 Pod 配置的 QoS 类为 Burstable
BestEffort
- Pod 中的容器必须没有设置内存和 CPU 限度或申请
# cat qos-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-2
spec:
containers:
- name: qos-demo-2-ctr
image: nginx
# kubectl apply -f qos-pod.yaml
pod/qos-demo-2 created
# kubectl describe pod qos-demo | grep QoS
QoS Class: BestEffort
小结
QOS 是 K8S 中的一种资源爱护机制,其次要是针对不可压缩资源比方内存的一种控制技术。比方在内存中,其通过为不同的 Pod 和容器结构 OOM 评分,并且通过内核策略的辅助,从而实现当节点内存资源有余的时候,内核能够依照策略的优先级,优先 kill 掉那些优先级比拟低(分值越高,优先级越低)的 Pod。
优先级从高到低排序:
- Guaranteed
- Burstable
- BestEffort
参考文章
https://kubernetes.io/zh/docs/tasks/configure-pod-container/quality-service-pod/
点击 “ 浏览原文 ” 获取更好的浏览体验!