误删节点或集群怎么办?这里有一颗后悔药

网友投稿 313 2022-10-11

误删节点或集群怎么办?这里有一颗后悔药

本文来自Rancher Labs

作者介绍 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营。拥有6年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Linux,还是虚拟化KVM或是Docker容器技术都有丰富的运维和实践经验。 在实际使用Rancher过程中,偶尔会因为误操作删除了System Workload、节点或集群, 导致集群状态异常而无法访问。如果用户不了解恢复方法,通常会重新添加节或重新搭建集群。

本文将根据以下几个场景来介绍如何恢复由于误操作引起的Rancher集群故障:

如何恢复System Project Workload 如何恢复从Rancher UI或kubectl误删的节点 如何恢复执行过清理节点脚本的节点 如何恢复被删除的custom集群   重要说明    本文档基于Rancher 2.4.x测试,其他版本操作可能会略有不同 本文介绍的场景均是针对custom集群 如果您在此过程中遇到问题,则应该熟悉Rancher架构/故障排除 您应该熟悉单节点安装和高可用安装之间的体系结构差异   如何恢复System Project Workload

System Project中包含了一些保证该集群能够正常运行的一些workload,如果删除某些workload可能会对该集功能群造成影响。

恢复cattle-cluster-agent和cattle-node-agent

模拟故障

3.根据步骤1-2获取的变量替换:RANCHERURL、CLUSTERID、TOKEN(主机需要安装curl和jq)

# Rancher URL RANCHERURL="https://192.168.99.201" # Cluster ID CLUSTERID="c-v6mtr" # Token TOKEN="token-klt5n:2smg6n5cb5vstn7qm797l9fbc7s9gljxjw528r7c5c4mwf2g7kr6nm" # Valid certificates curl -s -H "Authorization: Bearer ${TOKEN}" "${RANCHERURL}/v3/clusterregistrationtokens?clusterId=${CLUSTERID}" | jq -r '.data[] | select(.name != "system") | .command' # Self signed certificates curl -s -k -H "Authorization: Bearer ${TOKEN}" "${RANCHERURL}/v3/clusterregistrationtokens?clusterId=${CLUSTERID}" | jq -r '.data[] | select(.name != "system") | .insecureCommand'

以上命令执行成功后,将返回导入集群的命令,请做好备份,命令如下:

curl --insecure -sfL | kubectl apply -f -

恢复cattle-cluster-agent和cattle-node-agent

1、在具有controlplane角色的节点上生成kubeconfig

docker run --rm --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro --entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) --format='{{index .RepoTags 0}}' | tail -1) -c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml get configmap -n kube-system full-cluster-state -o json | jq -r .data.\"full-cluster-state\" | jq -r .currentState.certificatesBundle.\"kube-admin\".config | sed -e "/^[[:space:]]*server:/ s_:.*_: \"> kubeconfig_admin.yaml

2、应用更新

恢复kube-api-auth

默认情况下,RKE 集群会默认启用授权集群端点。这个端点允许您使用 kubectl CLI 和 kubeconfig 文件访问下游的 Kubernetes 集群,RKE 集群默认启用了该端点。

如果误删kube-api-auth,恢复的方法也很简单,只需要编辑集群,将“授权集群访问地址”修改成禁用,保存集群。然后再用相同的方法启用 “授权集群访问地址”即可。

恢复nginx-ingress-controller、canal、coredns、metrics-server组件

nginx-ingress-controller、canal、coredns、metrics-server 这些workload都是通过kube-system命名空间下的各种job来创建的,所以如果要重建这些workload只需要重新执行对应的job即可。

本例使用nginx-ingress-controller做演示,其他workload的恢复步骤可以参考此恢复方案。

模拟故障

从kube-system命名空间下删除rke-ingress-controller-deploy-job(如果不删除对应的job,更新集群后,不会重新触发job重新执行)  为了触发集群更新,可以编辑集群,修改NodePort范围,然后保存。

验证

如何恢复从Rancher UI或kubectl误删的节点

当节点处于“活动”状态,从集群中删除节点将触发一个进程来清理节点。如果没有重启服务器,并不会完成所有的清除所有非持久化数据。

如果无意中将节点删除,只需要使用相同的参数再次添加节点即可恢复集群。

如何恢复执行过清理节点脚本的节点

中文官网提供了一个清理节点的脚本,这个脚本会清理节点上的容器、卷、rancher/kubernetes目录、网络、进程、iptables等。

如果由于误操作,在正确的节点上执行了清理脚本。针对这种场景,只有在rancher中创建过备份的集群才可以恢复。

清理节点

恢复集群

节点清理脚本并不会将/opt/rke目录删除,只是使用mv /opt/rke /opt/rke-bak-$(date +"%Y%m%d%H%M")做了个备份。接下来可以将快照备份恢复到默认的/opt/rke目录下。

mv /opt/rke-bak-202007060903 /opt/rke

业务应用检查

如何恢复被删除的custom集群

在Rancher UI中误删自定义的集群,如果要恢复该集群,必须需要有Rancher local集群和自定义集群的备份才可以恢复。

备份集群

备份custom集群

参考 备份custom集群,备份成功后,可以导航到集群->工具->备份查看备份。

模拟故障

备份custom集群

模拟故障

恢复local集群

恢复local集群,可参考:  结

从以上几个场景的恢复操作可以看出,大部分的恢复方案都依赖于集群的备份,所以大家在生产环境中一定要做好定时备份,并且最好将备份文件上传到远端备份服务器,这样可以在灾难情况下保护您的数据。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java并发编程之ConcurrentLinkedQueue队列详情
下一篇:即构SDK7月迭代:新增支持按通道设置延迟模式,减少卡顿,实现无感切换
相关文章

 发表评论

暂时没有评论,来抢沙发吧~