本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

从节点中移除Kubernetes组件

本节描述如何将节点从Rancher启动的Kubernetes集群中断开连接,并从节点中移除所有Kubernetes组件。此过程允许您将节点用于其他目的。

当您使用Rancher在基础设施提供商的新节点上安装Kubernetes时,会创建资源(容器/虚拟网络接口)和配置项(证书/配置文件)。

当从您的Rancher启动的Kubernetes集群中移除节点时(前提是它们处于`Active`状态),这些资源会自动清理,所需的唯一操作是重启节点。当节点变得不可达且无法使用自动清理过程时,我们描述了在节点可以再次添加到集群之前需要执行的步骤。

移除哪些内容?

在清理使用Rancher配置的节点时,根据您要移除的集群节点类型,以下组件将被删除。

已移除组件 由基础设施提供商托管的节点 自定义节点 托管集群 注册的节点

Rancher部署名称空间(默认是`cattle-system`)

serviceAccount、`clusterRoles`和`clusterRoleBindings`由Rancher标记

标签、注释和终结器

Rancher 部署

机器、集群、项目和用户自定义资源定义(CRD)

在`management.cattle.io` API组下创建的所有资源

Rancher v2.x创建的所有CRD

通过Rancher UI从集群中移除节点

当节点处于`Active`状态时,从集群中移除节点将触发清理节点的过程。请在自动清理过程完成后重启节点,以确保任何非持久性数据被正确移除。

重启节点:

# using reboot
$ sudo reboot

# using shutdown
$ sudo shutdown -r now

手动从集群中移除Rancher组件

当节点无法访问并从集群中移除时,无法触发自动清理过程,因为节点无法访问。请按照以下步骤手动移除Rancher组件。

下面列出的命令将从节点中移除数据。在执行任何命令之前,请确保您已创建要保留的文件的备份,因为数据将会丢失。

从注册集群中移除Rancher组件

对于注册集群,移除Rancher的过程稍有不同。您可以选择在Rancher UI中简单地删除集群,或者运行一个脚本来从节点中移除Rancher组件。这两种选项都会进行相同的删除。

在注册集群与Rancher断开连接后,集群的工作负载将不受影响,您可以使用与注册集群到Rancher之前相同的方法访问集群。

  • 通过UI / API

  • 通过脚本

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

在您使用Rancher UI(或API)开始移除注册集群后,将发生以下事件。

  1. Rancher创建一个`serviceAccount`,用于从集群中去除Rancher组件。该账户被分配了 clusterRoleclusterRoleBinding权限,这些权限是去除Rancher组件所必需的。

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

  3. Rancher从集群中去除。然而,集群仍然存在,运行原生版本的Kubernetes。

*结果:*在被移除的内容中列出的所有注册集群组件都被删除。

与其使用Rancher UI清理注册集群节点,不如运行一个脚本。

先决条件

安装 kubectl

  1. 打开一个网页浏览器,导航到 GitHub,并下载`user-cluster.sh`。

  2. 通过在与`user-cluster.sh`相同的目录中运行以下命令,使脚本可执行:

    chmod +x user-cluster.sh
  3. *仅限隔离环境:*打开`user-cluster.sh`并用`user-cluster.yml`中的URL替换`yaml_url`。

    如果您没有隔离环境,请跳过此步骤。

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

    添加`-dry-run`标志以预览脚本的结果而不进行更改。

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

*结果:*脚本正在运行。在被移除的内容中列出的所有注册集群组件都被删除。

清理节点

  • RKE2

  • K3s

有关清理未通过Rancher部署的RKE2集群中节点的说明,请参见https://documentation.suse.com/cloudnative/rke2/latest/en/install/uninstall.html[官方RKE2文档]中关于卸载集群的说明。

您需要从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 > system-agent-uninstall.sh
sudo sh system-agent-uninstall.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 > system-agent-uninstall.sh
sudo sh system-agent-uninstall.sh

去除 K3s

要去除 K3s 安装,请运行节点上已存在的 k3s-uninstall 脚本:

sudo k3s-uninstall.sh

目录和文件

以下目录在将节点添加到集群时使用,应予以去除。您可以使用 rm -rf /directory_name 去除目录。

根据您分配给节点的角色,某些目录可能在节点上存在或不存在。

  • RKE2

  • K3s

目录

/etc/ceph

/etc/cni

/etc/kubernetes

/etc/rancher

/opt/cni

/run/calico

/run/flannel

/run/secrets/kubernetes.io

/var/lib/calico

/var/lib/cni

/var/lib/etcd

/var/lib/kubelet

/var/lib/rancher

/var/lib/weave

/var/log/containers

/var/log/pods

/var/run/calico

清理目录:

rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /etc/rancher \
       /opt/cni \
       /run/calico \
       /run/flannel \
       /run/secrets/kubernetes.io \
       /var/lib/calico \
       /var/lib/cni \
       /var/lib/etcd \
       /var/lib/kubelet \
       /var/lib/rancher \
       /var/lib/weave \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico
目录

/etc/ceph

/etc/cni

/etc/kubernetes

/etc/rancher

/etc/systemd/system/k3s

/opt/cni

/run/calico

/run/flannel

/run/secrets/kubernetes.io

/usr/local/bin/k3s

/var/lib/calico

/var/lib/cni

/var/lib/etcd

/var/lib/kubelet

/var/lib/rancher

/var/lib/weave

/var/log/containers

/var/log/pods

/var/run/calico

清理目录:

rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /etc/rancher \
       /etc/systemd/system/k3s \
       /opt/cni \
       /run/calico \
       /run/flannel \
       /run/secrets/kubernetes.io \
       /usr/local/bin/k3s \
       /var/lib/calico \
       /var/lib/cni \
       /var/lib/etcd \
       /var/lib/kubelet \
       /var/lib/rancher \
       /var/lib/weave \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico

网络接口和 Iptables

剩下的两个被更改/配置的组件是(虚拟)网络接口和 iptables 规则。这两者对节点是非持久的,这意味着它们将在节点重启后被清除。要去除这些组件,建议重启。

重启节点:

# using reboot
$ sudo reboot

# using shutdown
$ sudo shutdown -r now

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

网络接口

根据为集群配置的网络提供商,某些接口可能在节点上存在或不存在。

接口

flannel.1

cni0

tunl0

caliXXXXXXXXXXX(随机接口名称)

vethXXXXXXXX(随机接口名称)

列出所有网络接口:

# Using ip
ip address show

# Using ifconfig
ifconfig -a

去除一个网络接口:

ip link delete interface_name

Iptables

根据为集群配置的网络提供商,某些链可能会或不会出现在节点上。

Iptables 规则用于路由来自和去往容器的流量。创建的规则不是持久的,因此重启节点将恢复 iptables 到其原始状态。

cali-failsafe-in

cali-failsafe-out

cali-fip-dnat

cali-fip-snat

cali-from-hep-forward

cali-from-host-endpoint

cali-from-wl-dispatch

cali-fw-caliXXXXXXXXXXX(随机链名称)

cali-nat-outgoing

cali-pri-kns.NAMESPACE(每个名称空间的链)

cali-pro-kns.NAMESPACE(每个名称空间的链)

cali-to-hep-forward

cali-to-host-endpoint

cali-to-wl-dispatch

cali-tw-caliXXXXXXXXXXX(随机链名称)

cali-wl-to-host

KUBE-EXTERNAL-SERVICES

KUBE-FIREWALL

KUBE-MARK-DROP

KUBE-MARK-MASQ

KUBE-NODEPORTS

KUBE-SEP-XXXXXXXXXXXXXXXX(随机链名称)

KUBE-SERVICES

KUBE-SVC-XXXXXXXXXXXXXXXX(随机链名称)

列出所有 iptables 规则:

iptables -L -t nat
iptables -L -t mangle
iptables -L