1、超卖
kubernetes 中 pod 对资源的申请是以容器为最小单位进行的,针对每个容器,它都可以通过如下两个信息指定它所希望的资源量:
- request:预分配资源。一开始就分配出去。
- limit:限制使用的资源上限。动态分配,按需分配。
超卖的场景理解:
一个 k8s 集群如果有 10 个 CPU 的资源。
此时有5个pod。每个pod的request=2,limit=5;
同一时间,如果5个pod都直接分配最高上限的资源limit=5,那么集群肯定无法满足。所以,这里打了一个时间差。就是认为,任一时刻,5个pod都不可能用到5个CPU这么多。所以,初始状态下,集群给每个pod分配了2个CPU,当某个pod流量上来需求增加了,再动态分配更多的CPU,但是不能超出超出limit=5。
- limit 的资源限制是通过 cgroups 来进行限制的。 每个 POD,每个容器都会在/sys/fs/cgroup 下留有对应的记录。
好处:
- 动态分配,按需分配,避免资源浪费。
坏处:
- request+limit 分配策略,依赖于经验值。经验值来自对流量规模的评估和压测结果。
- 如果request 的值设置的过于小,limit 的值设置的过于大, 那么在业务高峰期就存在把资源玩炸了的风险。