一. 安装 etcdctl
前面的步骤已经描述了如何安装 etcdctl
,这里只做简要回顾:
-
下载 etcd:
wget https://github.com/etcd-io/etcd/releases/download/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz
-
解压缩:
tar -xvf etcd-v3.5.4-linux-amd64.tar.gz
-
移动文件:
cd etcd-v3.5.4-linux-amd64 sudo mv etcdctl /usr/local/bin/
-
验证安装:
etcdctl version
二. 配置环境变量
设置正确的环境变量以便 etcdctl
连接到 etcd 实例:
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS="https://127.0.0.1:2379"
export ETCDCTL_CACERT="/etc/kubernetes/pki/etcd/ca.crt"
export ETCDCTL_CERT="/etc/kubernetes/pki/etcd/server.crt"
export ETCDCTL_KEY="/etc/kubernetes/pki/etcd/server.key"
三. 保存 etcd 数据快照
使用 etcdctl
创建 etcd 数据的快照:
etcdctl snapshot save backup.db
四. 恢复 etcd 数据快照
停止 etcd 容器
使用 crictl
工具找到并停止 etcd 容器。
-
找到 etcd 容器:
sudo crictl ps | grep etcd
输出示例:
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT POD ID 7c5b9f0a0f4c etcd:3.5.4 2 weeks ago Running etcd 0 abcdef123456
-
停止 etcd 容器:
sudo crictl stop <container_id>
替换
<container_id>
为你的 etcd 容器 ID,例如:sudo crictl stop 7c5b9f0a0f4c
恢复快照
使用 etcdctl
恢复快照到指定的数据目录:
etcdctl snapshot restore backup.db --data-dir=/var/lib/etcd
更新 etcd 数据目录
确保 etcd 容器的配置文件(例如 /etc/kubernetes/manifests/etcd.yaml
)中的 --data-dir
参数指向 /var/lib/etcd
。
启动 etcd 容器
使用 crictl
重新启动 etcd 容器:
sudo crictl start <container_id>
替换 <container_id>
为你的 etcd 容器 ID。
五. 验证恢复
使用 etcdctl
检查 etcd 集群的状态,确保集群正常运行:
etcdctl endpoint status --write-out=table
完整步骤示例
以下是从安装到恢复的完整命令集,假设 etcd 是作为容器运行的,并且使用 containerd:
# 安装 etcdctl
wget https://github.com/etcd-io/etcd/releases/download/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz
tar -xvf etcd-v3.5.4-linux-amd64.tar.gz
cd etcd-v3.5.4-linux-amd64
sudo mv etcdctl /usr/local/bin/
etcdctl version
# 配置环境变量
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS="https://127.0.0.1:2379"
export ETCDCTL_CACERT="/etc/kubernetes/pki/etcd/ca.crt"
export ETCDCTL_CERT="/etc/kubernetes/pki/etcd/server.crt"
export ETCDCTL_KEY="/etc/kubernetes/pki/etcd/server.key"
# 保存 etcd 数据快照
etcdctl snapshot save backup.db
# 停止 etcd 容器
sudo crictl ps | grep etcd
sudo crictl stop <container_id>
# 恢复 etcd 数据快照
etcdctl snapshot restore backup.db --data-dir=/var/lib/etcd
# 更新 etcd 数据目录
# 确保 /etc/kubernetes/manifests/etcd.yaml 中的 --data-dir 参数指向 /var/lib/etcd
# 启动 etcd 容器
sudo crictl start <container_id>
# 验证恢复
etcdctl endpoint status --write-out=table
通过以上步骤,你可以完整地执行 etcd 数据的备份和恢复操作。如果在操作过程中遇到任何问题,请提供具体的错误信息以便进一步排查。