默认情况下,RKE 集群会默认启用授权集群端点。这个端点允许您使用 kubectl CLI 和 kubeconfig 文件访问下游的 Kubernetes 集群,RKE 集群默认启用了该端点。
如果误删kube-api-auth,恢复的方法也很简单,只需要编辑集群,将“授权集群访问地址”修改成禁用,保存集群。然后再用相同的方法启用 “授权集群访问地址”即可。
1、编辑集群
2、禁用授权集群访问地址,保存
3、再次编辑集群,启用授权集群访问地址,保存
恢复nginx-ingress-controller、canal、coredns、metrics-server组件nginx-ingress-controller、canal、coredns、metrics-server 这些workload都是通过kube-system命名空间下的各种job来创建的,所以如果要重建这些workload只需要重新执行对应的job即可。
本例使用nginx-ingress-controller做演示,其他workload的恢复步骤可以参考此恢复方案。
模拟故障
从System Project下删除 kube-system 下的default-http-backend和nginx-ingress-controller
执行恢复
从kube-system命名空间下删除rke-ingress-controller-deploy-job(如果不删除对应的job,更新集群后,不会重新触发job重新执行)
为了触发集群更新,可以编辑集群,修改NodePort范围,然后保存。
验证
集群更新成功后,回到System Project下确认default-http-backend和nginx-ingress-controller已经重新创建。
如何恢复从Rancher UI或kubectl误删的节点当节点处于“活动”状态,从集群中删除节点将触发一个进程来清理节点。如果没有重启服务器,并不会完成所有的清除所有非持久化数据。
如果无意中将节点删除,只需要使用相同的参数再次添加节点即可恢复集群。
比如我的环境有两个节点,分别具有全部和Worker角色
从Rancher UI或kubectl将节点rancher2删除,此时集群中只剩下一个rancher3节点,由于集群中缺少Etcd和Control角色,所以集群提示:Waiting for etcd and controlplane nodes to be registered
接下来,编辑集群,并且设置相同的节点参数,这地方要注意,一定要设置和之前添加节点时相同的节点参数。
复制添加节点命令在rancher2的SSH终端运行。
过一会,再回到集群集群主机列表页面,可以看到rancher2节点已经恢复
如何恢复执行过清理节点脚本的节点中文官网提供了一个清理节点的脚本,这个脚本会清理节点上的容器、卷、rancher/kubernetes目录、网络、进程、iptables等。
如果由于误操作,在正确的节点上执行了清理脚本。针对这种场景,只有在rancher中创建过备份的集群才可以恢复。
创建集群备份参考中文官网:
https://rancher2.docs.rancher.cn/docs/cluster-admin/backing-up-etcd/_index
在我的环境中,demo集群有rancher2和rancher3两个节点。
创建备份在Rancher UI上创建集群快照,稍后恢复集群的时候会用的到。
然后导航到全局->demo->工具->备份查看已经创建的ETCD备份,从备份创建时间可以看出,刚才创建的备份名称为c-v6mtr-ml-klt5n。
备份文件存到了etcd(rancher2)节点对应的/opt/rke/etcd-snapshots目录下。
清理节点在rancher2节点执行中文官网节点清理脚本,清理理完之后,不出所料,集群崩了。
恢复集群