將管理員叢集遷移至高可用性

本頁說明如何從 1.29 版的非高可用性 (HA) 管理員叢集,遷移至高可用性管理員叢集。

1.29:預先發布版
1.28:不適用

遷移前後,管理員叢集都有三個節點:

  • 非高可用性管理員叢集有一個控制層節點和兩個外掛程式節點。
  • 高可用性管理員叢集有三個控制層節點,沒有任何附加元件節點,可用性大幅提升。

為遷移作業做好準備

如果管理員叢集版本為 1.29.0-1.29.600 或 1.30.0-1.30.100,且在 1.14 以下版本中啟用永久加密 Secret,則必須先輪替加密金鑰,才能開始遷移。否則,新的高可用性管理員叢集將無法解密密鑰。

如要檢查叢集是否可能使用舊加密金鑰,請按照下列步驟操作:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret -n kube-system admin-master-component-options -o jsonpath='{.data.data}' | base64 -d | grep -oP '"GeneratedKeys":\[.*?\]'

如果輸出內容顯示空白金鑰 (如下例所示),您必須輪替加密金鑰。

"GeneratedKeys":[{"KeyVersion":"1","Key":""}]

視需要輪替加密金鑰

如果前一節的步驟顯示您需要輪替加密金鑰,請執行下列步驟:

  1. 管理員叢集設定檔中,遞增 keyVersion

  2. 更新管理員叢集:

    gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config ADMIN_CLUSTER_CONFIG
    

    這會建立與新版本號碼相符的新金鑰、重新加密每個密鑰,並安全地清除舊密鑰。後續所有新 Secret 都會使用新的加密金鑰加密。

程序總覽

遷移作業主要包括下列步驟:

  1. 編輯管理員叢集設定檔。

  2. 執行 gkectl update admin。 這個指令會執行下列動作:

    • 啟動外部叢集 (Kind),並確保目前的非高可用性管理員叢集處於正常狀態。

    • 使用高可用性規格和新的控制層 VIP,建立新的管理員叢集控制層。

    • 關閉現有的管理員叢集控制層。

    • 擷取現有管理員叢集的 etcd 快照。

    • 將舊的管理員叢集資料還原至新的高可用性控制層。

    • 協調還原的管理員叢集,以符合高可用性管理員叢集的最終狀態。

附註

  • 遷移期間,使用者叢集工作負載不會停機。

  • 遷移期間,管理員叢集控制層會暫停運作一段時間。(根據我們的測試,停機時間不到 18 分鐘,但實際時間取決於個別基礎架構環境)。

  • 非高可用性遷移至高可用性時,仍須符合高可用性管理員叢集的需求。舉例來說,高可用性管理員叢集不支援 Seesaw,因此如果您為非高可用性管理員叢集使用 Seesaw 負載平衡器,就必須先遷移至 MetalLB,才能遷移至高可用性管理員叢集。

  • 遷移作業順利完成後,系統會刻意保留非高可用性管理員主機 VM 等剩餘資源,以利進行失敗復原。

遷移前後

下表列出叢集遷移前後的主要差異:

遷移之前遷移之後
控制層節點備用資源數量13
加購節點20
控制層 Pod 副本
(kube-apiserver、kube-etcd 等)
13
資料磁碟大小100GB * 125GB * 3
資料磁碟路徑 由管理員叢集設定檔中的 vCenter.dataDisk 設定 自動產生於目錄下:/anthos/[ADMIN_CLUSTER_NAME]/default/[MACHINE_NAME]-data.vmdk
控制層 VIP 的負載平衡器 由管理員叢集設定檔中的 loadBalancer.kind 設定 keepalived + haproxy
管理員叢集控制層節點的 IP 位址分配 DHCP 或靜態,視 network.ipMode.type 而定 3 個靜態 IP 位址
kubeception 使用者叢集控制層節點分配 IP 位址 DHCP 或靜態,視 network.ipMode.type 而定 DHCP 或靜態,視 network.ipMode.type 而定
檢查點檔案預設為啟用未使用

編輯管理員叢集設定檔

您必須指定四個額外的 IP 位址:

  • 管理員叢集控制層節點的三個 IP 位址
  • 管理員叢集負載平衡器的新控制層 VIP

您也必須變更管理員叢集設定檔中的其他幾個欄位,詳情請參閱下列各節。

指定 IP 位址

  1. 在管理員叢集設定檔中,填入 network.controlPlaneIPBlock 區段。例如:

    controlPlaneIPBlock:
      netmask: "255.255.255.0"
      gateway: "172.16.20.1"
      ips:
      - ip: "172.16.20.50"
        hostname: "admin-cp-node-1"
      - ip: "172.16.20.51"
        hostname: "admin-cp-node-2"
      - ip: "172.16.20.52"
        hostname: "admin-cp-node-3"
    
  2. 填寫 hostconfig 區段。如果管理員叢集使用靜態 IP 位址,這個部分會預先填入資訊。例如:

    hostConfig:
      dnsServers:
      - 203.0.113.1
      - 198.51.100.1
      ntpServers:
      - 216.239.35.12
    
  3. loadBalancer.vips.controlPlaneVIP 的值替換為新的 VIP。例如:

    loadBalancer:
     vips:
       controlPlaneVIP: "172.16.20.59"
    

更新其他設定欄位

  1. adminMaster.replicas 設為 3

    adminMaster:
     replicas: 3
     cpus: 4
     memoryMB: 8192
    
  2. 移除 vCenter.dataDisk 欄位。如果是高可用性管理員叢集,控制平面節點使用的三個資料磁碟路徑,會自動在資料存放區的根目錄 anthos 下產生。

  3. 如果 loadBalancer.manualLB.controlPlaneNodePort 的值不是零,請設為 0

調整手動負載平衡器設定

如果管理員叢集使用手動負載平衡,請完成本節內容。 否則請略過這個部分。

針對您在 network.controlPlaneIPBlock 區段中指定的每個新控制層節點 IP 位址,在負載平衡器中設定下列對應:

(舊的 controlPlaneVIP:443) -> (NEW_NODE_IP_ADDRESS:舊的 controlPlaneNodePort)

這項對應可確保舊的控制層 VIP 在遷移期間正常運作。

更新管理員叢集

請檢查您所做的設定變更,因為這些欄位無法變更。確認變更正確無誤後,請更新叢集。

  1. 開始遷移:

    gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
    

    更改下列內容:

    • ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。

    • ADMIN_CLUSTER_CONFIG:管理員叢集設定檔的路徑

  2. 這個指令會顯示遷移作業的進度。

    出現提示時,請輸入 Y 繼續操作。

  3. 遷移完成後,管理員叢集 kubeconfig 檔案會自動更新,以使用新的控制層 VIP。舊版控制層 VIP 仍可運作,也能用來存取新的 HA 管理員叢集。