2. Kubernetes 版本演进与 API 生命周期

在制定集群升级治理模板时,理解 Kubernetes 的版本号规则与 API 生命周期是进行 API 废弃检查的前提。Kubernetes 遵循语义化版本(SemVer)规范,同时通过严格的 API 阶段(alpha → beta → stable)来管理资源的废弃与移除,确保集群在升级过程中不因 API 变更而中断业务。

2.1 Kubernetes 版本号规则

Kubernetes 版本号采用 v<major>.<minor>.<patch> 格式,每个字段的含义如下:

字段 含义 示例 升级影响
Major 主版本号,表示不兼容的 API 变更 v1 → v2 通常需要大规模迁移,K8s 社区极少使用
Minor 次版本号,表示功能新增或废弃 v1.24 → v1.25 包含 API 废弃与移除,需检查清单
Patch 补丁版本号,仅包含安全修复与 Bug 修复 v1.25.3 → v1.25.4 无 API 变更,可安全升级
运维要点: 在升级治理模板中,minor 版本升级是 API 废弃检查的核心关注点。每次 minor 版本升级前,必须运行 kubectl convert 或 kube-no-trouble 等工具扫描集群中已废弃的 API 资源。

2.2 API 版本阶段与废弃策略

Kubernetes API 资源从引入到最终移除,会经历三个明确的阶段:v1alpha1 → v1beta1 → v1。每个阶段都有不同的稳定性承诺和废弃时间线。

核心原则: 只有进入 v1(GA)阶段的 API 才提供长期向后兼容性。alpha 和 beta 阶段的 API 可能在任意版本中被废弃或移除,且不保证迁移路径。

2.2.1 各阶段特征对比

阶段 版本标识 默认启用 废弃后保留版本数 移除策略
Alpha v1alpha1, v1alpha2 … 否(需 Feature Gate) 无保证 可在下一 minor 版本直接移除
Beta v1beta1, v1beta2 … 是 至少保留 3 个 minor 版本 废弃后 3 个 minor 版本内移除
Stable (GA) v1 是 长期保留 仅在新 major 版本中移除

2.2.2 废弃与移除时间线示例

以 networkpolicies 资源为例,展示从 beta 到 GA 再到废弃的完整生命周期:

  • v1.7:引入 networking.k8s.io/v1beta1(Beta)
  • v1.12:networking.k8s.io/v1 进入 GA,v1beta1 标记为废弃
  • v1.15:v1beta1 被移除,仅保留 v1
常见陷阱: 许多团队在升级时只关注当前使用的 API 版本,忽略了 CustomResourceDefinition (CRD) 和 Aggregated API 的版本变更。CRD 的 v1beta1 已在 v1.22 中被移除,如果集群中仍有使用 v1beta1 的 CRD,升级将直接失败。

2.3 API 废弃检查流程

在升级治理模板中,API 废弃检查应作为节点排空前的强制前置步骤。以下是标准检查流程:

  1. 扫描集群资源:使用 kubectl get --all-namespaces -o json | jq '.items[] | .apiVersion' | sort -u 列出所有使用的 API 版本。
  2. 比对废弃清单:对照目标版本的 deprecated.yaml 或社区维护的 kube-apidiff 工具,标记已废弃的 API。
  3. 迁移资源:使用 kubectl convert -f <file> --output-version <new-version> 将资源清单转换为新版本。
  4. 验证兼容性:在测试集群中应用转换后的资源,确认无错误。
  5. 更新模板制品库:将制品库中的 Helm Chart、Kustomize 模板、Operator 配置更新为新的 API 版本。

2.4 API 生命周期与版本演进关系图

下图展示了 Kubernetes 版本演进过程中,API 从引入到移除的完整生命周期,以及各阶段对应的升级风险等级:

Kubernetes API 生命周期与版本演进关系图 Kubernetes API 生命周期与版本演进 v1.20 v1.22 v1.25 v1.28 未来 v1alpha1 (实验性) 默认关闭,随时移除 v1beta1 (Beta) 默认启用,保留3个版本 v1 (GA/Stable) 长期兼容,仅major移除 ⚠️ v1.22: CRD v1beta1 移除 ⚠️ v1.25: PodSecurityPolicy 移除 ⚠️ v1.26+: 持续废弃 升级风险等级 高风险 (Alpha→Beta) 中风险 (Beta→GA) 低风险 (GA→GA) 说明:每次 minor 版本升级前,必须检查目标版本中已废弃的 API,并完成资源迁移

2.5 版本升级与 API 废弃对照表

以下表格列出了近几个主要 Kubernetes 版本中关键的 API 废弃与移除事件,供升级治理模板参考:

K8s 版本 废弃的 API 版本 移除的 API 版本 影响资源 迁移目标版本
v1.22 — apiextensions.k8s.io/v1beta1
rbac.authorization.k8s.io/v1beta1
CRD, Role, ClusterRole v1
v1.25 policy/v1beta1 (PodDisruptionBudget) policy/v1beta1 (PodSecurityPolicy) PDB, PSP policy/v1
v1.26 flowcontrol.apiserver.k8s.io/v1beta1 — FlowSchema, PriorityLevelConfiguration v1beta2 → v1
v1.27 storage.k8s.io/v1beta1 (CSIDriver, CSINode) — CSI 相关资源 v1
v1.28 node.k8s.io/v1beta1 (RuntimeClass) — RuntimeClass v1
制品库治理建议: 在模板制品库中为每个 Helm Chart 或 Kustomize 项目维护一个 api-versions.yaml 文件,记录当前使用的所有 API 版本及其状态(active / deprecated / removed)。每次升级前,运行自动化脚本对比目标版本与当前版本,生成废弃 API 清单。

2.6 节点排空前的 API 检查清单

在节点排空计划中,API 废弃检查应作为前置条件之一。以下是标准检查清单:

  • ☐ 扫描集群:使用 kubectl get --raw /openapi/v2 获取集群支持的 API 版本列表。
  • ☐ 比对目标版本:下载目标版本的 openapi.json,使用 kubectl-diff 或 kube-apidiff 找出已废弃的 API。
  • ☐ 检查 CRD:列出所有 CRD 及其使用的 API 版本,确保没有引用 v1beta1 的 CRD。
  • ☐ 检查 Webhook:确认 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 使用的 API 版本未被废弃。
  • ☐ 检查 Operator:确保 Operator 管理的资源版本与目标集群兼容。
  • ☐ 更新制品库:将模板制品库中的所有 YAML 文件更新为新的 API 版本。
  • ☐ 测试验证:在测试集群中执行 kubectl apply --dry-run=server -f <manifest> 验证兼容性。

完成上述检查后,方可进入节点排空阶段。API 废弃检查是升级治理模板中不可跳过的安全门禁,直接决定了升级的成功率与业务连续性。