当您使用 Rancher 创建集群节点 时,将创建资源(容器/虚拟网络接口)和配置项(证书/配置文件)。

当从您的 Rancher 启动的 Kubernetes 集群中删除节点时(假设它们处于“活动”状态),这些资源将被自动清除,所需的唯一操作是重新启动节点。当一个节点变得不可访问并且不能使用自动清理过程时,我们将再次说明将该节点添加到集群之前需要执行的步骤。

:::danger 警告 以下操作将删除节点中的数据(包括容器,卷,iptables 等),在执行命令之前,请先查看该脚本,确保您理解这个脚本在做什么,并且确保已进行了数据备份。 :::

在使用 Rancher 清理创建的节点时,将根据要删除的集群节点的类型删除以下组件。

当节点处于“活动”状态时,从集群中删除节点将触发一个进程来清理节点。完成自动清理过程后,请重启节点,以确保正确删除了所有非持久性数据。

重启节点:

  1. ## using reboot
  2. $ sudo reboot
  3. ## using shutdown
  4. $ sudo shutdown -r now

当某个节点不可访问并从集群中删除时,由于该节点不可访问,因此无法触发自动清理过程。请按照以下步骤手动删除 Rancher 组件。

对于导入的集群,删除 Rancher 的过程略有不同。您可以在 Rancher UI 中简单地删除集群,也可以运行从节点中删除 Rancher 组件的脚本。两个选项执行相同的删除操作。

将导入的集群与 Rancher 分离后,集群的工作负载将不受影响,您可以使用与将集群导入 Rancher 之前相同的方法访问集群。

通过 UI / API 删除

警告: 此过程将从您的集群中删除数据。在执行命令之前,请确保您已经创建了要保存的文件备份,因为数据将会丢失。

在使用 Rancher UI(或 API)开始删除 之后, 将发生以下事件。

  1. 使用serviceAccount, Rancher 调度并运行一个作业,该作业清除集群中的 Rancher 组件。此作业还将 serviceAccount 及其角色作为依赖项引用,因此作业将在完成之前删除它们。

结果: 所有在 中为导入集群列出的组件会被删除。

通过运行脚本删除

您可以运行一个脚本,而不是使用 Rancher UI 来清除导入的集群节点。该功能从v2.1.0版本开始提供。

  1. 打开网页浏览器, 打开 GitHub页面, 并下载 user-cluster.sh.

  2. 在与user-cluster.sh相同的路径下运行以下命令,使脚本可执行:

    1. chmod +x user-cluster.sh
  3. 仅限于离线环境: 打开 user-cluster.shyaml_url 替换成 user-cluster.yml中的 URL

    如果您没有离线环境,请跳过这一步。

  4. 在同一目录中,运行脚本并提供 rancher/rancher-agent 镜像版本, 该版本应该与用于管理集群的 Rancher 版本一致。(<RANCHER_VERSION>):

    提示:

    添加 -dry-run 标志来预览脚本的结果,而不做任何更改

    1. ./user-cluster.sh rancher/rancher-agent:<RANCHER_VERSION>

结果: 脚本运行。所有在 中为导入集群列出的组件会被删除。

Windows 节点

要清理 Windows 节点,可以运行位于 c:\etc\rancher目录下的清理脚本。该脚本删除 Kubernetes 生成的资源和执行的二进制文件。它还取消了防火墙规则和网络设置。

要运行脚本,可以在 PowerShell 中使用此命令:

根据您分配给节点的角色,容器中有 Kubernetes 组件, 属于覆盖网络的容器、DNS、ingress 控制器和 Rancher Agent。(还有您创建的 Pods 也被调度到这个节点)

清理所有 Docker 容器、镜像和卷:

  1. docker rm -f $(docker ps -qa)
  2. docker rmi -f $(docker images -q)
  3. docker volume rm $(docker volume ls -q)

挂载

Kubernetes 的组件和密钥在系统上留下了需要卸载的挂载。

卸载所有挂载:

  1. for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done

以下目录在添加一个节点到一个集群时被使用到,应该将它们删除。您可以使用命令 rm -rf /directory_name删除目录

清除目录:

  1. rm -rf /etc/ceph \
  2. /etc/cni \
  3. /etc/kubernetes \
  4. /opt/cni \
  5. /opt/rke \
  6. /run/secrets/kubernetes.io \
  7. /run/flannel \
  8. /var/lib/calico \
  9. /var/lib/etcd \
  10. /var/lib/cni \
  11. /var/lib/kubelet \
  12. /var/lib/rancher/rke/log \
  13. /var/log/containers \
  14. /var/log/kube-audit \
  15. /var/log/pods \
  16. /var/run/calico

网络接口和 Iptables

其余被更改/配置过的两个组件是(虚拟)网络接口和 iptables 规则。它们相对于节点来说都是非持久性的,这意味着它们将在重新启动节点后被清除。要删除这些组件,建议重启节点。

重启节点:

如果您想了解更多关于(虚拟)网络接口或 iptables 规则的信息,请参阅下面的特定主题。

注意: 根据为节点所在的集群配置的网络供应商,一些接口将出现在节点上,也可能不出现在节点上。

列出所有接口:

  1. ## Using ip
  2. ip address show
  3. ## Using ifconfig
  4. ifconfig -a

删除接口:

  1. ip link delete interface_name

iptables

列出所有 iptables 规则:

  1. iptables -L -t nat
  2. iptables -L -t mangle