Kubernetes 1.37 将 Memory QoS 升级为 Beta,并在所有节点上默认启用。该功能利用 cgroup v2 的内存控制器,为内核提供更精准的容器内存管理指引。默认情况下,kubelet 不会写入 memory.high、memory.min 或 memory.low,除非你显式配置。
如何开启或配置
- 开启内存限速
```yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
memoryThrottlingFactor: 0.9
```
该值在 0–1 之间,用于计算 Burstable 与 BestEffort 容器的 memory.high。
- 开启分层内存保护
```yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
memoryReservationPolicy: TieredReservation
```
- 同时开启限速与分层保护
```yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
memoryThrottlingFactor: 0.9
memoryReservationPolicy: TieredReservation
```
- 完全禁用
```yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
MemoryQoS: false
```
已知限制
- 分层保护是节点级别的,所有 pod 共享同一策略;无法单独为某些 pod 开关。
- 采用硬性保留时,容器的 page cache 也会被计入,可能导致大文件读取占用过多内存。
后续计划
Memory QoS 将继续收集 Beta 期反馈,随后推进至 GA。若遇到问题,请在 kubernetes/kubernetes 提交 issue。
🔗 原文:点击查看