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

相关推荐
小皮侠17 分钟前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Maki Winster1 小时前
在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
linux·运维·ubuntu
翻滚吧键盘1 小时前
debian及衍生发行版apt包管理常见操作
运维·debian
Charlene Fung2 小时前
vs code远程自动登录服务器,无需手动输入密码的终极方案(windows版)
运维·服务器·vscode·ssh
碣石潇湘无限路2 小时前
【部署与总结】从本地运行到公网服务器的全过程
运维·服务器
linux修理工3 小时前
ipmitool 使用简介(ipmitool sel list & ipmitool sensor list)
运维·服务器
XM-54583 小时前
2025微信小程序wxapkg解包全攻略
linux·运维·小程序
朗晴3 小时前
文本编辑器VIM的使用方法!
linux·运维·服务器
小林up4 小时前
github push:ssh: connect to host github.com port 22
运维·ssh·github
梁bk7 小时前
[Nginx]反向代理和负载均衡
运维·nginx·负载均衡