# Kubernetes v1.37 抢先看:迁移准备、安全与资源管理 Kubernetes v1.37 正在收敛为一次兼顾 **迁移准备、运行时安全和资源管理** 的版本更新: `kube-proxy` 的 ipvs 模式进入弃用周期,CGroup v1 的退出需要尽早规划, SELinux 卷标签机制也将带来需要提前验证的行为变化。 与此同时,Metrics API、Rootless kubelet 和卷健康监控等能力持续成熟, 为可观测性和更安全的节点运行时打下基础。 本文梳理了值得平台团队和集群运维人员优先关注的 v1.37 计划内变更。 以下内容反映的是当前发布周期的状态,实际发布日期前仍可能调整。 > 如果你的集群仍在使用 ipvs 或 CGroup v1,应将迁移纳入近期计划; > 如果工作负载启用了 SELinux 并共享存储卷,应在升级前完成兼容性验证。 ## 一分钟了解 v1.37 - **网络**:`kube-proxy` 的 ipvs 模式开始弃用,预计 v1.40 默认禁用、v1.43 完全移除;应尽早评估替代模式。 - **节点运行时**:CGroup v1 已进入退出阶段;Rootless kubelet 预计升级到 Beta,为降低主机级 root 权限依赖提供新的选择。 - **存储与安全**:SELinuxMount 预计默认启用。使用不同 SELinux 标签共享同一卷的 Pod 需要重点回归测试;卷健康监控则重新以 Alpha 形态推进。 - **可观测性**:`metrics.k8s.io` API 预计结束近九年的 Beta 阶段,升级为稳定版(GA)。 ## Kubernetes v1.37 的弃用和移除 ### kubectl:`kubectl run --filename/-f` 将被弃用 `kubectl run` 的 `--filename`(或 `-f`)参数将被弃用, 因为生成的 Pod 始终纯粹由 `NAME` 和 `--image` 等 CLI 参数构建。 原始 Issue 和讨论请参见 [kubernetes/kubernetes#138671](https://github.com/kubernetes/kubernetes/issues/138671)。 ### kubelet:静态 Pod 不再能引用 Secret 或 ConfigMap 静态 Pod 从未打算直接读取 API 资源,因为它们不是通过 API 服务器创建的 —— 但一个缺陷曾允许它们通过 `configMapRef` 或 `secretRef` 等字段引用 Secret 或 ConfigMap。 该缺陷现已修复:从 v1.37 起,这些引用被严格禁止, 并且先前用于绕过此限制的 `PreventStaticPodAPIReferences` 特性门控已被移除。 原始 Issue 和讨论请参见 [kubernetes/kubernetes#140226](https://github.com/kubernetes/kubernetes/issues/140226)。 ### 弃用 kube-proxy 对 `ipvs` 模式的支持 `kube-proxy` 对 `ipvs` 模式的支持是在 v1.8 中引入的,旨在解决 `iptables` 性能瓶颈。 然而,由于内核 `ipvs` API 单独无法完全实现 Kubernetes Service, `ipvs` 模式在底层仍继续使用 `iptables` ([KEP-3866,“kube-proxy 的 ipvs 模式救不了我们”](https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/3866-nftables-proxy/README.md#the-ipvs-mode-of-kube-proxy-will-not-save-us))。 在 ipvs 模式下(或在 KubeProxyConfiguration 中设置 `mode: ipvs`)运行 `kube-proxy` 的集群, 现在会在启动时记录一条弃用警告。弃用时间表如下: - 到 v1.40,`kube-proxy` 的 `ipvs` 模式预计将默认禁用(仍可通过特性门控选择) - 到 v1.43,对 `ipvs` 模式的支持将被完全移除 [KEP-5495,毕业标准](https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/5495-deprecate-ipvs-mode-in-kube-proxy/README.md#graduation-criteria)。 要确认你当前运行的是哪种模式,请使用: ```bash kubectl -n kube-system get configmap kube-proxy -o jsonpath='{.data.config\.conf}' | grep 'mode:' ``` 要了解此次弃用背后的基本原理,请参见 [KEP-5495:弃用 kube-proxy 中的 ipvs 模式](https://kubernetes.dev/resources/keps/5495)。 ## 持续进行中的重大变更:未来将移除对 CGroup v1 的支持 随着现代 Linux 发行版和容器运行时使用 [CGroup v2](https://kubernetes.io/zh-cn/docs/concepts/architecture/cgroups/) 作为默认值, 对旧版 CGroup v1 的支持正被正式逐步淘汰。 自 v1.35 版本起,`failCgroupV1` 设置默认为 true。 因此,`kubelet` 将在任何仍依赖 CGroup v1 的节点上初始化失败, 除非应用显式的配置覆写。 ```yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration failCgroupV1: false # 临时覆写 ``` 使用此覆写应被视为一种短期修复。 高级资源管理能力,例如就地 Pod 调整大小(In-Place Pod Resizing)和 分层内存保护(Tiered Memory Protection),完全依赖于 CGroup v2。 虽然该覆写在 Kubernetes v1.37 中仍然可用,但鼓励用户迁移到 CGroup v2, 因为对 CGroup v1 的支持计划在未来的某个版本中被移除。 要了解有关此弃用的更多信息,请参阅 [KEP-5573:移除 CGroup v1 支持](https://kubernetes.dev/resources/keps/5573)。 ## Kubernetes v1.37 中的破坏性变更 ### SELinux 卷重新标记("SELinuxMount")进入 GA {#SELinuxMount-GA} SELinuxMount 预计将在 v1.37 中达到 GA 并默认启用。 届时卷将使用 `-o context=