Kubernetes v1.31 正式发布,代号为 “Elli”。对于运维和架构师来说,这一版本标志着 Kubernetes 在实现“云中立”目标上迈出了里程碑式的一步——彻底移除了内置的云供应商集成代码。
如果你计划将生产集群从 1.30 升级到 1.31,请务必关注以下核心变更。
🚨 核心预警:必须要做的变更
1. 彻底移除 In-tree 云供应商集成
这是 1.31 最重大的变化。长期以来,K8s 核心代码库中包含各家云厂商(AWS, GCP, Azure 等)的特定代码。在 1.31 中,这些代码已全部移除。
- 影响:如果你仍在依赖内置的存储卷插件(如
kubernetes.io/aws-ebs或kubernetes.io/gce-pd),升级后将无法正常工作。 - 行动:升级前必须完成向 CSI (Container Storage Interface) 驱动的迁移。确保你的集群已安装对应的外部 Cloud Controller Manager (CCM)。
2. AppArmor 支持进入 GA(正式版)
AppArmor 的支持终于稳定。此前它是通过 Annotations(注解)控制的,从 1.30 开始引入字段支持,在 1.31 中正式标准化。
- 变更:建议停止使用
container.apparmor.security.beta.kubernetes.io注解。 - 行动:改用 Pod 安全上下文中的
securityContext.appArmorProfile字段。
🛠️ 网络与存储变更
Kube-Proxy 与 nftables (Beta)
Kube-proxy 的 nftables 后端现在进入 Beta 阶段。
- 注意:在 Linux 上,nftables 被设计为 iptables 的现代继任者。如果你的系统内核支持(建议 5.13+),可以考虑测试此功能以获得更好的性能和扩展性。
存储卷状态追踪 (GA)
PersistentVolume 的状态字段中新增了 lastTransitionTime。
- 价值:这对监控 PV 从
Pending到Bound的耗时非常有帮助,生产环境中可用于排查存储挂载慢的性能瓶颈。
⚠️ 弃用与移除清单
| 类别 | 描述 | 状态 |
|---|---|---|
| Kubelet | --keep-terminated-pod-volumes 参数 | 正式移除 |
| Node API | status.nodeInfo.kubeProxyVersion 字段 | 已弃用 (因其值不准确) |
| Kube-apiserver | --enable-logs-handler 参数 | 默认关闭 (计划 1.33 移除) |
| 调度器 | 非 CSI 存储卷限制插件 (如 AzureDiskLimits) | 已弃用 |
💡 生产环境升级建议
- 检查驱动兼容性:在升级 Control Plane 之前,请务必更新所有的 CSI 驱动程序(尤其是云厂商相关的驱动)。
- 内核版本确认:如果你打算试用 nftables 功能,请确保工作节点运行的 Linux 内核版本高于 5.13,且
nft工具版本在 1.0.1 以上。 - 灰度策略:先升级一个非生产集群,并重点观察存储卷的挂载/卸载(Attach/Detach)流程,因为 1.31 的云供应商转换逻辑最为敏感。
- 辅助工具:推荐在升级前运行 kubent (Kube No Trouble) 来扫描集群中是否仍存在即将废弃的资源定义。
结语
Kubernetes 1.31 的发布意味着核心代码更加纯粹和稳定。虽然云供应商代码的移除增加了升级初期的检查工作,但这对于集群的长期可维护性和安全性具有深远意义。
准备好迎接 “Elli” 了吗?请在测试环境中先行启动!