作者簡介
袁振,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 的指令碼也使用了國內的資源,這樣能大大提升國內使用者的體驗。