kubeadm部署Kubernetes 1.21.0集群etcd备份及etcdctl报错问题咨询
问题解决步骤
一、解决etcdctl: command not found报错
两种方案可选:
方案1:安装etcdctl二进制到系统
- 获取和集群etcd版本匹配的二进制安装包,Kubernetes v1.21默认配套的etcd版本为v3.4.13
- 解压安装包
tar zxvf etcd-v3.4.13-linux-amd64.tar.gz
- 将etcdctl拷贝到系统可执行路径并赋予权限
cp etcd-v3.4.13-linux-amd64/etcdctl /usr/local/bin/ chmod +x /usr/local/bin/etcdctl
- 配置etcdctl默认使用v3版本API
echo 'export ETCDCTL_API=3' >> /etc/profile source /etc/profile
- 验证安装成功
etcdctl version
方案2:直接使用集群现有etcd容器内置的etcdctl(无需安装)
kubeadm部署的集群etcd以静态Pod形式运行在master节点,可直接调用容器内自带的etcdctl工具,无需额外安装:
- 先获取etcd容器ID
docker ps | grep etcd | awk '{print $1}'
- 后续所有etcdctl操作都可通过
docker exec调用该容器执行,无版本兼容问题。
二、执行etcd备份操作
kubeadm部署的etcd证书默认存放在/etc/kubernetes/pki/etcd/目录,备份时需要指定证书路径鉴权。
对应方案1(已安装etcdctl到系统)的备份命令
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/etcd-snapshot.db
备份完成后快照文件存放在宿主机/opt/etcd-snapshot.db路径。
对应方案2(使用etcd容器执行)的备份命令
# 替换<etcd容器ID>为上一步查询到的实际ID docker exec -it <etcd容器ID> 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 /tmp/etcd-snapshot.db # 将容器内的快照文件拷贝到宿主机留存 docker cp <etcd容器ID>:/tmp/etcd-snapshot.db /opt/etcd-snapshot.db
三、备份有效性验证
执行以下命令查看快照状态,确认备份文件有效:
etcdctl snapshot status /opt/etcd-snapshot.db -w table
注意事项
- 所有操作需在集群master节点上执行
- 备份完成后建议将快照文件转移至非集群节点的存储介质留存,避免节点故障导致备份丢失
- 若为多master高可用集群,任选一个master节点执行备份即可,生成的快照为全量集群数据
内容的提问来源于stack exchange,提问作者Avnish Singh
相关产品推荐
相关产品推荐

