Etcd故障恢复记录

在一次kubernetes的升级过程中,由于之前欠下的技术债务,导致在删除etcd节点时没有把etcd中的成员删除,虽然安装的程序已经删除了,但是etcd集群中通过etcdctl member list还是能看到已删除的节点,而这次升级时候,又删除了了一台etcd节点,刚好etcd节点的节点存活数低于一半了。这是原因
那么针对这种事故该如何处理呢,这里给出个思路,利用etcd的故障恢复,恢复一下具体操作如下

etcd 备份
利用已存活的etcd做个备份

mkdir -p backup/k8s
ETCDCTL_API=3 /root/local/bin/etcdctl snapshot save snapshot.db

修改集群启动参数,强制把集群作为一个新集群启动
找一个最后存活的机子作为节点,然后强制开启一个单节点集群来处理,

vim /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
ExecStart=/root/local/bin/etcd 
  --name=etcd1 
  --cert-file=/etc/etcd/ssl/etcd.pem 
  --key-file=/etc/etcd/ssl/etcd-key.pem 
  --peer-cert-file=/etc/etcd/ssl/etcd.pem 
  --peer-key-file=/etc/etcd/ssl/etcd-key.pem 
  --trusted-ca-file=/etc/kubernetes/ssl/ca.pem 
  --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem 
  --initial-advertise-peer-urls=https://10.100.100.11:2380 
  --listen-peer-urls=https://10.100.100.11:2380 
  --listen-client-urls=https://10.100.100.11:2379,http://127.0.0.1:2379 
  --advertise-client-urls=https://10.100.100.11:2379 
  --initial-cluster-token=etcd-cluster-0 
  --initial-cluster=etcd1=https://10.100.100.11:2380 
  --initial-cluster-state=new 
  --data-dir=/var/lib/etcd 
  --force-new-cluster
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target


--force-new-cluster 通过这个新加的参数把11这个节点重置为单节点集群,

systemctl daemon-reload && systemctl restart etcd

重启服务后,通过

export ETCDCTL_API=3
etcdctl member list

会看到如下信息

60a005e7c128069f, started, etcd1, https://10.100.100.11:2380, https://10.100.100.11:2379

说明当前节点已经起来了,然后,通过再把其他的节点添加上即可

ETCDCTL_API=3 /root/local/bin/etcdctl member add etcd3 --peer-urls=https://10.100.100.16:2380

添加后去16节点上启动服务,启动服务前删除16节点上的数据目录

rm -rf /var/lib/etcd/*

然后重启,其他的节点都按这种方式来恢复即可。

原文地址:https://www.cnblogs.com/eddycomeon/p/11320991.html