我们在使用etcd集群时会遇到某个节点异常无法启动,或者数据损坏的时候,这种情况需要将这个异常节点在etcd集群中剔除并重新加入该集群,具体操作如下。
首先我们先去etcd集群找到这个异常节点并删除,假设我的异常节点为etcd3,ip地址为192.168.1.79
etcdctl member list -w table #如果使用了tls加密集群需要增加证书相关参数 #etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list -w table etcdctl member remove fc22e5c02663fd7a #删除已经异常的etcd3节点 #etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member remove fc22e5c02663fd7a
上述操作完成以后,如果我们etcd3节点是系统异常重装,那么我们需要部署etcd3节点上的etcd服务,可以查看我之前的笔记:https://sulao.cn/post/967.html,注意部署完以后先不要启动etcd服务。
如果是etcd3集群节点数据受损,或者是etcd服务无法启动,那么我们需要去这个节点上停止etcd服务,并清除etcd数据,清除以后先不要启动etcd服务
systemctl stop etcd mv /data/etcd /data/etcd_bak
上述数据和服务处理完以后,我们需要修改etcd3集群上的etcd.conf文件中的配置
initial-cluster-state: 'existing' # new改为existing
接着我们在其他两个etcd集群任意一个节点上操作添加etcd3集群到etcd成员
etcdctl member add etcd3 --peer-urls=http://192.168.1.79:2380 #etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member add etcd3 --peer-urls=http://192.168.1.79:2380 etcdctl member list -w table #加入集群以后接着查看集群成员状态 #etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list -w table
看到上述增加的etcd集群节点还是unstarted状态,我们这个时候就可以去etcd3节点启动etcd服务了。
最后我们再查看下集群的cluster状态
etcdctl endpoint status --cluster -w table #etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" endpoint status --cluster -w table
可以看到集群状态正常。