写点什么

温柔一刀,优雅且彻底地卸载 Rancher HA

  • 2021-07-30
  • 本文字数:2047 字

    阅读完需:约 7 分钟

温柔一刀,优雅且彻底地卸载Rancher HA

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。https://rancher.com/docs/rancher/v2.x/en/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-systemcattle-global-datacattle-global-ntrancher-operator-systemfleet-clusters-systemfleet-localcluster-fleet-local-local-1a3d67d0a899fleet-systemfleet-defaultcluster-fleet-default-c-9zwzq-dd029f17f988Are you sure to remove the above namespace? [y/n] yINFO[0000] Removing Rancher management plane in namespace: [cattle-system]INFO[0000] Getting connection configurationINFO[0000] Removing Cattle deploymentINFO[0000] Removed Cattle deployment succuessfullyINFO[0000] Removing ClusterRoleBindings......
复制代码


大约 5 分钟,脚本执行完成。此时,可以通过 kubectl get ns 来确认 Rancher HA 是否被卸载:



root@ip-172-31-22-79:~# kubectl get nsNAME STATUS AGEkube-public Active 65mdefault Active 65mkube-node-lease Active 65mkube-system Active 65m
复制代码

后记

虽然 Rancher v2.5 开始可以将 Rancher HA 安装在任何经过 CNCF 认证的 K8s 集群上,但还是建议大家在生产环境上将 Rancher HA 安装在一个独立的 Local 集群上,这样可以避免 Rancher HA 和业务集群相互影响。如果你将 Rancher HA 安装到了业务 K8s 集群上,可以使用本文的方式去完美的卸载 Rancher HA,对原集群不会有任何影响。


本文转载自:RancherLabs(ID:RancherLabs)

原文链接:温柔一刀,优雅且彻底地卸载Rancher HA

2021-07-30 07:002102

评论

发布
暂无评论
发现更多内容

netty系列之:EventExecutor,EventExecutorGroup和netty中的实现

程序那些事

Java Netty 程序那些事 2月月更

浅谈 AI 物联网基础常识 | 社区征文

liuzhen007

AI 新春征文 2月月更

你知道MySQL InnoDB 的内存组件有哪些吗?

程序猿阿星

MySQL MySQL InnoDB Buffer Pool

学生管理系统模块4作业

刘洋

#架构实战营 「架构实战营」

提权方式及原理简介(面试)

喀拉峻

黑客

面试突击24:为什么wait和notify必须放在synchronized中?

王磊

面试 java面试

「前端CI/CD系列」第一篇:如何用建木CI往七牛云上传文件

Jianmu

CDN CI/CD 文件存储 七牛云 建木CI

网络安全kali渗透学习 web渗透入门 如何进行NESSUS漏洞检测

学神来啦

迁移学习综述与未来展望 | 社区征文

战场小包

人工智能 迁移学习 新春征文 2月月更

系统学习 TypeScript(一)——认识 TypeScript

编程三昧

typescript

基于CC2530(ZigBee设计)的温度报警器

DS小龙哥

2月月更

Spring Boot AOP 扫盲,实现接口访问的统一日志记录

沉默王二

Java

AI安全技术总结与展望| 社区征文

herosunly

人工智能 新春征文 2月月更

2022年1月视频行业用户洞察:假期影响下活跃用户开始回升

易观分析

移动视频 视频app

晟盾科技加入龙蜥社区,共建开源新生态

OpenAnolis小助手

Linux 开源

如何理解用户的行为?

石云升

产品经理 用户研究 用户模型 2月月更

Bloom Filter 优化- CrimsonDB系列论文(一)

Emc

存储 LSM-Tree

【架构训练营-模块三】

默光

架构训练营5期

从冬奥看中国科技(六):千里光伏初长成

脑极体

安卓隐私沙箱来了!Android Privacy Sandbox简介

XCG00

android

网络损伤工具大乱斗

声网

Dev for Dev 网络损伤 网络仿真 网络与传输

模块 8 作业

miliving

会声会影2022美颜功能介绍 教你玩转视频美颜

懒得勤快

医疗保健行业如何从区块链中受益?

CECBC

【漏洞分析】反序列化漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

再谈 AI 及未来的趋势 | 社区征文

宇宙之一粟

AI 新春征文 2月月更

万字详解数据仓库、数据湖、数据中台和湖仓一体

五分钟学大数据

数据中台 数据仓库 数据湖 湖仓一体

虎符Hoo研究院:Cosmos是如何实现链与链的“港口”相连的?

区块链前沿News

Hoo 虎符交易所 虎符研究院 Cosmos

当前主流视频编码技术浅析| 社区征文

王强

视频编解码 新春征文

扔掉 Electron,拥抱基于 Rust 开发的 Tauri

百瓶技术

rust 前端 框架开发 tauri

IDP深度 | 企业到底需要何种数据分析挖掘工具?

Baihai IDP

人工智能 数据挖掘 商业智能

温柔一刀,优雅且彻底地卸载Rancher HA_架构_Rancher_InfoQ精选文章