如何使用國內資源在 RKE2 上安裝 Rancher HA

Rancher發表於2022-03-08
作者簡介
袁振,SUSE Rancher 技術支援經理,負責訂閱客戶售後技術支援團隊,為訂閱客戶提供技術支援服務。2016 年開始接觸容器、Kubernetes 技術,對自動化運維、Devops、Kubernetes、prometheus 和其他雲原生相關技術具有較深入的研究,對 SRE 運維體系建設、SRE 運維繫統架構設計有著豐富的實踐經驗。

前 言

Rancher 一直崇尚 “簡單即美”,安裝和使用都把簡單發揮得淋漓盡致。但通過國內環境使用 Rancher 和 RKE2 可能會由於網路問題導致使用體驗不佳:

  • Rancher 和 RKE2 啟動都依賴於容器映象,在國內通過 dockerhub 拉取映象有時會非常慢。
  • RKE2 預設使用 github 資源安裝指令碼和二進位制檔案,國內難以下載。

為了解決上述問題,Rancher 已經把資源 mirror 到了國內,並提供給國內環境使用,本文將為大家介紹如何使用國內資源在 RKE2 上安裝 Rancher HA。

環境描述

  • 作業系統:SUSE Linux Enterprise Server 15 SP3
  • Kubernetes 發行版:RKE2 Kubernetes-v1.21.9+rke2r1
  • Rancher 版本:2.6.3
  • 節點資訊
  • rancher2-6-node01 Server 節點(controller、etcd、worker)
  • rancher2-6-node02 Server 節點(controller、etcd、worker)
  • rancher2-6-node03 Server 節點(controller、etcd、worker)
  • Helm 3.8.0

部署 RKE2 Kubernetes 叢集

  • 本章將介紹如何部署 RKE2 的高可用叢集,用於 Rancher 2.6 版本的部署環境使用;
  • Rancher 中國團隊定時將 dockerhub 上的 RKE2 映象同步到國內阿里雲映象倉庫(registry.cn-hangzhou.aliyuncs.com),所以在國內安裝 RKE2 推薦使用阿里雲映象倉庫地址;
  • RKE2 可以通過引數 system-default-registry 指定映象倉庫地址。

建立第一個 server 節點

通常情況下,RKE2 使用 /etc/rancher/rke2/config.yaml 檔案作為預設配置檔案。但是叢集部署模式下,需要指定 server 地址、token 和 tls-san 引數,可以先行建立配置檔案:

mkdir -p /etc/rancher/rke2 ##建立目錄
vim /etc/rancher/rke2/config.yaml ##編輯配置檔案

token: rke2-create-token ##自定義token
tls-san: 172.16.200.1 ##tls-san引數
system-default-registry: "registry.cn-hangzhou.aliyuncs.com" ##阿里雲映象庫地址

更多配置選項可檢視官方文件,配置檔案建立完成後,使用以下命令執行指令碼安裝 rke2-server,由於截止本文發出後的 Rancher 2.6.3 版本尚不支援在 kubernetes 1.22 版本上執行,因此這裡使用 v1.21.9+rke2r1 的 kubernetes 版本:

curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh |
INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_VERSION=v1.21.9+rke2r1 sh -

執行以下命令將 rke2 啟動並設定為開機自啟動(第一次啟動需要下載映象等檔案,需要一定時間):

systemctl start rke2-server && systemctl enable rke2-server

預設的 kubectl 工具和 kubeconfig 檔案路徑如下:

kubectl: /var/lib/rancher/rke2/bin/kubectl
kubeconfig: /etc/rancher/rke2/rke2.yaml
crictl: /var/lib/rancher/rke2/bin/crictl
ctr: /var/lib/rancher/rke2/bin/ctr

以上工具可以軟連結到/usr/bin下方便使用,例如:

ln -s /var/lib/rancher/rke2/bin/kubectl /usr/bin/kubect

執行以下命令可以檢視叢集狀態:

kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get node

NAME STATUS ROLES AGE VERSION
rancher2-6-node01 Ready control-plane,etcd,master 106s v1.21.9+rke2r1

新增其他 server 節點

在上一個步驟中,我們已經成功啟動了第一個 server 節點,現在需要將剩下的兩個節點新增到叢集中,以組成高可用叢集。

在新增第二個 server 節點前,需要手動建立一個 RKE2 配置檔案:

mkdir -p /etc/rancher/rke2 ##建立目錄
vim /etc/rancher/rke2/config.yaml ##編輯配置檔案

server: https://172.16.200.1:9345 ##新增首個節點的server地址;
token: <token for server node> ##填寫第一個server節點的token,通過在第一個節點檢視/var/lib/rancher/rke2/server/token檔案獲得;
tls-san: 172.16.200.1 ##tls-san引數;
system-default-registry:"registry.cn-hangzhou.aliyuncs.com" ##阿里雲映象庫地址;

執行以下命令執行指令碼安裝 rke2-server:

curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh |
 INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_VERSION=v1.21.9+rke2r1 sh -

執行以下命令將 rke2 啟動並設定為開機自啟動(第一次啟動需要下載映象等檔案,需要一定時間):

systemctl start rke2-server && systemctl enable rke2-server

同樣,在新增第三個 server 節點前,需要手動建立一個 RKE2 配置檔案:

mkdir -p /etc/rancher/rke2 ##建立目錄
vim /etc/rancher/rke2/config.yaml ##編輯配置檔案

server: https://172.16.200.1:9345 ##新增首個節點的server地址;
token: <token for server node> ##填寫第一個server節點的token,通過在第一個節點檢視/var/lib/rancher/rke2/server/token檔案獲得;
tls-san: 172.16.200.1 ##tls-san引數;
system-default-registry: "registry.cn-hangzhou.aliyuncs.com" ##阿里雲映象庫地址;

執行以下命令執行指令碼安裝 rke2-server:

curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh |
INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_VERSION=v1.21.9+rke2r1 sh - 

執行以下命令將 rke2 啟動並設定為開機自啟動(第一次啟動需要下載映象等檔案,需要一定時間):

systemctl start rke2-server && systemctl enable rke2-server

驗證叢集

執行以下命令可以檢視叢集狀態:

kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get node

NAME                              STATUS   ROLES                                             AGE VERSION
rancher2-6-node01   Ready      control-plane,etcd,master     18m v1.21.9+rke2r1
rancher2-6-node02   Ready      control-plane,etcd,master     7m29s v1.21.9+rke2r1
rancher2-6-node03   Ready      control-plane,etcd,master     3m31s v1.21.9+rke2r1

至此,我們已經成功建立並執行由 RKE2 建立的 kubernetes 高可用叢集,但需要注意的是 RKE2 官方最佳實踐表明,高可用叢集應該由統一的 LB 入口訪問,這樣才是真正的高可用。本文主要介紹了 Rancher 2.6 版本在 RKE2 叢集上的部署,更詳細的 RKE2 使用、部署請參考 RKE2 官方文件https://docs.rancher.cn/docs/...)或者官方公眾號文章

RKE2 預設使用 containerd 作為 Runtime,如果想要查詢主機上執行的容器,可以使用以下命令:

crictl --config /var/lib/rancher/rke2/agent/etc/crictl.yaml ps

部署 Rancher 2.6.3

  • 本章將介紹如何在 RKE2 叢集中部署 Rancher 2.6.3 版本;
  • Rancher 中國團隊定時將 dockerhub 上的 Rancher 映象同步到國內阿里雲映象倉庫(registry.cn-hangzhou.aliyuncs.com),所以在國內安裝 Rancher 推薦使用阿里雲映象倉庫地址;
  • 可以通過 helm chart 選項 rancherImage 和 systemDefaultRegistry 來設定使用阿里雲映象倉庫。

安裝 Rancher 2.6.3

新增 Rancher helm repo 源:

helm repo add rancher-latest http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/latest

"rancher-latest" has been added to your repositories

此處使用為國內源地址,國外地址使用https://releases.rancher.com/...;CHART_REPO>關於更多國內加速資訊,請檢視官方公眾號【如何在國內優雅地使用Rancher

為 Rancher 建立 Namespace:

kubeconfig=/etc/rancher/rke2/rke2.yaml

kubectl --kubeconfig=$kubeconfig create namespace cattle-system

建立 Ingress 證書:

kubeconfig=/etc/rancher/rke2/rke2.yaml

kubectl --kubeconfig=$kubeconfig \
          -n cattle-system create secret \
          tls tls-rancher-ingress \
          --cert=./tls.pem \
          --key=./tls.key

helm 安裝 Rancher Server:

helm --kubeconfig=$kubeconfig install rancher rancher-latest/rancher \
          --namespace cattle-system \
          --set hostname=rancher26.itlsp.com \
          --set rancherImage=registry.cn-hangzhou.aliyuncs.com/rancher/rancher \
          --set ingress.tls.source=secret \
          --set systemDefaultRegistry=registry.cn-hangzhou.aliyuncs.com \
          --set rancherImageTag=v2.6.3

## hostname為上一步建立證書中的hostname;
## systemDefaultRegistry和rancherImage中的映象庫可指定;
## 以上命令為權威證書安裝命令,如果是自簽名證書參考以下命令

## 建立自簽名Ingress證書
kubectl --kubeconfig=$kubeconfig \
           -n cattle-system create \
           secret tls tls-rancher-ingress \
           --cert=./tls.crt \
           --key=./tls.key
## 建立自簽名證書CA
kubectl --kubeconfig=$kubeconfig \
           -n cattle-system \
           create secret generic tls-ca \
           --from-file=cacerts.pem

##helm安裝Rancher server
helm --kubeconfig=$kubeconfig install rancher rancher-latest/rancher \
         --namespace cattle-system \
         --set hostname=<修改為自己的域名> \
         --set rancherImage=<映象庫地址>/cnrancher/rancher \
         --set privateCA=true \
         --set ingress.tls.source=secret \
         --set systemDefaultRegistry=<映象庫地址> \
         --set rancherImageTag=v2.6.3

執行以下命令檢視 Rancher Server Pod 狀態:

kubectl --kubeconfig=$kubeconfig -n cattle-system get pod | grep rancher

rancher-57f57f775-4bjdj 1/1 Running 1 5m58s
rancher-57f57f775-fdh6c 1/1 Running 0 5m58s
rancher-57f57f775-fnsxk 1/1 Running 0 5m58s

恭喜你!到這個步驟,應該已經可以通過瀏覽器訪問全新的 Rancher 2.6.3 版本了。至此,全新的 Rancher2.6.3 版本已經執行在更安全、更穩定、更高效的 RKE2 平臺上。 

圖片

總結

  • RKE2 是 SUSE Rancher 下一代 Kubernetes 發行版,它以更高的安全性著稱(它還有另外一個名字:RKE Government);啟用了 FIPS 140-2 標準,並完全通過了 CIS1.5 和 1.6 版本的掃描;
  • 另外 RKE2 預設未採用 docker 作為 Runtime,而是使用了更底層的 containerd;針對 kubernetes 拋棄 docker 後何去何從這一問題,這一做法大大穩定了國內使用者的信心;
  • RKE2 將 kube-apiserver、etcd、kube-controller-manager 等核心元件作為靜態 Pod 執行,由二進位制執行的 kubelet 進行管理,增強了故障自愈能力和整體的穩定性,也降低了部署難度;
  • 本文中安裝 Rancher 和 RKE2 均使用了阿里雲映象倉庫 registry.cn-hangzhou.aliyuncs.com,安裝 RKE2 的指令碼也使用了國內的資源,這樣能大大提升國內使用者的體驗。

相關文章