跳至主要内容

將 Rancher 遷移到新叢集

如果你要將 Rancher 遷移到新的 Kubernetes 叢集,則不需要先在新叢集上安裝 Rancher。如果將 Rancher 還原到已安裝 Rancher 的新叢集,可能會造成問題。

先決條件​

這些說明假設你已經建立備份,並且已經安裝了將部署 Rancher 的新 Kubernetes 叢集。該備份特定於 Rancher 應用程式,只能遷移 Rancher 應用程式。

警告

你必須使用在原始叢集中設定為伺服器 URL 的相同主機名稱。如果不這樣做,下游叢集將在 UI 的叢集管理頁面中顯示為不可用,並且你將無法點擊進入叢集或點擊叢集的探索按鈕。

Rancher 版本必須為 v2.5.0 及以上

Rancher 可以安裝在任何 Kubernetes 叢集上,包括託管的 Kubernetes 叢集,例如 Amazon EKS 叢集。如需安裝 Kubernetes 的協助,請參閱 Kubernetes 發行版的文件。也可以使用 Rancher 建立的 Kubernetes 發行版,例如但不限於 RKE 或 K3s。

由於 Rancher 可以安裝在任何 Kubernetes 叢集上,因此你可以使用此備份和還原方法將 Rancher 從一個 Kubernetes 叢集遷移到任何其他 Kubernetes 叢集。此方法僅遷移與 Rancher 相關的資源,不會影響叢集上的其他應用程式。請參閱支援矩陣以確定你的 Rancher 版本支援哪些 Kubernetes 叢集類型和版本。

1. 安裝 rancher-backup Helm chart​

安裝 rancher-backup chart:

  1. 新增 Helm 儲存庫:

    helm repo add rancher-charts https://charts.rancher.io
    helm repo update
  2. 設定 CHART_VERSION 變數,選擇與你的 Rancher 版本相容的 rancher-backup chart 版本。請參閱支援矩陣中的 Rancher Apps / Cluster Tools 部分,以查看支援哪些 rancher-backup 版本:

    CHART_VERSION=<chart-version>
  3. 安裝 charts:

    helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace --version $CHART_VERSION
    helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system --version $CHART_VERSION
    備註

    上述假設環境具有到 Docker Hub 的出站連線。

    對於離線環境,在安裝 rancher-backup Helm chart 時,請使用以下 Helm 值從你的私有 registry 拉取 backup-restore-operator 和 kubectl 映像檔。

    --set image.repository <registry>/rancher/backup-restore-operator --set global.kubectl.repository=<registry>/rancher/kubectl

2. 使用 Restore 自訂資源從備份還原​

  1. 當使用 S3 物件儲存作為需要憑證的還原的備份來源時,在此叢集中建立一個 Secret 物件以新增 S3 憑證。secret 資料必須有兩個鍵 - accessKey 和 secretKey,其中包含 S3 憑證。

    secret 可以在任何命名空間中建立,此範例使用預設命名空間。

    kubectl create secret generic s3-creds \
    --from-literal=accessKey=<access key> \
    --from-literal=secretKey=<secret key>
    備註

    在上述命令中,將你的存取金鑰和秘密金鑰新增為 accessKey 和 secretKey 的值。

  2. 建立一個 Restore 物件:

    在遷移期間,prune 必須設定為 false。請參閱以下範例:

    # restore-migration.yaml
    apiVersion: resources.cattle.io/v1
    kind: Restore
    metadata:
    name: restore-migration
    spec:
    backupFilename: backup-b0450532-cee1-4aa1-a881-f5f48a007b1c-2020-09-15T07-27-09Z.tar.gz
    prune: false
    encryptionConfigSecretName: encryptionconfig
    storageLocation:
    s3:
    credentialSecretName: s3-creds
    credentialSecretNamespace: default
    bucketName: backup-test
    folder: ecm1
    region: us-west-2
    endpoint: s3.us-west-2.amazonaws.com
    重要

    只有在你的備份是在啟用加密的情況下建立的,才應使用 encryptionConfigSecretName 欄位。

    如果適用,請提供包含加密設定檔案的 Secret 物件名稱。如果你只有加密設定檔案,但在此叢集中尚未建立 secret,請使用以下步驟建立 secret:

    1. 建立一個加密設定檔案

    2. 下面的命令使用名為 encryption-provider-config.yaml 的檔案,並使用 --from-file 旗標。一旦將 EncryptionConfiguration 儲存在名為 encryption-provider-config.yaml 的檔案中,就執行以下命令:

      kubectl create secret generic encryptionconfig \
      --from-file=./encryption-provider-config.yaml \
      -n cattle-resources-system
  3. 套用清單並監控還原狀態:

    1. 套用 Restore 物件資源:

      kubectl apply -f restore-migration.yaml
    2. 監看還原狀態:

      kubectl get restore
    3. 監看還原日誌:

      kubectl logs -n cattle-resources-system --tail 100 -f -l app.kubernetes.io/instance=rancher-backup
    4. 一旦 Restore 資源的狀態為 Completed,你就可以繼續安裝 cert-manager 和 Rancher。

重要:

在任何兩個不同的 Kubernetes 發行版之間遷移 Rancher(例如從 K3s 到 RKE2)時,必須修改代表本機叢集的物件,以允許 Rancher 偵測新發行版。在還原完成後,並且在新叢集上啟動 Rancher 之前,編輯本機叢集物件:

kubectl edit clusters.management.cattle.io local
  1. 將 status.driver 的值變更為 imported。
  2. 移除 status.provider。
  3. 移除整個 status.version 映射。
  4. 移除 metadata.labels 中鍵為 provider.cattle.io 的標籤。
  5. 移除 metadata.annotations 中鍵為 management.cattle.io/current-cluster-controllers-version 的註解。
  6. 移除整個 spec.rke2Config 或 spec.k3sConfig 映射(如果存在)。
  7. 儲存變更。

請注意,移除 spec.rke2Config 或 spec.k3sConfig 將清除本機叢集的發行版特定升級設定。如果新發行版可為本機叢集設定,則可以重新設定。

3. 安裝 cert-manager​

按照文件中關於在 Kubernetes 上安裝 cert-manager 的步驟來安裝 cert-manager。

4. 使用 Helm 啟動 Rancher​

使用與第一個叢集上相同的 Helm 版本來安裝 Rancher。

helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=<與第一個 Rancher 伺服器的伺服器 URL 相同的主機名稱> \
--version x.y.z
備註

如果原始 Rancher 環境正在執行,你可以使用原始環境的 kubeconfig 收集目前的值:

helm get values rancher -n cattle-system -o yaml > rancher-values.yaml

這些值可以使用 rancher-values.yaml 檔案重複使用。請務必將 kubeconfig 切換到新的 Rancher 環境。

helm install rancher rancher-latest/rancher -n cattle-system -f rancher-values.yaml --version x.y.z

5. 將流量重新導向到新叢集​

遷移完成後,更新你的 DNS 記錄和任何負載平衡器,以便將流量正確路由到已遷移的叢集。請記住,你必須使用在原始叢集中設定為伺服器 URL 的相同主機名稱。

有關如何將流量重新導向到已遷移叢集的完整說明因你的特定環境而異。有關更多詳細資訊,請參閱你的託管提供者的文件。

6. 縮減原始 Rancher 執行個體​

將流量重新導向到新的 Rancher 環境後,將原始 Rancher 執行個體縮減到 0 個副本,使其不再聯繫你的受管叢集。

讓舊伺服器繼續執行可能會導致代理程式繼續聯繫原始的 server-url,這通常會導致叢集在新環境中卡在更新中。

kubectl scale deployment rancher -n cattle-system --replicas=0

如果你最初在 Docker 中執行 Rancher:

docker stop <original-rancher-container>
備註

如果你希望保持原始 Rancher 環境執行,你也可以在連線到 Rancher 環境的每個叢集上重新啟動 cattle-cluster-agent pods。

kubectl rollout restart deployment cattle-cluster-agent -n cattle-system

這會觸發代理程式的滾動重新啟動,使其重新建立與新 Rancher 環境的連線。