Kubernetes 1.30 版本已正式发布,代号为 “Uwubernetes”。这一版本不仅名字可爱,其实质内容也非常丰富,共包含 45 项增强功能(KEPs),其中 17 项进入稳定版(GA)。
在准备升级之前,请务必关注以下这些可能影响现有集群行为的“重头戏”。
🚨 紧急升级注意事项 (Urgent Upgrade Notes)
在更新控制平面和节点之前,请先确认以下变更:
1. 存储:防止未经授权的卷模式转换 (GA)
这是一个关键的安全变更。为了防止在从快照恢复卷(PVC)时发生未经授权的 volumeMode 更改(例如从 Filesystem 切换到 Block),1.30 版本在控制平面默认启用了这一保护机制。
- 影响:如果你依赖外部配置程序(external-provisioner)进行卷恢复,需确保升级到兼容版本,并为相关的 ServiceAccount 授予权限。
2. Node Swap 支持的调整
NodeSwap 功能在 1.30 中有了显著改进。
- 默认行为变更:Kubelet 配置中的
memorySwap.swapBehavior默认值现在是NoSwap。 - 建议:如果你之前启用了 Linux 节点的 Swap 支持,请检查配置文件,确认新的配置项是否符合预期。
3. AppArmor 注解弃用 (GA)
AppArmor 支持现已正式进入稳定阶段。
- 重要变更:旧的 Beta 阶段注解(如
container.apparmor.security.beta.kubernetes.io/...)已被弃用。 - 行动点:建议迁移到 Pod 的
securityContext字段来声明 AppArmor 配置。
🌟 核心功能亮点
1. 结构化授权配置 (Structured Authorization) - Beta
授权配置现在可以支持多个 Webhook 钩子,并且可以通过结构化的配置文件进行更精细的控制,而不仅仅是依赖命令行参数。这为复杂的企业级权限校验提供了更大的灵活性。
2. 基于容器资源的 Pod 自动缩放 (GA)
Horizontal Pod Autoscaler (HPA) 现在正式支持基于单个容器的资源使用情况进行缩放,而不仅仅是基于整个 Pod 的总和。这对于包含 Sidecar 容器(如网格代理、日志采集)的 Pod 来说是巨大的利好,可以避免因 Sidecar 资源占用波动导致的误缩放。
3. 节点日志查询 (Beta)
调试节点问题的神器!现在可以通过 kubectl get --raw "/api/v1/nodes/<node-name>/proxy/logs/?query=<service-name>" 直接查询节点的系统日志(如 kubelet 自身日志或 journald 日志),无需再 SSH 登录机器。
🛠 弃用与移除 (Deprecations & Removals)
- 移除安全上下文中的旧字段:持续清理旧有的 API 字段,请确保你的 YAML 清单符合最新的 API 规范。
- Go 版本升级:Kubernetes 1.30 使用 Go 1.22 构建,插件开发者需注意相关标准库的兼容性。
🚀 升级建议路径
- 备份数据:对 etcd 进行快照备份。
- 升级 kubeadm/kubectl:先升级管理工具。
- 升级控制平面:按顺序升级 API Server、Controller Manager 和 Scheduler。
- 升级 Worker 节点:逐个排空(Drain)并升级 Kubelet。
总结:1.30 版本在安全性(AppArmor, Volume Mode)和可观测性(Node Logs)上做了大量加法。如果你的集群涉及到复杂的存储快照操作或依赖旧版 AppArmor 注解,请在升级前务必进行充分测试。
希望这篇指南能帮助你顺利过渡到 “Uwubernetes”!