在 Kubernetes 叢集上安裝/升級 Rancher
在本節中,您將學習如何使用 Helm CLI 在 Kubernetes 叢集上部署 Rancher。
前置條件
Kubernetes 叢集
設定 Rancher 伺服器的本地 Kubernetes 叢集。
Rancher 可以安裝在任何 Kubernetes 叢集上。此叢集可以使用上游 Kubernetes,也可以使用 Rancher 的 Kubernetes 發行版之一,或者可以是來自提供商(例如 Amazon EKS)的託管 Kubernetes 叢集。
為了幫助設定 Kubernetes 叢集,我們提供了這些教學:
- K3s: 有關安裝 K3s Kubernetes 叢集的教學,請參閱此頁面。有關設定高可用性 K3s 叢集的基礎架構的幫助,請參閱此頁面。
- RKE2: 有關安裝 RKE2 Kubernetes 叢集的教學,請參閱此頁面。有關設定高可用性 RKE2 叢集的基礎架構的幫助,請參閱此頁面。
- Amazon EKS: 有關如何在 Amazon EKS 上安裝 Rancher 的詳細資訊,包括如何安裝 Ingress controller 以便可以存取 Rancher 伺服器,請參閱此頁面。
- AKS: 有關如何使用 Azure Kubernetes Service 安裝 Rancher 的詳細資訊,包括如何安裝 Ingress controller 以便可以存取 Rancher 伺服器,請參閱此頁面。
- GKE: 有關如何使用 Google Kubernetes Engine 安裝 Rancher 的詳細資訊,包括如何安裝 Ingress controller 以便可以存取 Rancher 伺服器,請參閱此頁面。 GKE 在建立 Kubernetes 叢集時有兩種操作模式:Autopilot 和 Standard 模式。Autopilot 模式的叢集設定對編輯 kube-system 命名空間有限制。然而,Rancher 在安裝過程中需要在 kube-system 命名空間中建立資源。因此,您將無法在以 Autopilot 模式建立的 GKE 叢集上安裝 Rancher。
Ingress Controller
Rancher UI 和 API 是透過 Ingress 公開的。這意味著您安裝 Rancher 的 Kubernetes 叢集必須包含一個 Ingress controller。
對於 RKE2 和 K3s 安裝,您不必手動安裝 Ingress controller,因為預設會安裝一個。
對於預設不包含 Ingress Controller 的發行版,例如託管的 Kubernetes 叢集(如 EKS、GKE 或 AKS),您必須先部署一個 Ingress controller。請注意,Rancher Helm chart 預設不在 ingress 上設定 ingressClassName。因此,您必須將 Ingress controller 設定為也監視沒有 ingressClassName 的 ingress。
範例包含在上面的 Amazon EKS、AKS 和 GKE 教學中。
CLI 工具
設定 Kubernetes 叢集需要以下 CLI 工具。請確保這些工具已安裝並在您的 $PATH 中可用。
- kubectl - Kubernetes 命令列工具。
- helm - Kubernetes 的套件管理。請參閱 Helm 版本要求以選擇用於安裝 Rancher 的 Helm 版本。請參閱 Helm 專案提供的說明以了解您特定的平台。
安裝 Rancher Helm Chart
Rancher 使用 Kubernetes 的 Helm 套件管理器進行安裝。Helm chart 為 Kubernetes YAML manifest 文件提供模板語法。使用 Helm,我們可以建立可設定的部署,而不僅僅是使用靜態檔案。
對於沒有直接網際網路存取的系統,請參閱 離線環境:Kubernetes 安裝。
要選擇要安裝的 Rancher 版本,請參閱選擇 Rancher 版本。
要選擇用於安裝 Rancher 的 Helm 版本,請參閱 Helm 版本要求
安裝說明假設您使用的是 Helm 3。
要設定 Rancher,
- 新增 Helm chart repository
- 為 Rancher 建立一個命名空間
- 選擇您的 SSL 設定
- 安裝 cert-manager(除非您自帶憑證,或 TLS 將在負載平衡器上終止)
- 使用 Helm 和您選擇的憑證選項安裝 Rancher
- 驗證 Rancher 伺服器已成功部署
- 儲存您的選項
1. 新增 Helm Chart Repository
使用 helm repo add 命令新增包含用於安裝 Rancher 的 chart 的 Helm chart repository。有關 repository 選擇以及哪個最適合您的使用案例的更多資訊,請參閱選擇 Rancher 版本。
- Latest:建議用於試用最新功能
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest - Stable:建議用於生產環境
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable - Alpha:即將發布版本的實驗性預覽。
注意:不支援升級到 Alpha、從 Alpha 升級或在 Alpha 之間升級。
helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha
2. 為 Rancher 建立一個命名空間
我們需要定義一個 Kubernetes 命名空間,Chart 建立的資源應該安裝在其中。這應該始終是 cattle-system:
kubectl create namespace cattle-system
3. 選擇您的 SSL 設定
Rancher 管理伺服器設計為預設安全,並需要 SSL/TLS 設定。
如果您想在外部終止 SSL/TLS,請參閱在外部負載平衡器上終止 TLS。如該頁面所述,此選項確實對 TLS 驗證有額外要求。
在 Rancher 伺服器上用於 TLS 終止的憑證來源有三個建議選項:
- Rancher 產生的 TLS 憑證: 在這種情況下,您需要將
cert-manager安裝到叢集中。Rancher 利用cert-manager來簽發和維護其憑證。Rancher 將產生自己的 CA 憑證,並使用該 CA 簽署憑證。cert-manager然後負責管理該憑證。當agent-tls-mode設定為 strict 時,不需要額外的操作。有關此設定的更多資訊,請參閱 Agent TLS 強制執行。 - Let's Encrypt: Let's Encrypt 選項也使用
cert-manager。但是,在這種情況下,cert-manager 與用於 Let's Encrypt 的特殊 Issuer 結合使用,該 Issuer 執行獲取 Let's Encrypt 簽發憑證所需的所有操作(包括請求和驗證)。此設定使用 HTTP 驗證(HTTP-01),因此負載平衡器必須具有公共 DNS 記錄並可從網際網路存取。當將agent-tls-mode設定為strict時,您還必須指定--privateCA=true並上傳 Let's Encrypt CA,如新增 TLS Secrets 中所述。有關此設定的更多資訊,請參閱 Agent TLS 強制執行。 - 自帶憑證: 此選項允許您自帶公共或私有 CA 簽署的憑證。Rancher 將使用該憑證來保護 websocket 和 HTTPS 流量。在這種情況下,您必須將此憑證(及相關金鑰)作為 PEM 編碼檔案上傳,檔案名稱為
tls.crt和tls.key。如果您使用私有 CA,您還必須上傳該憑證。這是因為您的節點可能不信任此私有 CA。Rancher 將獲取該 CA 憑證,並從中產生校驗和,各種 Rancher 元件將使用該校驗和來驗證它們與 Rancher 的連線。如果agent-tls-mode設定為strict,則必須上傳 CA,以便下游叢集可以成功連線。有關此設定的更多資訊,請參閱 Agent TLS 強制執行。
| 設定 | Helm Chart 選項 | 需要 cert-manager |
|---|---|---|
| Rancher 產生的憑證(預設) | ingress.tls.source=rancher | 是 |
| Let's Encrypt | ingress.tls.source=letsEncrypt | 是 |
| 來自檔案的憑證 | ingress.tls.source=secret | 否 |
4. 安裝 cert-manager
如果您自帶憑證檔案(選項
ingress.tls.source=secret),或者您使用在外部負載平衡器上終止 TLS,則應跳過此步驟。
只有在使用 Rancher 產生的 CA 簽發的憑證(ingress.tls.source=rancher)或請求 Let's Encrypt 簽發的憑證(ingress.tls.source=letsEncrypt)時,才需要此步驟。
點擊展開
cert-manager 最近的變更需要升級。如果您正在升級 Rancher 並使用早於 v0.11.0 的 cert-manager 版本,請參閱我們的升級文件。
這些說明改編自官方 cert-manager 文件。
要查看有關如何自訂 cert-manager 安裝的選項(包括叢集使用 PodSecurityPolicies 的情況),請參閱 cert-manager 文件。
# 如果您已手動安裝 CRD,而不是在 Helm 安裝命令中將 `installCRDs` 或 `crds.enabled` 設定為 `true`,則應在升級 Helm chart 之前升級 CRD 資源:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml
# 新增 Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io
# 更新您的本地 Helm chart repository 快取
helm repo update
# 安裝 cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true
安裝 cert-manager 後,您可以透過檢查 cert-manager 命名空間中正在執行的 pod 來驗證它是否正確部署:
kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
5. 使用 Helm 和您選擇的憑證選項安裝 Rancher
安裝 Rancher 的確切命令取決於憑證設定。
但是,無論憑證設定如何,cattle-system 命名空間中 Rancher 安裝的名稱應始終為 rancher。
此安裝 Rancher 的最終命令需要一個將流量轉發到 Rancher 的網域名稱。如果您使用 Helm CLI 設定概念驗證,則可以在傳遞 hostname 選項時使用假網域名稱。假網域名稱的範例為 <IP_OF_LINUX_NODE>.sslip.io,這將在執行 Rancher 的 IP 上公開 Rancher。生產安裝將需要真實的網域名稱。
- Rancher-generated Certificates
- Let's Encrypt
- Certificates from Files
預設情況下,Rancher 產生 CA 並使用 cert-manager 來簽發用於存取 Rancher 伺服器介面的憑證。
因為 rancher 是 ingress.tls.source 的預設 選項,所以在執行 helm install 命令時我們不指定 ingress.tls.source。
- 將
hostname設定為您指向負載平衡器的 DNS 名稱。 - 將
bootstrapPassword設定為admin使用者的唯一內容。 - 要安裝特定的 Rancher 版本,請使用
--version標誌,例如:--version 2.7.0
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin
如果您正在安裝 alpha 版本,Helm 需要在安裝命令中新增 --devel 選項:
helm install rancher rancher-alpha/rancher --devel
等待 Rancher 部署完成:
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
此選項使用 cert-manager 自動請求和續訂 Let's Encrypt 憑證。這是一項免費服務,可為您提供有效的憑證,因為 Let's Encrypt 是受信任的 CA。
您需要開放埠 80,因為 HTTP-01 挑戰只能在埠 80 上完成。
在以下命令中,
hostname設定為公共 DNS 記錄,- 將
bootstrapPassword設定為admin使用者的唯一內容。 ingress.tls.source設定為letsEncryptletsEncrypt.email設定為用於有關您的憑證的通訊的電子郵件地址(例如,到期通知)- 將
letsEncrypt.ingress.class設定為您的 ingress controller,例如traefik、nginx、haproxy等。
當 agent-tls-mode 設定為 strict(從 v2.9.0 開始新安裝 Rancher 的預設值)時,您必須提供 privateCA=true chart 值(例如透過 --set privateCA=true)並上傳 Let's Encrypt Certificate Authority,如新增 TLS Secrets 中所述。有關識別 Let's Encrypt Root CA 的資訊可以在 Let's Encrypt 文件中找到。如果您不上傳 CA,則 Rancher 可能無法連線到新的或現有的下游叢集。
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=me@example.org \
--set letsEncrypt.ingress.class=nginx
如果您正在安裝 alpha 版本,Helm 需要在安裝命令中新增 --devel 選項:
helm install rancher rancher-alpha/rancher --devel
等待 Rancher 部署完成:
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
在此選項中,Kubernetes secret 是從您自己的憑證為 Rancher 建立的。
當您執行此命令時,hostname 選項必須與伺服器憑證中的 Common Name 或 Subject Alternative Names 條目相符,否則 Ingress controller 將無法正確設定。
雖然技術上需要 Subject Alternative Names 中的條目,但擁有相符的 Common Name 可以最大限度地提高與舊版瀏覽器和應用程式的相容性。
如果您想檢查憑證是否正確,請參閱如何檢查伺服器憑證中的 Common Name 和 Subject Alternative Names?
- 設定
hostname。 - 將
bootstrapPassword設定為admin使用者的唯一內容。 - 將
ingress.tls.source設定為secret。
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin \
--set ingress.tls.source=secret
如果您正在安裝 alpha 版本,Helm 需要在安裝命令中新增 --devel 選項:
helm install rancher rancher-alpha/rancher --devel
如果您使用的是私有 CA 簽署的憑證,請在命令中新增 --set privateCA=true:
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin \
--set ingress.tls.source=secret \
--set privateCA=true
現在 Rancher 已部署,請參閱新增 TLS Secrets 以發布憑證檔案,以便 Rancher 和 Ingress controller 可以使用它們。
Rancher chart 設定有許多選項可以自訂安裝以適合您的特定環境。以下是一些常見的進階場景。
有關選項的完整清單,請參閱 Chart 選項。
6. 驗證 Rancher 伺服器已成功部署
新增 secret 後,檢查 Rancher 是否成功部署:
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
如果您看到以下錯誤:error: deployment "rancher" exceeded its progress deadline,您可以透過執行以下命令檢查部署的狀態:
kubectl -n cattle-system get deploy rancher
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rancher 3 3 3 3 3m
它應該顯示 DESIRED 和 AVAILABLE 的計數相同。
7. 儲存您的選項
確保儲存您使用的 --set 選項。當您使用 Helm 將 Rancher 升級到新版本時,您將需要使用相同的選項。
完成
就是這樣。您應該有一個正常運作的 Rancher 伺服器。
在網頁瀏覽器中,前往將流量轉發到負載平衡器的 DNS 名稱。然後您應該會看到色彩繽紛的登入頁面。
無法運作?請查看疑難排解頁面