Kubernetes v1.37:内存QoS升级至测试版
Kubernetes v1.37 标志着 Memory QoS 进入 Beta 毕业阶段,现已默认在 Linux 节点上启用(基于 cgroup v2)。该功能通过利用内核内存控制器提供更优的引导,从而增强容器内存管理。Memory QoS 最初于 v1.22 以 Alpha 版本引入,并在 v1.36 中通过分层内存预留功能进行了扩展。Beta 升级意味着 MemoryQoS 功能门控在 v1.37 的所有 kubelet 中默认激活,无需进行显式配置更改。关键在于,默认 kubelet 配置不会启用内存节流或预留,除非用户明确选择启用。用户可以通过 kubelet 配置字段启用特定的 Memory QoS 行为。例如,设置 memoryThrottlingFactor 可为 Burstable 和 BestEffort 容器激活 memory.high 节流。或者,将 memoryReservationPolicy 配置为 TieredReservation,可通过 memory.min 和 memory.low 实现分层内存保护。v1.37 中的一个重大变更是 memoryThrottlingFactor 的默认值从 0.9 调整为 null,从而防止现有集群在升级时自动启用内存节流。这确保了除非显式配置其他行为,否则运行时行为保持一致。要配置 Memory QoS,集群操作员可以设置 memoryThrottlingFactor 以启用节流,设置 memoryReservationPolicy 以启用分层预留。两者可同时启用或独立启用。完全禁用 Memory QoS 可通过将功能门控设置为 false 并相应调整 kubelet 配置来实现。一个已知限制是内存预留为节点级,一致地应用于所有 Pod,无论其期望行为如何,从而影响对单个 Pod 的控制。Memory QoS 的下一个开发阶段是其毕业至通用可用(General Availability),持续的反馈将塑造未来的调整。