ETCD-Restore

备份和恢复 etcd 的任务

1. 备份 etcd (在 controlplane 节点上执行):

ssh controlplane "sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/cluster_backup.db"

解释:

  • ssh controlplane "...": 通过 SSH 连接到名为 controlplane 的节点,并在该节点上执行引号内的命令。 你需要确保你的 SSH 密钥已配置好,以便可以无密码登录到 controlplane 节点。
  • sudo: 以 root 权限运行命令,因为访问 etcd 数据目录和证书通常需要 root 权限。
  • ETCDCTL_API=3: 指定 etcdctl 使用的 API 版本。 Kubernetes 通常使用 etcd v3。
  • etcdctl: etcd 的命令行工具。
  • --endpoints=https://127.0.0.1:2379: 指定 etcd 集群的端点。 这里假设 etcd 在本地的 2379 端口上运行。 如果你的 etcd 集群有多个节点,你需要指定所有节点的地址。
  • --cacert=/etc/kubernetes/pki/etcd/ca.crt: 指定用于验证 etcd 服务器证书的 CA 证书。
  • --cert=/etc/kubernetes/pki/etcd/server.crt: 指定用于客户端身份验证的客户端证书。
  • --key=/etc/kubernetes/pki/etcd/server.key: 指定客户端证书的私钥。
  • snapshot save /opt/cluster_backup.db: 指示 etcdctl 创建 etcd 数据的快照,并将其保存到 /opt/cluster_backup.db 文件中。

重要提示:

  • 证书路径: /etc/kubernetes/pki/etcd/ 路径是 Kubernetes 默认的 etcd 证书存储位置。 如果你的 Kubernetes 集群使用不同的证书路径,请相应地修改命令。
  • etcdctl 版本: 确保你使用的 etcdctl 版本与你的 etcd 服务器版本兼容。 通常,最好使用与 etcd 服务器版本相同的 etcdctl 版本。 你可以通过运行 etcdctl version 来检查 etcdctl 的版本。
  • 权限: 确保执行备份命令的用户具有读取 etcd 数据目录和证书的权限。

2. 恢复 etcd (在 controlplane 节点上执行):

ssh controlplane "sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore /opt/cluster_backup.db --data-dir=/root/default.etcd 2>&1 | tee restore.txt"

解释:

  • snapshot restore /opt/cluster_backup.db --data-dir=/root/default.etcd: 指示 etcdctl 从 /opt/cluster_backup.db 文件恢复 etcd 数据,并将数据存储到 /root/default.etcd 目录中。 重要: 在执行恢复之前,请确保 /root/default.etcd 目录不存在或为空。 否则,恢复可能会失败或导致数据损坏。
  • 2>&1: 将标准错误 (stderr) 重定向到标准输出 (stdout)。 这会将所有错误消息与正常输出一起捕获。
  • | tee restore.txt: 使用 tee 命令将标准输出同时显示在终端上,并将其保存到 restore.txt 文件中。 这允许你查看恢复过程的输出,并将其记录下来以供以后参考。

重要提示:

  • 数据目录: /root/default.etcd 是你指定的数据目录。 在恢复之前,强烈建议备份现有的 /root/default.etcd 目录,以防恢复失败。

  • 停止 kube-apiserver: 在恢复 etcd 之前,必须停止所有 kube-apiserver 实例。 否则,恢复可能会导致数据不一致。 你可以使用以下命令停止 kube-apiserver:

    ssh controlplane "sudo systemctl stop kube-apiserver"
    

    在所有 controlplane 节点上执行此操作。

  • 恢复后启动 kube-apiserver: 恢复完成后,启动 kube-apiserver:

    ssh controlplane "sudo systemctl start kube-apiserver"
    

    在所有 controlplane 节点上执行此操作。

  • 健康检查: 恢复完成后,验证 etcd 和 Kubernetes 集群是否正常运行。 检查 etcd 的健康状况:

    ssh controlplane "sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint health"
    

    检查 Kubernetes 集群的状态:

    kubectl get nodes
    kubectl get pods --all-namespaces
    
posted on 2025-03-07 11:13  Leo-Yide  阅读(72)  评论(0)    收藏  举报