k8s qos等级

QoS(Quality of Service) 简介
QoS(Quality of Service) 简介 QoS(Quality of Service),大部分译为 “服务质量等级”,又译作 “服务质量保证”,是作用在 Pod 上的一个配置,当 Kubernetes 创建一个 Pod 时,它就会给这个 Pod 分配一个 QoS 等级,可以是以下等级之一:

  • Guaranteed
    Pod 里的每个容器都必须有内存/CPU 限制和请求,而且值必须相等。如果一个容器只指明limit而未设定request,则request的值等于limit值。
    如下:
##pod yaml如下:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: spring-k8s
    image: registry-1.ict-mec.net:18443/nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    resources:
      limits:       #####requests与limit的值相等
        cpu: 300m
        memory: 400Mi
      requests:
        cpu: 300m
        memory: 400Mi

#查看qos等级
[root@node162 test]# kubectl describe po nginx   | grep QoS
QoS Class:                   Guaranteed
  • Burstable:
    Pod 里至少有一个容器有内存或者 CPU 请求且不满足 Guarantee 等级的要求,即内存/CPU 的值设置的不同。
##pod yaml如下:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: spring-k8s
    image: registry-1.ict-mec.net:18443/nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    resources:
      limits:       ###requests与limit的值不相等
        cpu: 300m
        memory: 400Mi
      requests:
        cpu: 200m
        memory: 300Mi

#查看qos等级
[root@node162 test]# kubectl describe po nginx   | grep QoS
QoS Class:                   Burstable
  • BestEffort:
    容器必须没有任何内存或者 CPU 的限制或请求(没有配置资源限制的情况下,默认为 BestEffort。)
###pod  yaml文件如下:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: spring-k8s
    image: registry-1.ict-mec.net:18443/nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
####查看
[root@node162 ~]# kubectl describe po nginx  | grep -i QoS
QoS Class:                   BestEffort

该配置不是通过一个配置项来配置的,而是通过配置 CPU/MEM的 limitsrequests 值的大小来确认服务质量等级。如果不设,Pod虽然很容易被调度,可以使用整个node资源,但是当资源紧俏时,会被第一个kill。
CPU 在压缩资源部分已经提到CPU属于可压缩资源,当pod使用超过设置的limits值,pod中进程使用cpu会被限制,但不会被kill。
内存 Kubernetes通过cgroup给pod设置QoS级别,当资源不足时先kill优先级低的pod,在实际使用过程中,通过OOM分数值来实现,OOM分数值从0-1000。

OOM分数值根据OOM_ADJ参数计算得出,对于Guaranteed级别的pod,OOM_ADJ参数设置成了-998,对于BestEffort级别的pod,OOM_ADJ参数设置成了1000,对于Burstable级别的POD,OOM_ADJ参数取值从2到999。对于kuberntes保留资源,比如kubelet,docker,OOM_ADJ参数设置成了-999,表示不会被OOM kill掉。OOM_ADJ参数设置的越大,通过OOM_ADJ参数计算出来OOM分数越高,表明该pod优先级就越低,当出现资源竞争时会越早被kill掉,对于OOM_ADJ参数是-999的表示kubernetes永远不会因为OOM而被kill掉。

QoS 优先级
Guaranteed --> Burstable --> BestEffort

Kubernetes 资源回收策略

Kubernetes 资源回收策略:当集群监控到 node 节点内存或者CPU资源耗尽时,为了保护node正常工作,就会启动资源回收策略,通过驱逐节点上Pod来减少资源占用。

这三种策略在由于资源不足而驱逐 Pod 时,有不同的优先级。

BestEffort --> Burstable --> Guaranteed(可以理解先驱逐 BestEffort,再 Burstable,最后是 Guaranteed。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值