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 集群的稳定性。

相关推荐
Aspartame~1 小时前
企业级WEB应用服务器TOMCAT
java·运维·服务器·tomcat
FED_AF2 小时前
Linux救援模式之应用篇
linux·运维
拾心212 小时前
【运维基础】Linux 进程调度管理
linux·运维·服务器
羚羊角uou3 小时前
【Linux】编辑器vim和编译器gcc/g++
linux·运维·编辑器
努力一点9484 小时前
ubuntu22.04系统入门 linux入门 简单命令基础复习 实现以及实践
linux·运维·服务器·ubuntu·gpu算力
白鹭4 小时前
自动化备份全网服务器数据平台
运维·服务器·自动化
卓豪终端管理4 小时前
电脑远程关机的重要性
运维·网络·devops
draymond71074 小时前
Dockerfile详解
运维·docker·容器
帅帅梓4 小时前
Linux性能检测与调优
linux·运维·php
鱼儿不吐泡5 小时前
阿里云服务器通过 docker CE 安装 Redis+Mysql+Nginx
运维·自动化运维