etcd迁移数据目录或迁移节点
有时候, 在实际生产过程中, etcd节点想要迁移或者etcd数据目录所在磁盘性能不足, 需要迁移节点或者目录。有多种方法。今天列一个比较靠谱的方式, 保证数据的完整性先来一波etcd的基础命令, 我这里是用kubeadm部署k8s集群。
·
有时候, 在实际生产过程中, etcd节点想要迁移或者etcd数据目录所在磁盘性能不足, 需要迁移节点或者目录。 有多种方法。今天列一个比较靠谱的方式, 保证数据的完整性
先来一波etcd的基础命令, 我这里是用kubeadm部署k8s集群
#####从容器中拷贝出来etcdctl 命令
docker cp $(docker ps | grep -v etcd-mirror | grep -w etcd | awk '{print $1}'):/usr/local/bin/etcdctl /usr/bin/
###查看etcd 集群成员列表
etcdctl --endpoints=https://10.34.0.66:2379,https://10.34.1.80:2379,https://10.34.3.61:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key member list
###查看endpoints 状态
etcdctl --endpoints=https://10.34.0.66:2379,https://10.34.1.80:2379,https://10.34.3.61:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --write-out=table endpoint status
###查看etcd endpoints的健康
etcdctl --endpoints=https://10.34.0.66:2379,https://10.34.1.80:2379,https://10.34.3.61:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --write-out=table endpoint health
###查看所有的key
ETCDCTL_API=3 etcdctl --endpoints=https://10.34.0.66:2379,https://10.34.1.80:2379,https://10.34.3.61:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key get / --prefix=true --keys-only
###查看某个key具体的内容(会有乱码,因为是序列化后的)
ETCDCTL_API=3 etcdctl --endpoints=https://10.34.0.66:2379,https://10.34.1.80:2379,https://10.34.3.61:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key get /registry/services/specs/liutest/nginx
从容器中把etcdctl工具复制出来到主机中的/usr/bin目录下
docker cp $(docker ps | grep -v etcd-mirror | grep -w etcd | awk '{print $1}'):/usr/local/bin/etcdctl /usr/bin/
备份etcd数据
etcdctl --endpoints 127.0.0.1:2379 \
--cert="/etc/kubernetes/pki/etcd/server.crt" \
--key="/etc/kubernetes/pki/etcd/server.key" \
--cacert="/etc/kubernetes/pki/etcd/ca.crt" \
snapshot save etcd_snap_save.db
备份数据后, 将备份文件etcd_snap_save.db 传到三个节点
停止etcd
etcd恢复需要停止三个节点,不然会导致节点数据不一致, id无法加入集群中
mv /etc/kubernetes/manifests/etcd.yaml /opt/
导入备份数据至新目录
###其中 --name 和--initial-advertise-peer-urls 参数根据自己恢复节点修改成该节点的
主机名和IP,--data-dir 参数修改成自己想要的目录, etcd默认数据目录是/var/lib/etcd,
我这里迁移到/data/etcd
ETCDCTL_API=3 etcdctl snapshot restore etcd_snap_save.db \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--data-dir=/data/etcd/ \
--endpoints=https://127.0.0.1:2379 \
--initial-cluster=k8s-master01=https://10.34.0.66:2380,k8s-master02=https://10.34.1.80:2380,k8s-master03=https://10.34.3.61:2380 \
--name=middleware02 \
--initial-advertise-peer-urls=https://10.34.1.80:2380
修改etcd.yaml文件
修改etcd.yaml文件中的数据目录配置
- hostPath:
path: /data/etcd #改成自己的数据目录
type: DirectoryOrCreate
name: etcd-data
三个节点的文件全部修改完毕后, 再将文件放回原目录
mv /opt/etcd.yaml /etc/kubernetes/manifests/
更多推荐
已为社区贡献10条内容
所有评论(0)