K8S中的etcd数据库备份与恢复

备份和恢复 etcd 数据是维护 Kubernetes 集群稳定性的关键操作。以下是详细步骤:


一、备份 etcd 数据

方法 1: 使用 etcdctl snapshot save
  1. 连接到 etcd 节点 确保操作在 etcd 所在节点或能访问 etcd 的客户端进行。

  2. 设置环境变量 根据集群配置,设置证书和端点(如果是 kubeadm 部署,证书通常在 /etc/kubernetes/pki/etcd):

    复制代码
    export ETCDCTL_API=3
    ETCD_ENDPOINTS="https://127.0.0.1:2379"
    CERT_DIR="/etc/kubernetes/pki/etcd"
  3. 执行备份 使用 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 表示成功。
  4. 验证备份完整性

    复制代码
    etcdctl --write-out=table snapshot status snapshot.db
方法 2: 直接备份数据目录
  • 复制 etcd 数据目录(默认为 /var/lib/etcd)到安全位置:

    复制代码
    cp -r /var/lib/etcd /backup/etcd-backup

二、恢复 etcd 数据

前提条件
  • 停止 etcd 服务:恢复前需停止所有 etcd 实例。

  • 备份当前数据:防止恢复失败导致数据丢失。

恢复步骤
  1. 停止 Kubernetes 组件

    • 停止 kube-apiserver 和 etcd:

      复制代码
      systemctl stop kube-apiserver etcd
  2. 删除旧数据

    复制代码
    rm -rf /var/lib/etcd/*
  3. 使用快照恢复

    复制代码
    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。
  4. 恢复数据目录权限

    复制代码
    chown -R etcd:etcd /var/lib/etcd
  5. 重启 etcd 和 Kubernetes 服务

    复制代码
    systemctl start etcd kube-apiserver
  6. 验证恢复结果

    • 检查 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

三、注意事项

  1. 集群环境恢复

    • 如果是多节点 etcd 集群,需在所有节点执行类似操作,并确保 --initial-cluster 配置正确。
  2. 定时备份

    • 建议通过 CronJob 定期备份,例如:

      复制代码
      0 * * * * /usr/local/bin/etcd-backup-script.sh
  3. 测试恢复流程

    • 定期在测试环境中演练恢复流程,确保备份有效。

四、常见问题

  • 证书路径错误 :检查 --cacert、--cert、--key 参数是否正确。

  • 权限问题 :确保恢复后的数据目录属主是 etcd 用户。

  • 集群无法启动 :检查日志 journalctl -u etcd 排查配置错误。

通过以上步骤,可以安全地备份和恢复 etcd 数据,保障 Kubernetes 集群的稳定性。

相关推荐
番茄啊18 分钟前
linux 开启xftp连接
linux·运维·服务器
IT利刃出鞘1 小时前
Docker Compose--解决修改配置后不生效的问题
运维·docker·容器
Lsetea1 小时前
Docker更新SSL证书后容器仍读旧文件:单文件挂载与目录挂载排查
运维·nginx·docker·https·ssl证书
Julien20042 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
十碗饭吃不饱2 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
好用斋2 小时前
拾光坞安装网盘聚合LitePan:把Docker命令翻译成图形界面
运维·docker·容器
贝锐4 小时前
金仓、达梦、TDSQL全适配:向日葵补齐信创数据库层远程运维能力
运维·数据库·信创
weirong6 小时前
图解 client-go Informer:手写一个 mini-Informer 才敢说懂
kubernetes
.冰块.6 小时前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange
雪落漂泊7 小时前
Linux进程(四)概念:命令行参数和环境变量篇
linux·运维·服务器