OpenShift ETCD
问题
etcd集群中某个etcd出现故障,使用docker ps -a | grep etcd | grep -v POD
查看etcd节点,发现它异常退出。
$ docker logs -f <etcd-container-id>
....
etcdserver : open wal error: wal: file not found
恢复步骤
大方向步骤:
一、将问题etcd节点从etcd集群剥离;
二、将恢复的新的etcd节点添加到etcd集群。
具体步骤如下:
- 查看etcd状态
$ etcdctl2 cluster-health
$ ## 获取问题节点的member ID
$ etcdctl2 member remove <member ID>
$ ## 将问题etcd服务从etcd集群中删除
- 停止问题节点上的etcd服务
$ mkdir -p /etc/origin/node/pods-stopped
$ mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
- 删除问题节点上的etcd数据
$ rm -rf /var/lib/etcd/*
4.更新ansible中的inventory hosts内容,设置new_etcd配置
[OSEv3:children]
masters
etcd
nodes
new_etcd
[OSEv3:vars]
openshift_is_atomic=false
[masters]
master-1
master-2
master-3
[nodes]
master-1
master-2
master-3
...
[etcd]
master-1
#master-2
master-3
[new_etcd]
master-2
需要注意:
将问题节点从masters/nodes中注释掉,否则执行etcd扩容会报如下错误。
TASK [Run variable sanity checks]
fatal: [master-1]: FAILED! => {"msg": "last_checked_host: master-2, last_checked_var: ansible_python;'NoneType' object has no attribute '__getitem__'"}
- 更新节点的node group配置
$ ansible-playbook playbooks/openshift-master/openshift_node_group.yml
- 执行etcd扩容脚本
$ ansible-playbook playbooks/openshift-etcd/scaleup.yml
- 执行完成扩容后,进行验证。
注意
:如果在hosts
中将masters对应的节点注释掉,在etcd安装时会使用本地服务的方式安装运行,这个适合独立的节点部署etcd。
etcd命令
etcd压测脚本
$ etcdctl --write-out=table check perf