跳至主要内容

為 Rancher 設定高可用性 RKE2 Kubernetes 叢集

本節描述如何根據 Rancher 伺服器環境的最佳實踐安裝 Kubernetes 叢集。

先決條件​

這些說明假設您已按照本節中的描述設定了三個節點、一個負載平衡器和一個 DNS 記錄。

請注意,為了讓 RKE2 與負載平衡器正確配合使用,您需要設定兩個監聽器:一個用於連接埠 9345 上的 supervisor,另一個用於連接埠 6443 上的 Kubernetes API。

Rancher 需要安裝在支援的 Kubernetes 版本上。要了解您的 Rancher 版本支援哪些版本的 Kubernetes,請參閱支援維護條款。要指定 RKE2 版本,請在執行 RKE2 安裝腳本時使用 INSTALL_RKE2_VERSION 環境變數。

安裝 Kubernetes​

1. 安裝 Kubernetes 並設定 RKE2 Server​

RKE2 伺服器使用嵌入式 etcd 執行,因此您不需要設定外部資料存儲即可在 HA 模式下執行。

在第一個節點上,您應該使用自己的預共享密鑰作為令牌來設定設定檔。令牌參數可以在啟動時設定。

如果您未指定預共享密鑰,RKE2 將生成一個並將其放置在 /var/lib/rancher/rke2/server/node-token。

為避免固定註冊位址出現憑證錯誤,您應該使用設定的 tls-san 參數啟動伺服器。此選項在伺服器的 TLS 憑證中新增額外的主機名稱或 IP 作為主體替代名稱,如果您想透過 IP 和主機名稱存取,則可以將其指定為列表。

首先,您必須建立放置 RKE2 設定檔的目錄:

mkdir -p /etc/rancher/rke2/

接下來,使用以下範例在 /etc/rancher/rke2/config.yaml 建立 RKE2 設定檔:

token: my-shared-secret
tls-san:
- my-kubernetes-domain.com
- another-kubernetes-domain.com

之後,您需要執行安裝命令並啟用和啟動 rke2:

curl -sfL https://get.rke2.io | sh -
systemctl enable rke2-server.service
systemctl start rke2-server.service
  1. 要加入其餘節點,您需要使用相同的共享令牌或自動生成的令牌設定每個額外的節點。以下是設定檔的範例:

    token: my-shared-secret server: https://<DNS-DOMAIN>:9345 tls-san:

    • my-kubernetes-domain.com
    • another-kubernetes-domain.com 之後,您需要執行安裝程式並啟用,然後啟動 rke2:

    curl -sfL https://get.rke2.io | sh - systemctl enable rke2-server.service systemctl start rke2-server.service

  2. 在您的第三個 RKE2 伺服器節點上重複相同的命令。

2. 確認 RKE2 正在執行​

在所有伺服器節點上啟動 rke2 伺服器程序後,請使用以下命令確認叢集已正常啟動

/var/lib/rancher/rke2/bin/kubectl \
--kubeconfig /etc/rancher/rke2/rke2.yaml get nodes
您應該會看到您的伺服器節點處於 Ready 狀態。

然後測試叢集 Pod 的健康狀況:

/var/lib/rancher/rke2/bin/kubectl \
--kubeconfig /etc/rancher/rke2/rke2.yaml get pods --all-namespaces

**結果:**您已成功設定 RKE2 Kubernetes 叢集。

3. 儲存並開始使用 kubeconfig 檔案​

當您在每個 Rancher 伺服器節點上安裝 RKE2 時,會在節點上的 /etc/rancher/rke2/rke2.yaml 建立一個 kubeconfig 檔案。此檔案包含對叢集的完全存取權限的憑證,您應該將此檔案儲存在安全的位置。

要使用此 kubeconfig 檔案,

  1. 安裝 kubectl,一個 Kubernetes 命令列工具。
  2. 複製位於 /etc/rancher/rke2/rke2.yaml 的檔案並將其儲存到本機上的 ~/.kube/config 目錄。
  3. 在 kubeconfig 檔案中,server 指令被定義為 localhost。將伺服器設定為您的控制平面負載平衡器的 DNS,連接埠為 6443。(RKE2 Kubernetes API Server 使用連接埠 6443,而 Rancher 伺服器將透過連接埠 80 和 443 上的 NGINX Ingress 提供服務。)以下是一個範例 rke2.yaml:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: [CERTIFICATE-DATA]
server: [LOAD-BALANCER-DNS]:6443 # Edit this line
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: [PASSWORD]
username: admin

**結果:**您現在可以使用 kubectl 來管理您的 RKE2 叢集。如果您有多個 kubeconfig 檔案,您可以透過在使用 kubectl 時傳入檔案路徑來指定要使用哪一個:

kubectl --kubeconfig ~/.kube/config/rke2.yaml get pods --all-namespaces

有關 kubeconfig 檔案的更多資訊,請參閱 RKE2 文件或關於使用 kubeconfig 檔案組織叢集存取的官方 Kubernetes 文件。

4. 檢查叢集 Pod 的健康狀況​

現在您已設定 kubeconfig 檔案,您可以使用 kubectl 從本機存取叢集。

檢查所有必要的 Pod 和容器是否健康並準備繼續:

/var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cloud-controller-manager-rke2-server-1 1/1 Running 0 2m28s
kube-system cloud-controller-manager-rke2-server-2 1/1 Running 0 61s
kube-system cloud-controller-manager-rke2-server-3 1/1 Running 0 49s
kube-system etcd-rke2-server-1 1/1 Running 0 2m13s
kube-system etcd-rke2-server-2 1/1 Running 0 87s
kube-system etcd-rke2-server-3 1/1 Running 0 56s
kube-system helm-install-rke2-canal-hs6sx 0/1 Completed 0 2m17s
kube-system helm-install-rke2-coredns-xmzm8 0/1 Completed 0 2m17s
kube-system helm-install-rke2-ingress-nginx-flwnl 0/1 Completed 0 2m17s
kube-system helm-install-rke2-metrics-server-7sggn 0/1 Completed 0 2m17s
kube-system kube-apiserver-rke2-server-1 1/1 Running 0 116s
kube-system kube-apiserver-rke2-server-2 1/1 Running 0 66s
kube-system kube-apiserver-rke2-server-3 1/1 Running 0 48s
kube-system kube-controller-manager-rke2-server-1 1/1 Running 0 2m30s
kube-system kube-controller-manager-rke2-server-2 1/1 Running 0 57s
kube-system kube-controller-manager-rke2-server-3 1/1 Running 0 42s
kube-system kube-proxy-rke2-server-1 1/1 Running 0 2m25s
kube-system kube-proxy-rke2-server-2 1/1 Running 0 59s
kube-system kube-proxy-rke2-server-3 1/1 Running 0 85s
kube-system kube-scheduler-rke2-server-1 1/1 Running 0 2m30s
kube-system kube-scheduler-rke2-server-2 1/1 Running 0 57s
kube-system kube-scheduler-rke2-server-3 1/1 Running 0 42s
kube-system rke2-canal-b9lvm 2/2 Running 0 91s
kube-system rke2-canal-khwp2 2/2 Running 0 2m5s
kube-system rke2-canal-swfmq 2/2 Running 0 105s
kube-system rke2-coredns-rke2-coredns-547d5499cb-6tvwb 1/1 Running 0 92s
kube-system rke2-coredns-rke2-coredns-547d5499cb-rdttj 1/1 Running 0 2m8s
kube-system rke2-coredns-rke2-coredns-autoscaler-65c9bb465d-85sq5 1/1 Running 0 2m8s
kube-system rke2-ingress-nginx-controller-69qxc 1/1 Running 0 52s
kube-system rke2-ingress-nginx-controller-7hprp 1/1 Running 0 52s
kube-system rke2-ingress-nginx-controller-x658h 1/1 Running 0 52s
kube-system rke2-metrics-server-6564db4569-vdfkn 1/1 Running 0 66s

**結果:**您已確認可以使用 kubectl 存取叢集,且 RKE2 叢集正在成功執行。現在可以在叢集上安裝 Rancher 管理伺服器。