在 CentOS 上迁移 Kubernetes(k8s)服务,通常分为 几种常见场景。下面我按最常见、最实用的方式给你一个完整思路,并附上命令示例。你可以对照自己的情况选择。
| 场景 | 说明 |
|---|---|
| ✅ 迁移 Pod / 服务到新节点 | 节点维护、扩容 |
| ✅ 迁移整个集群 | 旧集群 → 新集群 |
| ✅ 迁移 etcd 数据 | 控制面迁移 |
| ✅ 应用迁移(YAML / Helm) | 只迁业务 |
kubectl get nodes
kubectl cordon node-old
kubectl drain node-old --ignore-daemonsets --delete-emptydir-data
✅ Kubernetes 会自动把 Pod 调度到新节点
kubectl get pods -o wide
kubeadm join <api-server> --token xxx --discovery-token-ca-cert-hash xxx
kubectl get all -n my-namespace -o yaml > my-app.yaml
或只导出关键资源:
kubectl get deploy,svc,configmap,secret -n my-namespace -o yaml > app.yaml
kubectl apply -f app.yaml
helm get values my-release -n my-namespace > values.yaml
helm install my-release repo/chart -n my-namespace -f values.yaml
⚠️ 高风险,生产环境务必备份
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
scp snap.db root@new-node:/root/
etcdctl snapshot restore snap.db \
--data-dir /var/lib/etcd
systemctl restart kubelet
CentOS 7 已 EOL,建议:
迁移步骤:
✅ 确认服务是否有状态(PVC)
✅ 备份 etcd
✅ 备份 PV 数据
✅ 确认网络(CNI)正常
✅ 验证 DNS / Service
✅ 灰度迁移,不要一次性全切
你可以直接告诉我:
1️⃣ 是 单节点还是多节点集群?
2️⃣ 是 同集群迁移还是新集群?
3️⃣ 服务是否有 数据库 / PVC?
4️⃣ 用的是 kubeadm / 二进制 / Rancher?
我可以直接给你一套 可执行的迁移方案 ✅