Day 5 - 透过 RKE 架设第一套 Rancher(下)

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

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

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

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

前言

本篇文章将会示范如何使用 Rke + Helm 来搭建一个基於 RKE 丛集的 Rancher 服务。
该 RKE 丛集会有三个节点,因此环境方面就会准备三台 VM,这三台 VM 前面就会架设一个 Load-Balancer 来帮忙将流量导向後方服务。
同时也会准备一个 rancher.hwchiu.com 的 DNS 纪录,这样之後存取时会更为简单与方便。

环境准备

接下来的环境都会基於 Azure 云端环境来使用,包含了 VMs 与 LoadBalancer 的设定
本文章不会探讨 Azure 云端该如何使用,事实上读者可以使用任意的公有云服务,甚至是地端机器都可。
下述为相关的软件版本资讯

  • VM: Azure VM
  • OS: Ubuntu 20.04.2 LTS
  • Rke: v1.2.11

整个架构如图下

Imgur

Rancher

前篇文章中已经透过 rke 的指令创建了一个基於三节点的 Kubernetes 丛集,接下来我们要透过 Helm 指令将 Rancher 给安装到我们的 RKE 之中。

再次提醒,针对 Rancher v2.5 与之後的版本请使用 Helm v3 来安装,官方已经不再支援使用 Helm v2,如果你旧版的 Rancher 是使用 Helm v2 安装然後想要将其升级到 Rancher v2.5 系列,则必须要先针对 Helm v2 -> Helm v3 进行转移。
转移的方式可以参考 [Helm Plugin helm-2to3](https://github.com/helm/helm-2to3),官方页面有介绍详细的用法,注意使用前先对所有 helm 的档案进行备份以免不熟悉酿成不可恢复的情况

第一步先将 Rancher 官方的 Helm Repo 给加入到 Helm 清单中,官方提供三种不同的 Helm Repo 供使用者使用,包含

  1. Latest: https://releases.rancher.com/server-charts/latest
  2. Stable: https://releases.rancher.com/server-charts/stable
  3. Alpha: https://releases.rancher.com/server-charts/alpha

根据不同的需求采用不同的版本,如果不是 Rancher 开发者的话,我认为 Alpha 没有使用的需求,而 Latest 则是让你有机会可以尝试目前最新的版本,看看一些新功能或是一些旧有 Bug 是否有被移除。大部分情况下推荐稳稳地使用 stable 版本,遇到问题也比较有机会被解决。

本次安装将采用 stable 作为来源版本

azureuser@rke-management:~$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
"rancher-stable" has been added to your repositories
azureuser@rke-management:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "rancher-stable" chart repository
Update Complete. ⎈Happy Helming!⎈

要安装 Rancher 之前,有一个要处理的东西就是所谓的 SSL 凭证,官网有提供不同选项的教学,主要可以分成

  1. Rancher 自签凭证
  2. 自行准备凭证
  3. 透过 Let's Encrypt 获得的凭证

为了後续连线顺利与方便,大部分都不会考虑使用自签凭证而是会采用(2)/(3)两个选项,而 Let's Encrypt 使用上还是相对简单与轻松。
Kubernetes 生态系中针对 Let's Encrypt 来产生凭证的专案也不少,其中目前最热门且最多人使用的非 cert-manager 莫属。
同时 Rancher 官方也推荐使用 cert-manager 来使用,因此接下来就会使用 cert-manager 来辅助 Let's Encrypt 的处理。

这边要注意的是, Rancher 官网有推荐使用的 Cert-Manager 版本,该版本通常都会比 Cert-Manager 慢一些,因此使用上请以 Rancher 推荐的为主,不要自行的升级 cert-manager 到最新版本,以免 Rancher 没有进行测试整合而发生一些不预期的错误,到时候除错起来也麻烦。

如同前述环境指出,本范例会使用的域名是 rancher.hwchiu.com,该域名会事先指向 Load-Balancer,并且将 HTTP/HTTPS 的连线都导向後方的三台服务器 server{1,2,3}。

接者透过 helm 安装 cert-manager 到环境中,整个步骤跟 Rancher 非常雷同,准备相关的 repo 并且透过 helm 安装。

azureuser@rke-management:~$ helm repo add jetstack https://charts.jetstack.io
"jetstack" has been added to your repositories
azureuser@rke-management:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "jetstack" chart repository
...Successfully got an update from the "rancher-stable" chart repository
Update Complete. ⎈Happy Helming!⎈
azureuser@rke-management:~$
azureuser@rke-management:~$ kubectl create namespace cert-manager
azureuser@rke-management:~$ helm install   cert-manager jetstack/cert-manager   --namespace cert-manager   --version v1.0.4 --set installCRDs=true

确认 cert-manager 的 pod 都起来後,下一步就是继续安装 Rancher

azureuser@rke-management:~$ kubectl -n cert-manager get pods
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-6d87886d5c-fr5r4              1/1     Running   0          2m
cert-manager-cainjector-55db655cd8-2xfhf   1/1     Running   0          2m
cert-manager-webhook-6846f844ff-8l299      1/1     Running   0          2m

首先於 rke 丛集中创立个给 rancher 使用的 namespace,接者透过 helm 指令加上一些参数,这些参数主要是告诉 Rancher 我们的 Ingress 想要使用 letsEncrypt 来产生相关的 SSL 凭证,希望指向的域名是 rancher.hwchiu.com.

Rancher Helm Chart 就会针对这些参数去产生 cert-manager 需要的物件,如 Issuer,接者 cert-manager 就会接替後续行为来透过 ACME 产生一组合法的 TLS 凭证。

azureuser@rke-management:~$ kubectl create namespace cattle-system
azureuser@rke-management:~$ helm install rancher rancher-stable/rancher \
   --namespace cattle-system \
   --set hostname=rancher.hwchiu.com \
   --set replicas=3 \
   --set ingress.tls.source=letsEncrypt \
   --set [email protected]  \
   --version 2.5.9
NAME: rancher
LAST DEPLOYED: Sun Aug  8 20:14:03 2021
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.

NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued and Ingress comes up.

Check out our docs at https://rancher.com/docs/rancher/v2.x/en/

Browse to https://rancher.hwchiu.com

Happy Containering!

注: 预设情况下 ACME 会采用 HTTP 挑战的方式来验证域名的拥有权,所以 load-balancer 记得要打开 80/443 的 port,将这些服务导向後端的 rke 丛集。Rancher 会使用 cert-manager + ingress 等相关资源自动处理凭证。

安装完毕後,等待相关的服务被部署,确认 cattle-system 这个 namespace 下的服务都呈现 running 後,打开浏览器连上 https://rancher.hwchiu.com 就会看到下述的登入画面

因为是第一次登入,系统会要求你更新密码,同时可以选择预设的浏览模式,由於我们想要使用 Rancher 去管理多个 Cluster,因此我们选择左边的格式。接者下一步再次确认要存取的 URL

一切顺利的话,就可以正式进入到 Rancher 的主要介面,这时候可以看到如下画面

Rancher Server 安装完毕後,会把 用来部署 Rancher 的 Kubernetes 丛集 也加入到 Rancher 的管理视角中,并且使用 local 这个名称来表示这个 cluster。
其中可以注意到的是该丛集的 Provider 是显示为 Imported,这意味者这个 Kubernetes 丛集并不是由 Rancher 帮你创造,而是把一个已经运行的丛集给汇入到 Rancher 中。

网页可以顺利存取就意味我们第一个 Rancher 服务顺利的架设起来,下一篇文章就会来仔细介绍对於一个 IT Team 的管理人员来说,从系统层面来看 Rancher 的设定有哪些,每个设定对团队有什麽益处与好处。

最後来看一下 kubernetes 的相关服务,观察一下一个基本的 Rancher 服务有哪些一些 Pod,未来要除错时才有概念应该要去哪个 namespace 看哪些服务。
cattle-system 与 kube-system 内都有相关的服务,这边要注意的是 kube-system 放的是我们最初安装 RKE 时部署的资源,而 cattle-system 则是我们透过 helm 部署 Rancher 用的。所以基本上就是三个 rancher Pod 以及一个 webhook。

azureuser@rke-management:~$ kubectl get pods -A  | awk '{print $1"\t"$2}'
NAMESPACE       NAME
cattle-system   helm-operation-56h22
cattle-system   helm-operation-bjvmx
cattle-system   helm-operation-jtwf6
cattle-system   helm-operation-stv9x
cattle-system   helm-operation-ttxt4
cattle-system   helm-operation-xtznm
cattle-system   rancher-745c97799b-fqfsw
cattle-system   rancher-745c97799b-ls8wc
cattle-system   rancher-745c97799b-nhlz6
cattle-system   rancher-webhook-6cccfd96b5-grd4q
cert-manager    cert-manager-6d87886d5c-fr5r4
cert-manager    cert-manager-cainjector-55db655cd8-2xfhf
cert-manager    cert-manager-webhook-6846f844ff-8l299
fleet-system    fleet-agent-d59db746-hfbcq
fleet-system    fleet-controller-79554fcbf5-b7ckf
fleet-system    gitjob-568c57cfb9-ncpf5
ingress-nginx   default-http-backend-6977475d9b-hk2br
ingress-nginx   nginx-ingress-controller-8rtpv
ingress-nginx   nginx-ingress-controller-bv2lq
ingress-nginx   nginx-ingress-controller-mhfm6
kube-system     coredns-55b58f978-545dx
kube-system     coredns-55b58f978-qznqj
kube-system     coredns-autoscaler-76f8869cc9-hrlqq
kube-system     kube-flannel-44hvn
kube-system     kube-flannel-rhw7v
kube-system     kube-flannel-thrln
kube-system     metrics-server-55fdd84cd4-wqdkw
kube-system     rke-coredns-addon-deploy-job-pjdln
kube-system     rke-ingress-controller-deploy-job-m7sj2
kube-system     rke-metrics-addon-deploy-job-vtnfk
kube-system     rke-network-plugin-deploy-job-mv8nr
rancher-operator-system rancher-operator-595ddc6db9-tfgp8

一但使用 Helm 安装 Rancher,未来的升级大部分都可以透过 Helm 这个指令继续升级,升级的概念也非常简单

  1. 检查当前版本的 release note,看看有什麽升级需要注意的事项
  2. 更新 helm repo
  3. 透过 helm 更新 rancher 这个 release,并且透过 --version 指名使用新的版本
  4. 如果不想要每次都输入前述一堆关於 SSL 的参数,可以把哪些参数变成一个 values.yaml 给传入

详细资讯建议参阅官网文章来看看更详细的升级策略。
如果不想要透过 rke 来维护 Rancher 的话,官网也有如何使用 EKS/AKS/GKE 等公有云 kubernetes 服务维护 Rancher 的相关教学。


<<:  [Day5] Flutter - 垂直布局容器 ( Column )

>>:  【Day5】不是八卦阵的有序集合:阵列

[18] 登入後将用户资料纪录

建立资料中心後,更改登入功能 再登入後将用户资料记录在案 变更 dataCenter 对应的 act...

Day17 JavaScript基本教学(二)

流程控制 JavaScript在执行网页上的动画特效时,透过流程控制可以决定动画物件出现的先後顺序,...

python入门学习day 2

#初学程序语言的你为什麽需要有GitHub? #Git & Github区别在哪里?? Gi...

[Day 14] 资料产品生命周期管理-描述型模型

特别把描述模型和预测模型分开来写是因为两者在开发与验证阶段有不小的差异。 (https://ubiq...

CWE和CVE

在软件开发生命周期(SDLC)的设计阶段(建筑和详细设计)完成後,我们必须进行审查。威胁建模是设计审...