跳至主要内容

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

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

對於沒有直接網際網路存取的系統,請參閱離線安裝說明。

單節點安裝提示:

在單節點 Kubernetes 叢集中,Rancher 伺服器沒有高可用性,這對於在生產環境中執行 Rancher 很重要。但是,如果您想在短期內透過使用單個節點來節省資源,同時保留高可用性遷移路徑,則在單節點叢集上安裝 Rancher 可能會很有用。

要設定單節點 K3s 叢集,請僅在一個節點上執行 Rancher 伺服器安裝命令,而不是在兩個節點上執行。

在兩種單節點設定中,Rancher 都可以使用 Helm 在 Kubernetes 叢集上以與在任何其他叢集上安裝相同的方式安裝。

先決條件​

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

Rancher 需要安裝在支援的 Kubernetes 版本上。要了解您的 Rancher 版本支援哪些版本的 Kubernetes,請參閱 Rancher Support Matrix。

要指定 K3s (Kubernetes) 版本,請在執行 K3s 安裝腳本時使用 INSTALL_K3S_VERSION(例如,INSTALL_K3S_VERSION="v1.24.10+k3s1")環境變數。

安裝 Kubernetes​

1. 安裝 Kubernetes 並設定 K3s Server​

當執行命令啟動 K3s Kubernetes API 伺服器時,您將傳入一個選項以使用您之前設定的外部資料存儲。

  1. 連線到您準備執行 Rancher 伺服器的其中一個 Linux 節點。

  2. 在 Linux 節點上,執行此命令以啟動 K3s 伺服器並將其連線到外部資料存儲:

    curl -sfL https://get.k3s.io |  INSTALL_K3S_VERSION=<VERSION> sh -s - server \
    --datastore-endpoint="<DATASTORE_ENDPOINT>"

    其中 <DATASTORE_ENDPOINT> 是您的資料存儲的連線 URI。例如,如果您使用 MySQL,則為 mysql://username:password@tcp(hostname:3306)/database-name。有效的資料存儲包括 etcd、MySQL、PostgreSQL 或 SQLite(預設)。

    備註

    資料存儲端點也可以使用環境變數 $K3S_DATASTORE_ENDPOINT 傳入。

  3. 取得主伺服器節點令牌:

    cat /var/lib/rancher/k3s/server/token
  4. 在您的第二個 K3s 伺服器節點上執行命令:

      curl -sfL https://get.k3s.io |  INSTALL_K3S_VERSION=<VERSION> sh -s - server \
    --datastore-endpoint="<DATASTORE_ENDPOINT>" \
    --token "<MAIN_SERVER_NODE_TOKEN>"

2. 確認 K3s 正在執行​

要確認 K3s 已成功設定,請在任一 K3s 伺服器節點上執行以下命令:

sudo k3s kubectl get nodes

然後您應該會看到兩個具有 master 角色的節點:

ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-31-60-194 Ready master 44m v1.17.2+k3s1
ip-172-31-63-88 Ready master 6m8s v1.17.2+k3s1

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

sudo k3s kubectl get pods --all-namespaces

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

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

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

要使用此 kubeconfig 檔案,

  1. 安裝 kubectl,一個 Kubernetes 命令列工具。
  2. 複製位於 /etc/rancher/k3s/k3s.yaml 的檔案並將其儲存到本機上的 ~/.kube/config 目錄。
  3. 在 kubeconfig 檔案中,server 指令被定義為 localhost。將伺服器設定為您的負載平衡器的 DNS,參考連接埠 6443。(Kubernetes API 伺服器將透過連接埠 6443 連線,而 Rancher 伺服器將透過連接埠 80 和 443 連線。)以下是一個範例 k3s.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 來管理您的 K3s 叢集。如果您有多個 kubeconfig 檔案,您可以透過在使用 kubectl 時傳入檔案路徑來指定要使用哪一個:

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

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

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

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

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

ubuntu@ip-172-31-60-194:~$ sudo kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-6d684c7b5-bw59k 1/1 Running 0 8d
kube-system local-path-provisioner-58fb86bdfd-fmkvd 1/1 Running 0 8d
kube-system coredns-d798c9dd-ljjnf 1/1 Running 0 8d

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