关于后端:温柔一刀优雅且彻底地卸载Rancher-HA

5次阅读

共计 2852 个字符,预计需要花费 8 分钟才能阅读完成。

前言

Rancher 从 v2.5 开始,反对将 Rancher HA 装置在任何通过 CNCF 认证的规范 K8s 发行版上,这个集群能够应用上游 Kubernetes,也能够应用 Rancher 的 Kubernetes 发行版之一,也能够是来自 Amazon EKS 等提供商的托管 Kubernetes 集群。无论装置到哪种集群上,Rancher 都举荐应用一个独立的 K8S/K3S 集群作为 Rancher HA 的 Local 集群,这样 Rancher HA 不会和业务集群相互影响。

如果在独立的 Local 集群上卸载 Rancher HA,个别的做法是将 Local 集群删掉,从而达到卸载 Rancher HA 的目标,这样做的益处是比较简单、数据清理的比拟彻底。

但有些用户将 Rancher HA 装置到了某些业务或生产集群上,这样的话,就无奈通过移除 Local 集群去卸载 Rancher HA。咱们须要找到一个方法能够在不影响 Local 集群运行的状况下卸载掉 Rancher HA。

Rancher 提供了一个卸载 Rancher HA 的工具:system-tools。咱们能够借助 system-tools 来将 Rancher HA 生成的 namespace 和其余资源移除。执行 remove 命令会移除以下资源:

  • Rancher 部署的命名空间,默认名称是 cattle-system。
  • Rancher 通过 cattle.io/creator:norman 标签标记的 serviceAccount、
    clusterRoles 和 clusterRoleBindings。
  • 应用 Rancher v2.1.0 或更新版本创立的所有及资源都会被打上 cattle.io/creator:norman 的标签。
  • Labels、annotations、finalizers。
  • Rancher Deployment。
  • 集群、我的项目和用户相干的 CRD。
  • management.cattle.io API Group 内创立的所有资源。

应用 Rancher v2.x 创立的所有 CRD。
但 system-tools 年久失修(最初一次更新于 2019 年 4 月 11 日),针对后续 Rancher 版本新增的一些 namespace 等资源并没有被移除,所以导致咱们没有一个办法能够齐全在 Local 集群上卸载掉 Rancher HA。

卸载 Rancher HA

为了在 Local 集群上彻底卸载掉 Rancher HA,咱们能够先筛选出哪些 namesaces 是由 Rancher HA 创立的,而后再通过 system-tools remove –kubeconfig <$KUBECONFIG> –namespace <NAMESPACE> 来删除对应的 namespace 和相干资源。通过测试发现,通过 system-tools 移除 namespace 后,namespace 的状态始终为 Terminating,还须要手动的移除掉.spec.finalizers 和.metadata.finalizers,而后能力彻底的将 namespace 删除。

为此,笔者筹备了一个 shell 脚本来实现以上的删除流程:

留神:

  • 本脚本只基于 Rancher v2.5.8 上进行测试,实践上 v2.5.x 系列版本均反对。其余版本(例如:2.4.x)须要批改步骤 4 中对应的 NS 参数来设置要删除的 namespace
  • 本脚本在 Local 集群为 k3s 和 rke 集群上做过验证,如 Local 集群为其余 K8s 集群,须要确认步骤 4 中对应的 NS 参数来设置要删除的 namespace
  • Rancher HA 会创立 c -、p-、user- 结尾的 namespace,这些不须要用户关注,当通过 system-tools 移除 cattle-system 会主动将这些 namespace 移除

1. 下载脚本

root@ip-172-31-22-79:~# wget https://raw.githubusercontent.com/kingsd041/some_script/master/remove-rancher-ha/remove_r_ha.sh

2. 在该主机上安装 kubectl、jq、system-tools,并且创立 kubeconfig 文件。

3. 编辑脚本,设置 KUBE_CONFIG 目录

KUBE_CONFIG='/root/.kube/config'

4. 编辑脚本,确认 NS 变量设置的 namespace 是否为将要被删除的 namespace,防止误删 namespace。

NS="cattle-system|*fleet*|rancher-operator-system|cattle-global-nt|cattle-global-data"

5. 执行脚本,卸载 Rancher HA

root@ip-172-31-22-79:~# ./remove_r_ha.sh

cattle-system
cattle-global-data
cattle-global-nt
rancher-operator-system
fleet-clusters-system
fleet-local
cluster-fleet-local-local-1a3d67d0a899
fleet-system
fleet-default
cluster-fleet-default-c-9zwzq-dd029f17f988
Are you sure to remove the above namespace? [y/n] y
INFO[0000] Removing Rancher management plane in namespace: [cattle-system]
INFO[0000] Getting connection configuration
INFO[0000] Removing Cattle deployment
INFO[0000] Removed Cattle deployment succuessfully
INFO[0000] Removing ClusterRoleBindings
...
...

大概 5 分钟,脚本执行实现。此时,能够通过 kubectl get ns 来确认 Rancher HA 是否被卸载:

root@ip-172-31-22-79:~# kubectl get ns
NAME              STATUS   AGE
kube-public       Active   65m
default           Active   65m
kube-node-lease   Active   65m
kube-system       Active   65m

后记

尽管 Rancher v2.5 开始能够将 Rancher HA 装置在任何通过 CNCF 认证的 K8s 集群上,但还是倡议大家在生产环境上将 Rancher HA 装置在一个独立的 Local 集群上,这样能够防止 Rancher HA 和业务集群相互影响。如果你将 Rancher HA 装置到了业务 K8s 集群上,能够应用本文的形式去完满的卸载 Rancher HA,对原集群不会有任何影响。

鸣谢

感激 IT 老男孩 博文:强制删除 Terminating 状态的 namespace
(原文链接:https://www.xtplayer.cn/kuber…)

正文完
 0