Kubernetes 1.31 升级指南:核心特性与重点注意事项

1 分钟阅读
152 字
Huxulm

总结了从 Kubernetes 1.30 升级到 1.31 的关键变更、弃用 API 及生产环境避坑指南,助力平稳过渡到 Elli 版本。

Kubernetes v1.31 正式发布,代号为 “Elli”。对于运维和架构师来说,这一版本标志着 Kubernetes 在实现“云中立”目标上迈出了里程碑式的一步——彻底移除了内置的云供应商集成代码。

如果你计划将生产集群从 1.30 升级到 1.31,请务必关注以下核心变更。


🚨 核心预警:必须要做的变更

1. 彻底移除 In-tree 云供应商集成

这是 1.31 最重大的变化。长期以来,K8s 核心代码库中包含各家云厂商(AWS, GCP, Azure 等)的特定代码。在 1.31 中,这些代码已全部移除。

  • 影响:如果你仍在依赖内置的存储卷插件(如 kubernetes.io/aws-ebskubernetes.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 从 PendingBound 的耗时非常有帮助,生产环境中可用于排查存储挂载慢的性能瓶颈。

⚠️ 弃用与移除清单

类别描述状态
Kubelet--keep-terminated-pod-volumes 参数正式移除
Node APIstatus.nodeInfo.kubeProxyVersion 字段已弃用 (因其值不准确)
Kube-apiserver--enable-logs-handler 参数默认关闭 (计划 1.33 移除)
调度器非 CSI 存储卷限制插件 (如 AzureDiskLimits)已弃用

💡 生产环境升级建议

  1. 检查驱动兼容性:在升级 Control Plane 之前,请务必更新所有的 CSI 驱动程序(尤其是云厂商相关的驱动)。
  2. 内核版本确认:如果你打算试用 nftables 功能,请确保工作节点运行的 Linux 内核版本高于 5.13,且 nft 工具版本在 1.0.1 以上。
  3. 灰度策略:先升级一个非生产集群,并重点观察存储卷的挂载/卸载(Attach/Detach)流程,因为 1.31 的云供应商转换逻辑最为敏感。
  4. 辅助工具:推荐在升级前运行 kubent (Kube No Trouble) 来扫描集群中是否仍存在即将废弃的资源定义。

结语

Kubernetes 1.31 的发布意味着核心代码更加纯粹和稳定。虽然云供应商代码的移除增加了升级初期的检查工作,但这对于集群的长期可维护性和安全性具有深远意义。

准备好迎接 “Elli” 了吗?请在测试环境中先行启动!