QoS(QualityofService),可译为“服务质量等级”,或译为“服务质量保证”,是作用于pod的配置。当Kubernetes创建一个pod时,它会为这个Pod分配一个QoS类。Kubernetes使用Qos类来确定Pod调度和驱逐策略。GuaranteedPod中的每个容器(包括init容器)都必须指定相等的内存请求和内存限制。Pod中的每个容器,包括init容器,都必须指定CPU请求和CPU限制,并且两者必须相等。#catqos-pod.yamlapiVersion:v1kind:Podmetadata:name:qos-demospec:containers:-name:qos-demo-ctrimage:nginxresources:limits:memory:"200Mi"cpu:"700m"请求:内存:"200Mi"cpu:"700m"#kubectlapply-fqos-pod.yamlpod/qos-democreated#kubectldescribepodqos-demo|grepQoSQoSClass:Guaranteed从上面可以看出Kubernetes为Pod配置的QoS类是Guaranteed如果一个容器指定了自己的内存限制,但是没有内存请求,Kubernetes会自动给它分配一个符合内存限制的内存请求.同样,如果容器指定了自己的CPU限制但没有CPU请求,Kubernetes会自动为其分配与CPU限制相匹配的CPU请求。BurstablePods不符合保证QoS类的条件。Pod中至少有一个容器有内存或CPU请求。#catqos-pod.yamlapiVersion:v1kind:Podmetadata:name:qos-demo-2spec:containers:-name:qos-demo-2-ctrimage:nginxresources:limits:memory:"200Mi"请求:memory:"100Mi"#kubectlapply-fqos-pod.yamlpod/qos-demo-2created#kubectldescribepodqos-demo|grepQoSQoSClass:Burstable从上面可以看出Kubernetes为Pod配置的QoS类是Burstable。BestEffortPod中的容器必须没有内存和CPU限制或请求设置#catqos-pod.yamlapiVersion:v1kind:Podmetadata:name:qos-demo-2spec:containers:-name:qos-demo-2-ctrimage:nginx#kubectlapply-fqos-pod.yamlpod/qos-demo-2已创建#kubectldescribepodqos-demo|grepQoSQoSClass:BestEffort总结QOS是K8S中的一种资源保护机制,主要是针对内存技术等不可压缩资源的控制。比如在内存中,它为不同的Pod和容器构建OOM分数,并借助内核策略,使得当节点内存资源不足时,内核可以根据策略的优先级将优先级较低的kill掉。(分数越高,优先级越低)Pod。优先级从高到低排序:GuaranteedBurstableBestEffort参考文章https://kubernetes.io/zh/docs/tasks/configure-pod-container/quality-service-pod/点击“阅读原文”以获得更好的阅读体验!
