Pod 的QoS服务质量
标签:
Kubernetes
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
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦