Linux环境下Kubernetes备份与恢复实操指南
一、总体策略与适用范围
二、etcd快照备份与恢复(集群级)
export ETCDCTL_API=3
mkdir -p /opt/etcd-backup
etcdctl snapshot save /opt/etcd-backup/etcd-$(date +%F-%H%M%S).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
etcdctl --write-out=table snapshot status /opt/etcd-backup/etcd-*.db
mkdir -p /tmp/etcd-manifests
mv /etc/kubernetes/manifests/{kube-apiserver.yaml,etcd.yaml} /tmp/etcd-manifests
# 等待约 30s,确认静态 Pod 已停止
etcdctl snapshot restore /opt/etcd-backup/etcd-*.db \
--data-dir=/var/lib/etcd-restored
volumes:
- hostPath:
path: /var/lib/etcd-restored
type: DirectoryOrCreate
name: etcd-data
mv /tmp/etcd-manifests/{kube-apiserver.yaml,etcd.yaml} /etc/kubernetes/manifests
# kubelet 会自动拉起 apiserver/etcd
kubectl get componentstatuses # 或 kubectl get pods -n kube-system
三、应用与数据备份与恢复(资源与持久卷)
mkdir -p /opt/app-backup/$(date +%F)
kubectl get ns -o yaml > /opt/app-backup/$(date +%F)/namespaces.yaml
kubectl get all,configmap,secret,serviceaccount,role,rolebinding,clusterrole,clusterrolebinding,pvc,ingress,storageclass -A -o yaml > \
/opt/app-backup/$(date +%F)/resources.yaml
# 注意:Secret 为敏感数据,建议加密存储或纳入凭据管理系统
kubectl apply -f /opt/app-backup/2025-12-18/resources.yaml
./k8clone-linux-amd64 backup -n default -d ./k8clone-dump
cat > restore.json <<EOF
{
"StorageClass": { "csi-disk": "csi-disk-new" },
"ImageRepo": { "quay.io/coreos": "swr.cn-north-4.myhuaweicloud.com/paas" }
}
EOF
./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
四、自动化与运维实践