K8S中的etcd数据库备份与恢复
备份和恢复 etcd 数据是维护 Kubernetes 集群稳定性的关键操作。以下是详细步骤:
一、备份 etcd 数据
方法 1: 使用 etcdctl snapshot save
-
连接到 etcd 节点 确保操作在 etcd 所在节点或能访问 etcd 的客户端进行。
-
设置环境变量 根据集群配置,设置证书和端点(如果是 kubeadm 部署,证书通常在
/etc/kubernetes/pki/etcd
):export ETCDCTL_API=3 ETCD_ENDPOINTS="https://127.0.0.1:2379" CERT_DIR="/etc/kubernetes/pki/etcd"
-
执行备份 使用
etcdctl
创建快照(替换snapshot.db
为备份文件名):etcdctl --endpoints=$ETCD_ENDPOINTS \ --cacert=$CERT_DIR/ca.crt \ --cert=$CERT_DIR/healthcheck-client.crt \ --key=$CERT_DIR/healthcheck-client.key \ snapshot save snapshot.db
-
输出
Snapshot saved at snapshot.db
表示成功。
-
-
验证备份完整性
etcdctl --write-out=table snapshot status snapshot.db
方法 2: 直接备份数据目录
-
复制 etcd 数据目录(默认为
/var/lib/etcd
)到安全位置:cp -r /var/lib/etcd /backup/etcd-backup
二、恢复 etcd 数据
前提条件
-
停止 etcd 服务:恢复前需停止所有 etcd 实例。
-
备份当前数据:防止恢复失败导致数据丢失。
恢复步骤
-
停止 Kubernetes 组件
-
停止 kube-apiserver 和 etcd:
systemctl stop kube-apiserver etcd
-
-
删除旧数据
rm -rf /var/lib/etcd/*
-
使用快照恢复
ETCD_ENDPOINTS="https://127.0.0.1:2379" CERT_DIR="/etc/kubernetes/pki/etcd" etcdctl snapshot restore snapshot.db \ --name=etcd-node1 \ # 节点名称(与原有配置一致) --initial-cluster="etcd-node1=https://10.0.0.1:2380" \ --initial-cluster-token=etcd-cluster \ --initial-advertise-peer-urls=https://10.0.0.1:2380 \ --data-dir=/var/lib/etcd
-
根据集群拓扑调整
--initial-cluster
和--initial-advertise-peer-urls
。
-
-
恢复数据目录权限
chown -R etcd:etcd /var/lib/etcd
-
重启 etcd 和 Kubernetes 服务
systemctl start etcd kube-apiserver
-
验证恢复结果
-
检查 etcd 集群健康状态:
etcdctl --endpoints=$ETCD_ENDPOINTS \ --cacert=$CERT_DIR/ca.crt \ --cert=$CERT_DIR/healthcheck-client.crt \ --key=$CERT_DIR/healthcheck-client.key \ endpoint health
-
检查 Kubernetes 资源:
kubectl get pods --all-namespaces
-
三、注意事项
-
集群环境恢复
-
如果是多节点 etcd 集群,需在所有节点执行类似操作,并确保
--initial-cluster
配置正确。
-
-
定时备份
-
建议通过 CronJob 定期备份,例如:
0 * * * * /usr/local/bin/etcd-backup-script.sh
-
-
测试恢复流程
-
定期在测试环境中演练恢复流程,确保备份有效。
-
四、常见问题
-
证书路径错误:检查
--cacert
、--cert
、--key
参数是否正确。 -
权限问题:确保恢复后的数据目录属主是
etcd
用户。 -
集群无法启动:检查日志
journalctl -u etcd
排查配置错误。
通过以上步骤,可以安全地备份和恢复 etcd 数据,保障 Kubernetes 集群的稳定性。