QoS
,全称Quality of Service
,中文称为服务质量
。Kubernetes
依赖这个来确认当节点不够资源时,哪些pod
优先被驱逐。当节点出现资源压力而触发驱逐动作时,只有超过了配置的request的资源可能会被驱逐。
Qos
分为以下3种:
- Guaranteed
- 这些
pod
最后被驱逐。 - 这些
pod
能通过cpu管理策略(CPU management policy)中的静态(static)策略来使用独占cpu。 - 标准:
pod
所有容器必须有memory limit和request配置- 所有容器的memory limit必须等于memory request
- 所有容器必须有cpu limit和request配置
- 所有容器的cpu limit必须等于cpu request
- 这些
- Burstable
- 这些
pod
优先于Guaranteed
被驱逐。 - 标准:
- 不满足
Guaranteed
的标准 - 至少一个容器有memory或cpu的request或limit配置。
- 不满足
- 这些
- BestEffort
- 这些
pod
最优先被驱逐。 - 无限制是有node节点的memory和cpu资源。
- 标准;
- 不满足
Guaranteed
和Burstable
的标准。 - 所有容器都没有配置memory和cpu的request和limit。
- 不满足
- 这些
Memory QoS使用cgroup v2的内存管理控制器(memory controller
),v1.22
版本中处于Alpha
阶段并且默认为false不开启。这里使用cgroup v2的内存管理控制器的memory.min
来处理容器中的memory request的值,使用memory.high
来处理容器中的memory limit的值。
(•̀ᴗ•́)و ̑̑