[基础] Kubernetes QoS Level

328 阅读1分钟

概述

pod-resource-management说明了如何把k8s原生的QoS Level映射到cgroups

内容

原生QoS

  • Guaranteed:对于cpu和mem,每个容器必须设置requests和limits,并且两者相等
  • Burstable:对于cpu和mem,至少有一个容器设置了requests和limits
  • BestEffort:对于cpu和mem,没有任何一个容器设置了requests和limits

cgroups

cpu

  • cpu.cfs_quota_us: cpu的时间,配合cpu.cfs_period_u
  • cpu.shares: 不对应具体值,只是一种份额(share)

memory

  • memory.limit_in_bytes: 虚拟内存限制值

Burstable

/sys/fs/cgroup/cpu/kubepods/burstable # cat cpu.shares                                
870
/sys/fs/cgroup/cpu/kubepods/burstable # cat ./*/cpu.shares
204
2
256
102
102
102
102

Besteffort

/sys/fs/cgroup/cpu/kubepods/besteffort # cat cpu.shares           
2
/sys/fs/cgroup/cpu/kubepods/besteffort # cat pod7465f35a-36a6-4a5a-bcba-b453a1192187/cpu.shares                                                                 
2
/sys/fs/cgroup/cpu/kubepods/besteffort # cat pod9d13da3e36ec2fa00865e55f80f2f3bb/cpu.shares                                         
2

OOMKilled

k8s的设计

  • BE: adj=1000
  • Burst: adj=max(2, 1000-10*available%), if request = 0, then adj=999 => adj < 1000
  • GT: adj=-998 => score=0 or 1

案例:manager

  • /proc/pid/oom_score: 22
  • /proc/pid/oom_score_adj: -998

混部QoS

  • SYSTEM: 新概念,一般首先保证系统Pod运行
  • LSR(Latency Sensitive Exclusive): ->Guaranteed,很少使用,一般用于非常重要的Pod或者独立资源池
  • LSR(Latency Sensitive Reserved): ->Guaranteed
  • LS(Latency Sensitive): ->Guaranteed/Burstable:一般给微服务在线应用使用
  • BE(Best Effort): ->BestEffort:一般给离线应用使用

image.png

参考

docs.kernel.org/admin-guide…

koordinator.sh/docs/archit…

dev.to/rrampage/su…