文章

K8s 1.29 Mandala 详解

Kubernetes 1.29 Mandala 详解

概述

v1.29「Mandala」于 2023-12-13 发布,代号取曼陀罗「宇宙」之意。含 49 项增强(GA 11 / Beta 19 / Alpha 19)。最大破坏性变更是默认移除树内云提供商集成,所有云集群必须迁移到外部 CCM。同时 KMS v2 静态加密、ReadWriteOncePod 等 GA,nftables 后端、动态 Service IP 管理 Alpha 引入。

发布基本信息

项目内容
发布日期2023-12-13
代号Mandala(宇宙)
开发周期14 周(2023-09-06 ~ 2023-12-13)
增强总数49(GA 11 / Beta 19 / Alpha 19)
贡献888 家公司、1422 名个人

主要新特性解读

🟢 GA 特性

1. ReadWriteOncePod(KEP-2429)

  • 解决问题:旧 ReadWriteOnce 只限制单节点,同节点多 Pod 仍可并发读写,无法保证「全局唯一写入者」。
  • 新机制accessModes: [ReadWriteOncePod] 确保整个集群只有一个 Pod 能读写该 PVC。
  • 适用:需要单写入者强保证的有状态应用(如部分数据库)。
  • 相关概念:PVC accessModes、volumeBindingMode、StatefulSet。

2. KMS v2 静态加密(KEP-3299)

  • 解读:用外部密钥服务加密 etcd 中的 API 数据,相比 v1 大幅改进性能、密钥轮换、健康检查与可观测性。
  • 影响KMS v1 feature gate 默认关闭,推荐迁移 v2。
  • 相关概念:EncryptionConfiguration、etcd 加密、envelope encryption、KMS provider。

3. CSI 节点卷扩展 Secret

  • 解读NodeExpandVolumeRequest 可携带 Secret(如 LUKS 加密块存储密码),CSI 驱动在节点扩容时访问后端。
  • 相关概念:CSI NodeExpandVolume、LUKS、加密卷。

4. 其他 GA:API LIST 分页、Job Ready Pod 追踪、Kubelet 资源指标端点、CRD 验证表达式语言、组件健康 SLI、保留 NodePort 范围、APF 优先级与公平性。

🟡 Beta 特性

1. QueueingHint(调度器队列优化)

  • 解读:调度器重新入队时用 hint 判断 Pod 更新是否使其变得可调度,显著减少无用调度重试,提升吞吐。
  • 相关概念:调度队列 activeQ/backoffQ/unschedulableQ、调度插件、SchedulerQueueingHints

2. 节点生命周期与 TaintManager 解耦

  • 解读:原 NodeLifecycleController 拆为两个:一个给不健康节点加污点,一个(TaintManager)按 NoExecute 污点驱逐 Pod。职责分离便于调优与排障。
  • 相关概念NoExecute taint、TolerationSeconds、节点健康条件。

3. 遗留 Secret-based SA Token 清理

  • 解读:超过 1 年未用的遗留自动生成 token 标记无效,再 1 年未用则删除,减少攻击面
  • 相关概念:ServiceAccount Token、BoundToken、Secret.type: kubernetes.io/service-account-token

🔴 Alpha 特性

1. kube-proxy nftables 后端(KEP-3866)

  • 解读:iptables 开发停滞,nftables 解决其性能瓶颈。Alpha 引入新后端,为后续默认启用铺路。
  • 演进:v1.31 默认启用 Beta,v1.33 GA。
  • 相关概念:iptables vs nftables、conntrack、Service ClusterIP 转发。

2. ServiceCIDR / IPAddress 动态 IP 管理

  • 解读:新增 ServiceCIDRIPAddress API 对象,可动态增加 Service IP 范围,无需重启 apiserver,解决 IP 耗尽。
  • 相关概念:Service CIDR、ClusterIP、--service-cluster-ip-range

3. matchLabelKeys Pod 亲和性

  • 解读:在 PodAffinity/AntiAffinity 中用 matchLabelKeys 配合 pod-template-hash,提升滚动更新期间亲和计算准确性。
  • 相关概念:PodAntiAffinity、topologyKey、滚动更新、pod-template-hash

4. Windows Pod 就地资源更新 & 按 RuntimeClass 拉取镜像

  • 面向 Windows 节点的特性,Hyper-V 容器场景按 RuntimeClass 拉不同镜像。

弃用与移除

类型项目说明
移除树内云提供商集成默认不内置 Azure/GCE/vSphere,必须用外部 CCM 或设 DisableCloudProviders=false(过渡)
移除flowcontrol.v1beta2必须迁移到 v1
关闭遗留包仓库apt/yum.kubernetes.io 2024-01 关闭,迁移 pkgs.k8s.io
弃用status.nodeInfo.kubeProxyVersion值不准确,未来移除
默认关闭KMS v1推荐迁移 KMS v2

重大变更与升级注意

⚠️ 云提供商集成移除(最大影响)

  • 推荐:启用外部 Cloud Controller Manager,kubelet/apiserver/CCM 设 --cloud-provider=external
  • 回退(不推荐)DisableCloudProviders=false + DisableKubeletCloudCredentialProviders=false
  • 可用外部 CCM:AWS、Azure、GCE、OpenStack、vSphere。
  • 生产注意:阿里云 ACK 等托管集群通常已外部化,自建集群需自查。

⚠️ API 兼容

  • 使用 flowcontrol.v1beta2 的 manifest 与客户端必须先迁移。

⚠️ 包仓库迁移

  • 仍在用 apt/yum.kubernetes.io 的必须立即迁 pkgs.k8s.io

⚠️ 安全

  • 遗留 SA Token 自动失效/删除,依赖旧 token 的脚本会断。
  • KMS v1 默认关闭,需评估迁移 v2。

运维实践要点

  1. 云提供商迁移先行:升级到 1.29 前,先在 1.27/1.28 上完成外部 CCM 部署与切换验证,避免升级日叠加风险。
  2. 启用 KMS v2:评估 etcd 静态加密升级,结合密钥轮换策略。
  3. FlowSchema 迁移:扫描所有 manifest 中的 flowcontrol.apiserver.k8s.io/v1beta2,统一改 v1。
  4. 包仓库切换:节点 bootstrap 脚本改用 pkgs.k8s.io,避免 2024-01 后无法安装。
  5. ReadWriteOncePod 试点:对需单写入者的有状态应用迁移到 RWO-Pod。

常见问题 / 坑点

问题原因解决方案
升级后云 LB/Volume 失效树内云提供商移除部署外部 CCM 并设 --cloud-provider=external
kubectl 安装失败旧包仓库关闭切换到 pkgs.k8s.io
遗留 SA Token 脚本报错Token 被自动清理改用 Bound Token(TokenRequest API)
FlowSchema 应用报错v1beta2 移除flowcontrol.apiserver.k8s.io/v1

关联知识

参考资源


状态: 📖 已掌握