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

王海龙,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可能会对该集功能群造成影响。

通常情况下,通过RKE创建的custom集群应包括以下workload:

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

下面我们来分别介绍如果误删了这些workload之后应如何恢复。

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

模拟故障

从System Project下删除 cattle-cluster-agent和cattle-node-agent

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

生成Kubeconfig和集群yaml

1.在Rancher UI上创建API token(用户-> API & Keys)并保存Bearer Token

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

2.选择集群后,在Rancher UI(格式为c-xxxxx)中找到其clusterid,并在地址栏中找到它。

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

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 https://192.168.99.201/v3/import/2mgnx6f4tvgk5skfzgs6qlcrvn5nnwqh9kchqbf5lhlnswfcfrqwpr.yaml | 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_:.*_: \"https://127.0.0.1:6443\"_"' > kubeconfig_admin.yaml

2、应用更新

将https://xxx/v3/import/dl75kfmmbp9vj876cfsrlvsb9x9grqhqjd44zvnfd9qbh6r7ks97sr.yaml 替换为生成Kubeconfig和集群yaml步骤中生成的yaml连接,本例为https://192.168.99.201/v3/import/2mgnx6f4tvgk5skfzgs6qlcrvn5nnwqh9kchqbf5lhlnswfcfrqwpr.yaml

docker run --rm --net=host -v $PWD/kubeconfig_admin.yaml:/root/.kube/config --entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) --format='{{index .RepoTags 0}}' | tail -1) -c 'curl --insecure -sfL https://xxx/v3/import/dl75kfmmbp9vj876cfsrlvsb9x9grqhqjd44zvnfd9qbh6r7ks97sr.yaml | kubectl apply -f -'

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

验证

接下来通过Rancher UI或kubectl可以看到 cattle-cluster-agent和cattle-node-agent 已经恢复。

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

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

恢复kube-api-auth

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyjxz.html