centos k8s迁移如何实现
导读:CentOS 上 Kubernetes 迁移的可落地方案 一、迁移方式与适用场景 原地升级:在同一批 CentOS 节点上,用 kubeadm 逐步升级 Kubernetes 版本,业务原地承接。适合希望保持现有节点与网络拓扑不变的场景。...
CentOS 上 Kubernetes 迁移的可落地方案
一、迁移方式与适用场景
- 原地升级:在同一批 CentOS 节点上,用 kubeadm 逐步升级 Kubernetes 版本,业务原地承接。适合希望保持现有节点与网络拓扑不变的场景。升级需按次版本逐步进行,不能跨多个大版本,并做好 etcd 与配置备份。
- 重建迁移:在新环境(物理机/虚拟机/云上)新建目标集群,通过迁移镜像、数据与应用配置,将业务切流到新集群。适合跨云/跨机房、或需要变更运行时/网络插件的场景。
- 运行时替换:在现有节点上将容器运行时从 Docker 切换到 containerd,属于“同集群改造”,常用于为升级到 v1.24+(移除 dockershim)做准备。
二、原地升级步骤 kubeadm 集群
- 准备与备份
- 备份关键数据与配置:如 /etc/kubernetes、应用状态、以及 etcd(快照)。升级前确保业务可短时中断或可迁移。
- 版本与升级路径
- 核对当前与目标版本,遵循“每次仅升一个次版本”的原则,严禁跨多个大版本。示例升级路径:1.19 → 1.20 → 1.21 → 1.22 → 1.23。
- 控制平面节点升级
- 升级 kubeadm 到目标次版本:例如
yum install -y kubeadm-1.28.2-0 --disableexcludes=kubernetes。 - 检查升级计划:
kubeadm upgrade plan。 - 执行升级:
kubeadm upgrade apply v1.28.2。 - 升级 kubelet 与 kubectl:
yum install -y kubelet-1.28.2-0 kubectl-1.28.2-0 --disableexcludes=kubernetes,然后systemctl daemon-reload & & systemctl restart kubelet。
- 升级 kubeadm 到目标次版本:例如
- 工作节点升级
- 逐节点排水:
kubectl cordon < node> & & kubectl drain < node> --ignore-daemonsets --force。 - 升级 kubelet/kubeadm 并重启:
yum install ...+systemctl daemon-reload & & systemctl restart kubelet。 - 解除封锁:
kubectl uncordon < node>。
- 逐节点排水:
- 验证
kubectl get nodes、kubectl get pods -A,确认组件与业务 Pod 就绪。
三、重建迁移步骤 自建集群到云上 ACK
- 目标集群准备
- 在云上创建 ACK 托管集群(推荐 Pro 版),配置 VPC/交换机、SNAT、公网 EIP 暴露 API Server,安装云监控与日志服务插件。
- 数据与镜像迁移
- 数据库:创建 RDS,配置白名单与 PrivateZone,用 DTS 做全量+增量迁移(支持双向同步)。
- 存储:开通 OSS,用 ossimport 批量迁移对象数据。
- 镜像:创建 ACR,用 image-syncer 将存量镜像同步至 ACR。
- 应用与流量切换
- 在 ACK 上回归测试(功能、日志、监控),通过 DNS 切换或客户端配置升级将流量切至新集群,验证无误后下线自建集群。
四、运行时从 Docker 切换到 containerd
- 配置 containerd
- 修改
/etc/containerd/config.toml:设置镜像仓库镜像、将 sandbox_image 调整为可用版本(如registry.aliyuncs.com/google_containers/pause:3.7),开启 SystemdCgroup = true。
- 修改
- 内核与网络参数
- 加载模块:
modprobe overlay & & modprobe br_netfilter;写入/etc/modules-load.d/containerd.conf与/etc/sysctl.d/k8s.conf并sysctl -p。
- 加载模块:
- 配置 kubelet 使用 containerd
/etc/sysconfig/kubelet增加:KUBELET_EXTRA_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"。- 重启:
systemctl enable containerd & & systemctl restart containerd & & systemctl restart kubelet。
- 节点维护
- 排空:
kubectl drain < node> --ignore-daemonsets;切换完成后kubectl uncordon < node>。
- 排空:
五、关键注意事项与回滚策略
- 版本与兼容性
- 升级遵循“每次仅升一个次版本”,避免跨多个大版本;升级前阅读发行说明,确保组件与 API 兼容。
- 高可用与影响控制
- 多控制面节点需逐个升级,始终保持多数控制面可用;升级前对节点排水,避免业务中断。
- 数据与配置备份
- 升级/迁移前务必备份 etcd 快照、/etc/kubernetes 与关键应用数据,便于回滚与恢复。
- 运行时差异
- v1.24+ 移除 dockershim,若原集群使用 Docker,建议先迁移到 containerd 再升级。
- 回滚预案
- 原地升级失败:使用 etcd 快照恢复到升级前状态,或回滚节点 kubelet/kubeadm 版本并恢复配置;重建迁移失败:切回原集群 DNS/Service,保障业务连续性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s迁移如何实现
本文地址: https://pptw.com/jishu/768423.html
