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

相关推荐
未来之窗软件服务2 小时前
服务器运维(六)跨域配置 Preflight 问题——东方仙化神期
运维·服务器·服务器运维·仙盟创梦ide·东方仙盟
winner88815 小时前
Linux 软件安装 “命令密码本”:yum/apt/brew 一网打尽
linux·运维·服务器
九河云5 小时前
软件开发平台 DevCloud
运维·服务器·数据库·科技·华为云
victory04315 小时前
K8S重启之后无法启动故障排查 与 修复
云原生·容器·kubernetes
思麟呀6 小时前
Linux的基础IO流
linux·运维·服务器·开发语言·c++
winner88817 小时前
嵌入式Linux驱动开发全流程:工具协作+核心概念拆解(从入门到理解)
linux·运维·驱动开发
TTBIGDATA7 小时前
【Ambari开启Kerberos】KERBEROS SERVICE CHECK 报错
大数据·运维·hadoop·ambari·cdh·bigtop·ttbigdata
Archy_Wang_17 小时前
脚本自动生成专业Linux巡检报告
linux·运维·服务器
java_logo7 小时前
SGLANG Docker容器化部署指南
linux·运维·docker·容器·eureka·1024程序员节
Qayrup8 小时前
各个系统的 docker安装
运维·docker·容器