K8S中的etcd数据库备份与恢复
目录
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
配置正确。
- 如果是多节点 etcd 集群,需在所有节点执行类似操作,并确保
定时备份
建议通过 CronJob 定期备份,例如:
0 * * * * /usr/local/bin/etcd-backup-script.sh
测试恢复流程
- 定期在测试环境中演练恢复流程,确保备份有效。
四、常见问题
- 证书路径错误
:检查
--cacert
、--cert
、--key
参数是否正确。 - 权限问题
:确保恢复后的数据目录属主是
etcd
用户。 - 集群无法启动
:检查日志
journalctl -u etcd
排查配置错误。
通过以上步骤,可以安全地备份和恢复 etcd 数据,保障 Kubernetes 集群的稳定性。