news 2026/4/24 3:03:19

集群升级与数据迁移:零停机升级的完整执行手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
集群升级与数据迁移:零停机升级的完整执行手册

文章目录

    • 为什么升级不是"小事"
    • 一、升级前的准备工作
      • 1.1 理解 K8s 版本支持策略
      • 1.2 kubeadm upgrade plan:升级前的全面体检
      • 1.3 etcd 备份:升级失败的最后防线
    • 二、Control Plane 升级:组件顺序决定成败
      • 2.1 升级顺序的本质原因
      • 2.2 kubeadm 升级 Control Plane
      • 2.3 手动部署集群的升级顺序
    • 三、Node 升级:drain 操作的细节
      • 3.1 升级流程总览
      • 3.2 drain 参数详解
      • 3.3 PodDisruptionBudget:升级卡住的根本原因
      • 3.4 StatefulSet 升级的特殊考虑
      • 3.5 kubelet 升级
    • 四、升级失败后的回滚路径
      • 4.1 Control Plane 回滚:可以但有代价
      • 4.2 Node 回滚:只能向前
    • 五、跨集群迁移:升级之外的另一个维度
      • 5.1 升级 vs 迁移的本质区别
      • 5.2 Velero 备份与恢复:7 阶段深度解析
      • 5.3 命名空间映射:测试到生产的标准路径
      • 5.4 PV/PVC 恢复的三种模式
      • 5.5 restore-existing-resource-policy:更新 vs 跳过
      • 5.6 迁移前后的完整 Checklist
    • 六、API 版本迁移:升级后不可跳过的工作
      • 6.1 K8s 1.22+ 的 API 废弃清单
      • 6.2 PodSecurityPolicy 迁移:最复杂的 API 迁移
      • 6.3 批量转换废弃 API
    • 七、完整升级决策树
    • 八、总结

核心问题:K8s 小版本升级为什么也需要提前规划?升级失败时如何安全回滚?

适用环境:K8s 1.22+ 集群,kubeadm 部署场景


为什么升级不是"小事"

在 K8s 生态中,"升级集群"这件事被严重低估。大多数工程师觉得:下载新版本二进制文件,改个配置,重启服务——不就完了?

实际情况远没有这么简单。K8s 每个次版本(minor version)都有严格的支持窗口(n-2 模式,当前支持的最低版本大约落后最新版本 2 个次版本),超过窗口后不再收到安全补丁。而真正让升级变得棘手的,是以下几个因素:

  • API 版本废弃:K8s 1.22 开始大量 beta API 被移除,1.25 直接删除了 PodSecurityPolicy
  • 组件版本耦合:Control Plane 各组件(etcd、apiserver、controller-manager、scheduler)之间有版本兼容性约束,必须按特定顺序升级
  • 有状态应用的 PDB 限制:StatefulSet 配合 PodDisruptionBudget,升级期间 drain 节点可能被无限期阻塞
  • 数据迁移场景:集群内升级和跨集群迁移是两件完全不同的事,工具和策略都不同

本文将按照以下顺序展开:

同集群升级

跨集群迁移

升级前的准备工作
兼容性检查 + etcd 备份

Control Plane 升级
etcd → apiserver → 其他组件

Node 升级
drain → kubelet → uncordon

升级还是迁移?

Velero 备份与恢复
同版本 vs 跨版本迁移

升级后验证
功能测试 + 性能基线对比

命名空间映射与
PV/PVC 恢复策略

API 版本迁移
废弃 API 批量转换

完成升级 / 迁移


一、升级前的准备工作

1.1 理解 K8s 版本支持策略

K8s 遵循n-2 支持窗口

当前最新版本支持的最低版本状态
1.321.30当前稳定
1.311.29安全修复
1.301.28安全修复

版本号格式为major.minor.patch

  • patch(补丁版本):向后兼容,放心升级
  • minor(次版本):有 API 变更,需要检查兼容性
  • major(主版本):罕见,目前从未发生

升级时应当升级到最新的 patch 版本,而非次版本的早期 patch。例如从 1.27.3 升级,应该升到 1.28.x 的最新 patch。

1.2 kubeadm upgrade plan:升级前的全面体检

kubeadm upgrade plan是升级前最关键的一步,它会检查:

  • 当前集群所有组件的版本
  • 可用的升级目标版本
  • 升级过程中需要变更的配置项
# 在 Control Plane 节点上执行kubeadm upgrade plan# 输出示例(简化)# [upgrade/config] Making sure the configuration is trustworthy:# Components that need to be upgraded by the target version:# COMPONENT CURRENT AVAILABLE# kube-apiserver v1.27.3 v1.28.5# kube-controller-manager v1.27.3 v1.28.5# kube-scheduler v1.27.3 v1.28.5# kube-proxy v1.27.3 v1.28.5# CoreDNS v1.10.1 v1.10.1# etcd 3.5.9.0 3.5.10.0# 可以看到升级目标版本,以及哪些组件将被更新

使用--print-config可以看到升级时将使用的完整配置:

kubeadm upgrade plan v1.28.5 --print-config

这个输出的价值在于:提前看到 kubelet 的配置变更,避免升级后出现意外的配置漂移。

1.3 etcd 备份:升级失败的最后防线

升级 etcd 之前必须先备份数据。etcd 是整个 K8s 集群的"大脑",所有资源状态都存储在其中。一旦 etcd 损坏,集群将无法恢复。

# 查看 etcd 静态 Pod 的位置kubectl get pods-nkube-system-lcomponent=etcd-owide# 在 etcd Pod 内执行快照备份ETCDCTL_API=3etcdctl\--endpoints=https://127.0.0.1:2379\--cacert=/etc/kubernetes/pki/etcd/ca.crt\--cert=/etc/kubernetes/pki/etcd/server.crt\--key=/etc/kubernetes/pki/etcd/server.key\snapshot save /tmp/etcd-snapshot-$(date+%Y%m%d).db# 验证备份文件ls-lh/tmp/etcd-snapshot-*.db

提示:etcd 快照文件通常在 100MB~数 GB 之间,取决于集群中存储的资源数量。备份目标路径需要确保有足够磁盘空间。


二、Control Plane 升级:组件顺序决定成败

2.1 升级顺序的本质原因

K8s Control Plane 各组件之间的版本兼容性遵循以下规则:

Control Plane 组件

所有组件依赖

版本约束

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 3:03:17

PHP日期时间函数date() 详解

date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考.日期时间函数是PHP 的核心组成部分。无需安装即可使用这些函数。下面来详细说说date函数的具体用法&#…

作者头像 李华
网站建设 2026/4/24 3:00:31

量子计算中的经典性违反与补集采样游戏研究

1. 量子计算中的经典性违反研究概述量子计算利用量子态的叠加与纠缠特性,在特定问题上展现出对经典计算的显著优势。补集采样游戏(Complement Sampling Game)作为一个理论框架,清晰地展示了这种优势的量化表现。在这个游戏中&…

作者头像 李华