温馨提示×

centos k8s怎么迁移服务

小樊
52
2026-08-04 21:41:38
栏目: 智能运维

在 CentOS 上迁移 Kubernetes(k8s)服务,通常分为 几种常见场景。下面我按最常见、最实用的方式给你一个完整思路,并附上命令示例。你可以对照自己的情况选择。


一、先明确迁移类型(很重要)

场景 说明
✅ 迁移 Pod / 服务到新节点 节点维护、扩容
✅ 迁移整个集群 旧集群 → 新集群
✅ 迁移 etcd 数据 控制面迁移
✅ 应用迁移(YAML / Helm) 只迁业务

二、常见迁移方案(推荐)


✅ 方案一:Pod / 服务迁移到新节点(最常用)

1️⃣ 查看节点

kubectl get nodes

2️⃣ 将旧节点设为不可调度

kubectl cordon node-old

3️⃣ 驱逐旧节点上的 Pod

kubectl drain node-old --ignore-daemonsets --delete-emptydir-data

✅ Kubernetes 会自动把 Pod 调度到新节点

4️⃣ 确认 Pod 已迁移

kubectl get pods -o wide

5️⃣ 新节点加入集群(如未加入)

kubeadm join <api-server> --token xxx --discovery-token-ca-cert-hash xxx

✅ 方案二:应用级迁移(YAML / Helm)

适合:

  • 新集群
  • 重建服务
  • 云迁移

1️⃣ 导出旧集群资源

kubectl get all -n my-namespace -o yaml > my-app.yaml

或只导出关键资源:

kubectl get deploy,svc,configmap,secret -n my-namespace -o yaml > app.yaml

2️⃣ 在新集群中创建

kubectl apply -f app.yaml

✅ 方案三:Helm 应用迁移

1️⃣ 导出 Helm 配置

helm get values my-release -n my-namespace > values.yaml

2️⃣ 新集群安装

helm install my-release repo/chart -n my-namespace -f values.yaml

✅ 方案四:整个 Kubernetes 集群迁移(含 etcd)

⚠️ 高风险,生产环境务必备份

1️⃣ 备份 etcd

ETCDCTL_API=3 etcdctl snapshot save snap.db \
  --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

2️⃣ 拷贝到新集群

scp snap.db root@new-node:/root/

3️⃣ 新集群恢复 etcd

etcdctl snapshot restore snap.db \
  --data-dir /var/lib/etcd

4️⃣ 重启 kubelet

systemctl restart kubelet

✅ 方案五:CentOS 系统级迁移(注意)

CentOS 7 已 EOL,建议:

  • ✅ 迁移到 Rocky Linux / AlmaLinux
  • ✅ 避免直接原地升级

迁移步骤:

  1. 新节点安装 OS
  2. 安装 Kubernetes
  3. 加入集群
  4. 迁移 Pod
  5. 下线旧节点

三、迁移 Checklist(强烈建议)

✅ 确认服务是否有状态(PVC)
✅ 备份 etcd
✅ 备份 PV 数据
✅ 确认网络(CNI)正常
✅ 验证 DNS / Service
✅ 灰度迁移,不要一次性全切


四、我可以继续帮你

你可以直接告诉我:

1️⃣ 是 单节点还是多节点集群?
2️⃣ 是 同集群迁移还是新集群?
3️⃣ 服务是否有 数据库 / PVC?
4️⃣ 用的是 kubeadm / 二进制 / Rancher?

我可以直接给你一套 可执行的迁移方案 ✅

0 踩