Day 14 - Rancher - 其他事项

本文将於赛後同步刊登於笔者部落格

有兴趣学习更多 Kubernetes/DevOps/Linux 相关的资源的读者,欢迎前往阅读

更多相关科技的技术分享,欢迎追踪 矽谷牛的耕田笔记

对於 Kubernetes 与 Linux Network 有兴趣的可以参阅笔者的线上课程

前言

过去十多篇文章从从三个不同角度来探讨如何使用 Rancher,包含系统管理员,丛集管理员到专案管理员,不同层级专注的角度不同,因此使用上也有不同的功能可以用。

本篇文章将探讨 Rancher 一些其他的注意事项。

清除节点

之前文章探讨过三种不同安装 Kubernetes 的方式,其中一种方式是运行 docker command 在现有的节点上将该节点加入到 RKE 丛集中。

但是如果今天有需求想将该节点从 RKE 中移除该怎麽办?

Cluster Manager 中可以直接到 Cluster 页面将该节点从 RKE 中移除,但是要注意的是,这边的移除代表的只是将该节点从 RKE 移除,该节点上可能会有一些因为加入 RKE 而产生的档案依然存在节点上。

假设今天有需求又要将该节点重新加入回到 RKE 中的话,如果上次移除时没有妥善地去删除那些档案的话,第二次运行 docker command 去加入 RKE 丛集有非常大的机率会失败,因为节点中有太多之前的产物存在。

官网有特别撰写一篇文章探讨如果要清除这些产物的话,有哪些资源要处理,详细版本可以参阅 Removing Kubernetes Components from Nodes

这边列举一下一个清除节点正确步骤

  1. 从 Rancher UI 移除该节点
  2. 重启该节点,确保所有放到暂存资料夹的档案都会消失
  3. Docker 相关资料
  4. Mount 相关资讯都要 umount
  5. 移除资料夹
  6. 移除多的网卡
  7. 移除多的 iptables 规则
  8. 再次重开机

第三点移除 docker 相关资料,官方列出三个指令,分别移除 container, volume 以及 image。

docker rm -f $(docker ps -qa)
docker rmi -f $(docker images -q)
docker volume rm $(docker volume ls -q)

如果该节点接下来又要重新加入到 Rancher 中,建议不需要执行 docker rmi 的步骤,之前的 image 可以重新使用不需要重新抓取,这样可以省一些时间。

第四点的 mount 部分要注意的是,官文文件没有特别使用 sudo 的指令於范例中,代表其假设你会使用 root 身份执行,因此如果不是使用 root 的话记得要在 umount 指令中补上 sudo

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

第五点跟第四点一样,但是第五点非常重要,因为系统上有太多的资料夹都含有过往 RKE 丛集的资料,所以第五步一定要确保需要执行才可以将资料清除。

sudo rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /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/rke/log \
       /var/log/containers \
       /var/log/kube-audit \
       /var/log/pods \
       /var/run/calico

第六跟第七这两步骤并不一定要处理,因为这些资讯都是节点加入到 Kubernetes 後被动态创建的,基本上重开机就不会有这些资讯,只要确保节点重新开机後没有继续成为 Kubernetes 的节点,那相关的虚拟网卡跟 iptables 规则也就不会被产生。

要注意的是官方文件中的所有步骤不一定都会有东西可以删除,主要会取决於丛集内的设定,不同的设定可能会有不同的结果,譬如采用不同的 CNI,其产生的 iptables 规则与虚拟网卡就会有所不同。

离线安装

虽然云端环境方便存取,但是很多产业与环境可能会需要於一个没有对外网路的环境下去安装 Kubernetes 丛集,这种情况下如果想要使用 Rancher 的话就要探讨如何达到离线安装。

Rancher 讲到离线安装有两种含义,一种是

  1. Rancher 本身的离线安装
  2. Rancher 以离线安装的方式帮忙创建 RKE 丛集

上述两种方式其实都还是仰赖各式各样的 container image 来处理,所以处理的方法一致,就是要安装一个 container registry 并且将会需要使用的 container image 都事先汇入到该 container registry 中,接者安装时要让系统知道去哪下载相关的 container image 即可。

官网有数篇文章探讨这种类型下的安装该怎麽处理,有兴趣的也可以参考 Air Gapped Helm CLI Install

由於安装 Rancher 本身有很多方式,譬如多节点的 RKE 或是单节的 Docker 安装,以下简述一下如何用 Docker 达成单节点的离线安装。

  1. 架设一个 Private Container Registry
  2. 透过 Rancher 准备好的脚本去下载并打包 Rancher 会用到的所有 Container Image
  3. 把第二步骤产生 Container Image 档案给汇入到 Private Container Registry
  4. 运行修改过後的 Docker 来安装 Rancher.

第一点这边有几点要注意
a. 可以使用 container registry v2 或是使用 harbor
b. 一定要帮该 container registry 准备好一个凭证,这样使用上会比较方便,不用太多地方要去处理 invalid certificate 的用法。凭证的部分可以自签 CA 或是由一个已知信任 CA 签署的。
c. image 的容量大概需要 28 GB 左右,因此准备环境时要注意空间

第二跟第三点直接参阅官网的方式,先到 GitHub 的 Release Page 找到目标版本,接者下载下列三个档案

  1. rancher-images.txt
  2. rancher-save.images.sh
  3. rancher-load-images.sh

第二个脚本会负责去下载 rancher-images.txt 中描述的档案并且打包成一个 tar 档案,系统中会同时存放 container image 以及 tar 档,所以最好确保空间有 60GB 以上的足够空间。
第三个脚本会将该 tar 档案的内容上传到目标 container registry。

这一切都准备完毕後,就可以执行 docker 指令,可以参阅Docker Install Commands

一个范例如下

docker run -d --restart=unless-stopped \
    -p 80:80 -p 443:443 \
    -v /mysite/fullchain.pem:/etc/rancher/ssl/cert.pem \
    -v /mysite/previkey.pem>:/etc/rancher/ssl/key.pem \
    -e CATTLE_SYSTEM_DEFAULT_REGISTRY=test.hwchiu.com \ # Set a default private registry to be used in Rancher
    -e CATTLE_SYSTEM_CATALOG=bundled \ # Use the packaged Rancher system charts
    --privileged
    registry.hwchiu.com/rancher/rancher:v2.5.9  \
    --no-cacerts

请特别注意上述的参数,不同的凭证方式会传入的资讯不同,自签的方式还要额外把 CA_CERTS 给丢进去。


<<:  Day 14 实作 database migration

>>:  Day 14:RecyclerView 进阶项目布局

有关fb的商业应用

请问现在要开发有关fb的商业应用,是否都局限在粉丝团的上面,个人专页的资料商业应用有局限的吗? ...

Day17-Goroutine

前言 goroutine 是 Go 语言实现并发的一种方式,在执行的过程需要少量的记忆体用量(4k~...

缺乏计画的目标,只能叫做愿望。----实行篇

缺乏计画的目标,只能叫做愿望。 A goal without a plan is just a wi...

WordPress WPS Hide Login 外挂教学,隐藏登入网址,防止暴力登入攻击

这几天为提升 WordPress 站台安全性,安装了 WordPress 防火墙及防毒外挂 Word...

#11 No-code 之旅 — 在 Next.js 专案中显示 Notion 的资料 ft. Notion SDK

哈罗!昨天使用 SWR 实作了一个小功能,让使用者可以列出某 Github user 的所有公开 r...