本文目录导读:

Kubernetes(K8s)的更新是一个高频且关键的操作,其变化主要体现在架构、资源对象、调度、安全、存储以及运维工具等多个方面,由于 K8s 每三个月发布一个大版本(如 v1.28、v1.29、v1.30),每次更新都会引入新功能、废弃旧功能或修改默认行为。
下面从几个核心维度总结 K8s 更新的主要变化:
核心架构与组件变化
- 控制面组件升级:
- kube-apiserver:API 版本变更(
autoscaling/v2成为稳定版),新的准入控制器(Admission Controller)被引入或默认启用。 - kube-controller-manager & kube-scheduler:引入新的控制器或调度策略(如 v1.28 引入的
NodeLogQuery、v1.29 引入的ReadWriteOncePod持久卷访问模式)。 - kubelet:对 CRI(容器运行时接口)的依赖更强,逐步移除对 Docker 的直接支持(已通过
dockershim在 v1.24 移除)。
- kube-apiserver:API 版本变更(
- node 节点:可能要求更新操作系统内核(如为了支持新的 cgroup v2、eBPF 特性)或新的 CNI 插件版本。
资源对象与 API 版本变化
这是最直接的变化,通常会影响 YAML 文件:
- GA(稳定版):之前处于测试版(Beta)的功能升级为稳定版,意味着你需要更新 API 版本(如
batch/v1beta1->batch/v1)。 - 弃用(Deprecated):某些老 API 版本被标记为弃用,将在未来几个版本中被移除。
- 例子:
extensions/v1beta1的 Ingress、DaemonSet 等已在较早版本中被移除。 - 注意:每次更新前务必检查 Deprecated API Migration Guide。
- 例子:
- 新资源类型:新的对象类型被引入。
- 例子:
ValidatingAdmissionPolicy(v1.28 稳定)、ResourceClaim(用于动态资源分配)、StorageVersionMigration。
- 例子:
调度与资源管理变化
- 调度框架:新的调度插件挂载点或默认调度器行为改变。
- NUMA 感知:对多 CPU 和内存拓扑更智能的调度支持(Node Topology Manager 改进)。
- 节点资源管理:引入或改进对
PodOverhead、PodResource的支持。 - 公平调度:可能引入新的 Pod 分组调度策略(如
PodGroup)。
安全与认证授权变化
- ServiceAccount:默认禁用了自动挂载服务账户令牌(
automountServiceAccountToken: false成为推荐配置)。 - Pod Security Standards:现已被
Pod Security Admission(PSA)替代,PodSecurityPolicy(PSP)已在 v1.25 移除。 - 证书轮换:kubelet 证书轮换行为可能改变。
- OIDC:对 OIDC 组映射、身份验证器的改进。
- CEL(Common Expression Language):在准入控制、
ValidatingAdmissionPolicy、自定义资源(CRD)验证中更广泛应用 CEL 表达式。
存储变化
- CSI(Container Storage Interface):成为唯一推荐的存储插件方式,
in-tree(内嵌)存储驱动(如 AWS EBS、GCE PD)正在逐步迁移到 CSI 驱动(可能要求你安装 CSI 驱动)。 - 卷快照:
VolumeSnapshot和VolumeSnapshotClassAPI 进入稳定版。 - Ephemeral Volume:内联临时卷(如 CSI 驱动的临时卷)更成熟。
- ReadWriteOncePod:新的访问模式,确保一个卷只能被一个 Pod 挂载(v1.29 稳定)。
网络变化
- Service 类型:可能对
ExternalName、NodePort、LoadBalancer行为有微调。 - Ingress:
networking.k8s.io/v1成为稳定版,networking.k8s.io/v1beta1被移除。- 例子:
pathType字段变为必填项。
- 例子:
- Gateway API:作为下一代入口/服务网格标准快速发展,但更新通常通过 CRD 提供,而非内置。
- IPv4/IPv6 双栈:更多功能进入稳定。
集群运维与工具变化
- kubeadm:更新命令参数、默认配置(如
kubeadm init和kubeadm upgrade的行为变化)。 - kubectl:新命令(如
kubectl debug、kubectl events)或已有命令的输出格式变化。 - 节点管理:
cordon、drain、uncordon行为可能改变(v1.28 改变了 drain 的 Pod 驱逐行为)。
关键变化示例(近几个版本)
| 版本 | 主要变化 |
|---|---|
| v1.30 | 引入 MatchLabelKeys 用于 Pod 拓扑分布约束;Pod Security Admission 默认开启;对 InPlace Pod Vertical Scaling 的 alpha 支持;节点日志查询功能增强。 |
| v1.29 | ReadWriteOncePod 进入稳定版;Job 对象引入 PodReplacementPolicy;NodeExpansion 在 CSI 中稳定; SidecarContainers 成为 Beta。 |
| v1.28 | ValidatingAdmissionPolicy 进入稳定版;NodeLogQuery alpha;RecoverVolumeExpansionFailure alpha;ServiceAccountTokenNodeBinding alpha。 |
| v1.27 | 移除 SelfLink 功能; SeccompDefault 进入稳定; StatefulSet 的 PodIndexLabel;旧 API 版本(如 flowcontrol.apiserver.k8s.io/v1beta1)被移除。 |
| v1.26 | 移除 Cri 和 ExecProbeTimeout 等弃用功能; PodSecurity 默认启用; CSIInlineVolume GA; PDB(PodDisruptionBudget)支持 unhealthyPodEvictionPolicy。 |
如何应对更新?
- 阅读 Release Notes:这是最重要的步骤,关注
Deprecation & Removal、New Features、Major Changes章节。 - 更新工具链:先升级
kubectl、helm等客户端工具,确保它们与新 API 版本兼容。 - 升级控制平面:先升级 Master 节点(控制平面),再逐个升级 Worker 节点。
- 更新 YAML 文件:使用
kubectl convert或pluto等工具检测并修复过时的 API 版本。 - 测试兼容性:在非生产环境(Dev/Staging)先升级,验证应用、监控、日志、网络、存储均正常工作。
- 关注 CVE 和安全公告:更新通常包含安全修复,跳过多个大版本更新风险较高,建议遵循 N-2 支持策略(即当前版本和最近两个版本)。
K8s 更新的核心变化是:
- API 版本升级与移除(需要修改YAML)
- 引入新的安全模型(PSA替代PSP)
- CSI 成为存储标准(逐渐移除内嵌驱动)
- 调度和资源管理更精细化(如NUMA、公平调度)
- 运维工具的默认行为改变(如kubeadm,kubectl)
建议每次更新前,仔细阅读 官方变更日志 和 升级说明,并利用 kubeadm 的 upgrade 命令或商业发行版(如 Rancher、OpenShift)的自动化升级工具来降低风险。