从节点中移除 Kubernetes 组件
本文介绍如何断开 Rancher 创建的 Kubernetes 集群中的一个节点,并删除该节点中的所有 Kubernetes 组件。此过程允许你将节点用于其他用途。
在通过 Rancher 在基础设施提供商的新节点上安装 Kubernetes 时,会创建资源(容器/虚拟网络接口)和配置项(证书/配置文件)。
从 Rancher 启动的 Kubernetes 集群中移除节点时(前提是它们处于 Active
状态),这些资源会被自动清理,唯一需要的操作是重启节点。如果节点变得不可访问并且无法自动清理进程时,请先执行我们提供的步骤,然后该节点才能重新添加到集群。
移除了什么?
清理使用 Rancher 配置的节点时,会根据要删除的集群节点类型移除以下组件:
移除的组件 | 由基础设施提供商托管的节点 | 自定义节点 | 托管集群 | 注册节点 |
---|---|---|---|---|
Rancher deployment 命名空间(默认: |
✓ |
✓ |
✓ |
✓ |
由 Rancher 标记的 |
✓ |
✓ |
✓ |
✓ |
标签、注释和终结器 |
✓ |
✓ |
✓ |
✓ |
Rancher Deployment |
✓ |
✓ |
✓ |
|
主机、集群、项目和用户的自定义资源定义 (CRD) |
✓ |
✓ |
✓ |
|
在 |
✓ |
✓ |
✓ |
|
Rancher v2.x 创建的所有 CRD |
✓ |
✓ |
✓ |
通过 Rancher UI 删除集群中的节点
如果节点处于 Active
状态,删除集群中的节点会触发清理节点的进程。完成自动清理后请重启节点,以确保所有非持久性数据已正确删除。
重启节点:
# 使用重启 $ sudo reboot # 使用关机 $ sudo shutdown -r now
手动移除集群中的 Rancher 组件
当节点不可达并已从集群中移除时,由于该节点不可达,则无法触发自动清理过程。请按照以下步骤手动删除 Rancher 组件。
下面列出的命令将删除节点中的数据。在执行命令之前,由于数据将会丢失,请确保你已经备份了要保留的文件。 |
移除注册集群中的 Rancher 组件
移除注册集群中的 Rancher 的过程略有不同。你可以选择在 Rancher UI 中简单地删除集群,也可以运行脚本从节点中删除 Rancher 组件。两个选项的删除效果是一样的。
将注册集群分离 Rancher 后,集群的工作负载将不受影响,你可以使用与集群注册到 Rancher 之前相同的方法来访问集群。
-
使用 UI/API
-
使用脚本
此过程将删除你的集群数据。在执行命令之前,由于数据将会丢失,请确保你已经备份了要保留的文件。 |
使用 Rancher UI(或 API)删除注册集群后,会发生以下事件:
-
Rancher 创建一个
serviceAccount
,用于删除集群中的 Rancher 组件。此账号分配了 clusterRole 和 clusterRoleBinding 权限,这些权限是删除 Rancher 组件所必需的。 -
Rancher 会使用
serviceAccount
调度并运行一个 job,以将 Rancher 组件从集群中清除。该 job 还将serviceAccount
及其角色作为依赖引用,因此该 job 在完成之前会删除它们。 -
已从集群中移除 Rancher。然而,集群仍然存在,运行着原生版本的 Kubernetes。
结果:已删除移除了什么章节中为注册集群列出的所有组件。
你可以运行脚本,而不是使用 Rancher UI 来清理已注册的集群节点。
先决条件:
安装 kubectl。 |
-
打开浏览器并导航到 GitHub,然后下载
user-cluster.sh
。 -
在
user-cluster.sh
所在的目录下运行以下命令,使脚本可执行:chmod +x user-cluster.sh
-
仅限离线环境:打开
user-cluster.sh
并将yaml_url
替换为user-cluster.yml
中的 URL。如果你没有使用离线环境,请跳过此步骤。
-
在同一目录中,运行脚本并提供
rancher/rancher-agent
镜像版本,该版本应与用于管理集群的 Rancher 版本相同(<RANCHER_VERSION>
):你可以添加
-dry-run
标志来预览脚本的结果,但不进行更改。./user-cluster.sh rancher/rancher-agent:<RANCHER_VERSION>
结果:脚本已运行。已删除移除了什么章节中为注册集群列出的所有组件。
清理节点
-
RKE1
-
RKE2
-
K3s
在运行以下命令之前,首先通过 Rancher UI 删除节点。
要删除节点:
-
点击 ☰ 并选择集群管理。
-
在集群表中,单击节点所属集群的名称。
-
在第一个选项卡中,单击节点状态旁边的复选框。
-
单击删除。
要删除整个集群而不是单个节点,或者不使用 Rancher UI 重新移动节点,请按照以下步骤操作:
Windows 节点
要清理 Windows 节点,请运行 c:\\etc\\rancher
中的脚本。此脚本删除 Kubernetes 生成的资源和执行二进制文件,还会删除防火墙规则和网络设置:
pushd c:\etc\rancher .\cleanup.ps1 popd
运行此脚本后,节点将重置并可以重新添加到 Kubernetes 集群。
Docker 容器、镜像和卷
清理 Docker 容器时要小心。以下命令将删除节点上的所有 Docker 容器、镜像和卷,包括与 Rancher 无关的容器: |
docker rm -f $(docker ps -qa) docker rmi -f $(docker images -q) docker volume rm $(docker volume ls -q)
挂载
Kubernetes 组件和 secret 会留下以下挂载:
-
/var/lib/kubelet
-
/var/lib/rancher
-
/var/lib/kubelet/pods/
中的其他挂载
要卸载所有挂载,请运行:
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done
你需要从 Rancher 提供的 RKE2 节点中删除以下组件:
-
rancher-system-agent,用于连接 Rancher 并安装和管理 RKE2。
-
RKE2 本身。
删除 rancher-system-agent
要删除 rancher-system-agent,请运行 system-agent-uninstall.sh 脚本:
curl https://raw.githubusercontent.com/rancher/system-agent/main/system-agent-uninstall.sh | sudo sh
删除 RKE2
要删除 RKE2,请运行节点上已存在的 rke2-uninstall
脚本:
sudo rke2-uninstall.sh
你需要从 Rancher 提供的 K3s 节点中删除以下组件:
-
rancher-system-agent:连接 Rancher 并安装和管理 K3s。
-
K3s 本身。
删除 rancher-system-agent
要删除 rancher-system-agent,请运行 system-agent-uninstall.sh 脚本:
curl https://raw.githubusercontent.com/rancher/system-agent/main/system-agent-uninstall.sh | sudo sh
删除 K3s
要删除 K3s,请运行节点上已存在的 k3s-uninstall
脚本:
sudo k3s-uninstall.sh
目录和文件
以下目录在将节点添加到集群时使用,应将该目录删除。你可以使用 rm -rf /directory_name
来删除目录。
节点分配的角色决定了出现在节点上的目录。 |
目录 |
---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
清理目录:
rm -rf /etc/ceph \ /etc/cni \ /etc/kubernetes \ /etc/rancher \ /opt/cni \ /opt/rke \ /run/secrets/kubernetes.io \ /run/calico \ /run/flannel \ /var/lib/calico \ /var/lib/etcd \ /var/lib/cni \ /var/lib/kubelet \ /var/lib/rancher\ /var/log/containers \ /var/log/kube-audit \ /var/log/pods \ /var/run/calico
网络接口和 iptables
其余两个更改/配置的组件是(虚拟)网络接口和 iptables 规则。两者都对节点不持久,这意味着它们将在节点重新启动后被清除。要删除这些组件,建议重新启动它们。
重启节点:
# 使用重启 $ sudo reboot # 使用关机 $ sudo shutdown -r now
如果你想了解更多关于(虚拟)网络接口或 iptables 规则的信息,请参阅下面的具体内容。
网络接口
节点所在的集群所配置的网络提供商决定了节点上将出现的接口。 |
接口 |
---|
|
|
|
|
|
列出所有接口:
# 使用 ip ip address show # 使用 ifconfig ifconfig -a
删除接口:
ip link delete interface_name
Iptables
节点所在的集群所配置的网络提供商决定了节点上将出现的链。 |
iptables 规则用于将流量从容器路由到容器。创建的规则不是持久性的,因此重新启动节点会将 iptables 恢复到原始状态。
链 |
---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
列出所有 iptables 规则:
iptables -L -t nat iptables -L -t mangle iptables -L