文章
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 管理
- 解读:新增
ServiceCIDR 和 IPAddress 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.29 前,先在 1.27/1.28 上完成外部 CCM 部署与切换验证,避免升级日叠加风险。
- 启用 KMS v2:评估 etcd 静态加密升级,结合密钥轮换策略。
- FlowSchema 迁移:扫描所有 manifest 中的
flowcontrol.apiserver.k8s.io/v1beta2,统一改 v1。
- 包仓库切换:节点 bootstrap 脚本改用
pkgs.k8s.io,避免 2024-01 后无法安装。
- 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 |
关联知识
参考资源
状态: 📖 已掌握