RKE2高可用集群多场景故障及恢复失败求助
RKE2高可用集群多场景故障及恢复失败求助
我来帮你梳理下这几个RKE2高可用集群的故障场景,结合实际运维经验给你一些排查和恢复的具体思路:
针对Issue 1的两个故障场景
场景1:单节点重启后脱离集群,重启rke2-server后变成独立新集群
这种情况大概率是节点重启后无法连接到集群的etcd集群或控制平面导致的,你可以按以下步骤排查恢复:
- 先查看该节点的RKE2启动日志,执行
journalctl -u rke2-server -f,重点关注有没有连接失败、etcd成员验证、证书报错这类信息,这能帮你定位是网络问题还是集群身份匹配问题。 - 确认节点网络连通性:能不能ping通另外两个master节点的IP,以及负载均衡器的IP?RKE2控制节点必须和LB、其他控制节点保持6443(API端口)、2379/2380(etcd端口)的网络通畅。
- 如果是etcd成员失联导致的,先在正常运行的master节点上执行
kubectl get etcdmembers -n kube-system,看看故障节点的状态是不是Unavailable。然后按下面的步骤修复:- 在正常节点上执行
rke2-etcd member remove <失效节点的ID>(节点ID可以从上面的etcdmembers查询结果里获取) - 回到故障节点,先停止rke2-server服务:
systemctl stop rke2-server - 删除节点本地的RKE2数据目录(注意先备份重要数据,比如证书如果需要保留可以单独复制出来):
rm -rf /var/lib/rancher/rke2/ - 确保故障节点的
/etc/rancher/rke2/config.yaml里配置了正确的集群接入地址(比如LB的6443端口,或者其他正常master节点的9345端口),并且token和集群一致(正常节点的token在/var/lib/rancher/rke2/server/node-token文件里),最后重启服务:systemctl start rke2-server
- 在正常节点上执行
场景2:两台master节点故障导致etcd和API不可用,集群失联且恢复失败
RKE2的HA集群依赖etcd的仲裁机制,3节点etcd集群至少需要2个节点正常才能维持仲裁。当两台节点挂掉后,剩下的单节点无法形成仲裁,etcd会直接进入不可用状态。你可以尝试以下步骤恢复:
- 先确认剩余的那个master节点能否启动rke2-server,查看日志
journalctl -u rke2-server -f,如果看到“not enough started members”这类报错,就需要手动调整etcd的仲裁配置。 - 尝试强制启动单节点etcd集群:
- 停止rke2-server服务:
systemctl stop rke2-server - 备份etcd数据目录(一定要做,避免数据二次损坏):
tar -czf etcd-backup-$(date +%Y%m%d).tar.gz /var/lib/rancher/rke2/server/db/etcd - 执行强制启动命令:
rke2-etcd --force-new-cluster --data-dir=/var/lib/rancher/rke2/server/db/etcd - 等etcd启动成功后,再启动rke2-server服务:
systemctl start rke2-server
- 停止rke2-server服务:
- 单节点集群恢复后,再把其他故障节点清理本地数据后重新加入集群(步骤参考场景1的节点重新加入流程)。
- 如果已经出现数据丢失,还可以尝试从RKE2的自动备份恢复:RKE2默认会定期备份etcd,备份文件在
/var/lib/rancher/rke2/server/db/snapshots/目录下,用rke2-etcd snapshot restore <备份文件名>命令即可恢复,恢复前记得停止rke2-server服务。
针对Issue 2(修改主机名后的未完成故障)
你提到修改了Linux节点的主机名,这在Kubernetes集群里很容易引发身份匹配问题——RKE2会依赖主机名生成节点证书、etcd成员标识,一旦主机名变更,很可能出现证书验证失败、节点无法注册的情况。你可以先做这些排查:
- 在正常节点上执行
kubectl get nodes,看看集群中注册的故障节点名称是不是和新主机名不符。 - 查看故障节点的rke2-server/agent日志,有没有“hostname mismatch”或证书相关的报错。
- 如果是证书不匹配的问题,你可以删除故障节点的本地证书目录(控制节点是
/var/lib/rancher/rke2/server/tls,agent节点是/var/lib/rancher/rke2/agent/tls),然后重启服务让RKE2重新生成符合新主机名的证书,同时确保加入集群的参数(server地址、token)正确。
备注:内容来源于stack exchange,提问作者user24266244
相关产品推荐
相关产品推荐

