概述
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:一般给离线应用使用