將管理員叢集遷移至建議功能

總覽

本頁說明如何將 1.30 以上版本的管理員叢集,遷移至下列建議功能:

  • 負載平衡器設定:

    • 整合式 F5 BIG-IP 負載平衡器設定,請參閱 ManualLB。

      或

    • 套裝組合的 Seesaw 負載平衡器至 MetalLB。

  • 從非高可用性管理員叢集遷移至高可用性 (HA) 管理員叢集。 使用相同數量的 VM 時,高可用性管理員叢集可大幅提升可用性。非 HA 管理員叢集有一個控制層節點和兩個外掛程式節點。高可用性管理員叢集的三個節點都是控制層節點,沒有附加元件節點。

本文適用於負責管理基礎技術架構生命週期的 IT 管理員和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。

如要進一步瞭解遷移規劃,請參閱「規劃叢集遷移至建議功能」。

最佳做法

如果您有多個環境 (例如測試、開發和正式環境),建議先遷移最不重要的環境,例如測試環境。確認遷移作業成功後,請針對每個環境重複執行這項程序,最後再遷移正式環境。這樣您就能驗證每次遷移作業是否成功,並確保工作負載正常運作,再移至下一個更重要的環境。

需求條件

  • 管理員叢集必須為 1.30 以上版本。
  • 管理員叢集管理的所有使用者叢集,都必須已遷移至建議功能,如「將使用者叢集遷移至建議功能」一文所述。

規劃遷移期間的停機時間

遷移期間,控制層會暫停服務一段時間,非高可用性管理員叢集的 Kubernetes API 存取權會暫時無法使用約 20 分鐘,但高可用性管理員叢集的 Kubernetes 控制層仍可透過 F5 存取。遷移期間,Kubernetes 資料層會繼續穩定運作。

寄件者 收件者 Kubernetes API 存取權 使用者工作負載

使用 F5 BIG-IP 的 HA 管理員叢集

使用 ManualLB 的高可用性管理員叢集

不受影響

不受影響

非高可用性管理員叢集,且具有 MetalLB 或 ManualLB

使用相同類型負載平衡器的高可用性管理員叢集

受影響

不受影響

使用 F5 BIG-IP 的非高可用性管理員叢集

使用 ManualLB 的高可用性管理員叢集

受影響

不受影響

使用 Seesaw 的非高可用性管理員叢集

使用 MetalLB 的 HA 管理員叢集

受影響

不受影響

  • 受影響:遷移期間服務會明顯中斷。
  • 不受影響:服務不會中斷,或中斷時間極短,幾乎不會造成影響。

為遷移作業做好準備

如果您的管理員叢集不是 HA,請按照本節中的步驟,準備遷移至 HA 管理員叢集。如果管理員叢集已是高可用性叢集,請跳至下一節「準備遷移負載平衡器」。

分配額外 IP 位址

從非高可用性遷移至高可用性管理員叢集時,請額外分配四個 IP 位址。請確認這些 IP 位址與現有管理員叢集節點位於相同 VLAN,且未由任何現有節點使用:

更新防火牆規則

將管理員叢集從非高可用性遷移至高可用性時,請更新管理員叢集上的防火牆規則。這樣一來,控制層節點新分配到的 IP 位址就能連上所有必要 API 和其他目的地,詳情請參閱「管理員叢集的防火牆規則」。

準備遷移負載平衡器

如果管理員叢集使用整合式 F5 BIG-IP 設定或隨附的 Seesaw 負載平衡器,請按照本節步驟,對管理員叢集設定檔進行必要變更。否則,請跳至下一節「準備從非高可用性遷移至高可用性」。

F5 BIG-IP

如果管理員叢集使用整合式 F5 BIG-IP 設定,請對管理員叢集設定檔進行下列變更:

  1. 將 loadBalancer.kind 欄位設為 "ManualLB"。
  2. 設定或保留 loadBalancer.vips.controlPlaneVIP 欄位的值。如果管理員叢集已是高可用性,請保留相同值。如果您要從非 HA 管理員叢集遷移至 HA 管理員叢集,請將 loadBalancer.vips.controlPlaneVIP 欄位的值變更為您分配的 IP 位址。
  3. 刪除整個 loadBalancer.f5BigIP 區段。

下列管理員叢集設定檔範例顯示這些變更:

loadBalancer:
vips:
  controlPlaneVIP: 192.0.2.6
kind: "F5BigIP" "ManualLB"
f5BigIP:
    address: "203.0.113.20"
  credentials:
    fileRef:
      path: ""my-config-folder/user-creds.yaml"
      entry: "f5-creds"
  partition: "my-f5-user-partition"
  

Seesaw

如果管理員叢集使用 Seesaw 負載平衡器,請對管理員叢集設定檔進行下列變更:

  1. 將 loadBalancer.kind 欄位設為「MetalLB」。
  2. 保留 network.hostConfig 部分。
  3. 設定或保留 loadBalancer.vips.controlPlaneVIP]5 欄位的值。 如果管理員叢集已是高可用性,您可以保留相同值。如果從非高可用性管理員叢集遷移至高可用性管理員叢集,請將 loadBalancer.vips.controlPlaneVIP 欄位的值變更為您分配的 IP 位址。
  4. 移除 loadBalancer.seesaw 區段。

下列管理員叢集設定檔範例顯示這些變更:

network:
hostConfig:
  dnsServers:
  - "203.0.113.1"
  - "203.0.113.2"
  ntpServers:
  - "203.0.113.3"
loadBalancer:
vips:
  controlPlaneVIP: 192.0.2.6
kind: "MetalLB" "Seesaw"
seesaw:
  ipBlockFilePath: "user-cluster-1-ipblock.yaml"
  vrid: 1
  masterIP: ""
  cpus: 4
  memoryMB: 3072

準備從非 HA 遷移至 HA

如果管理員叢集不是高可用性叢集,請按照本節步驟操作,準備遷移至高可用性叢集。

如果管理員叢集已是 HA 叢集,請跳至下一節「遷移管理員叢集」。

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

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

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. 在 network.controlPlaneIPBlock 中填入您為控制層節點分配的三個 IP 位址。
  2. 請確認已填寫「network.hostConfig」部分。本節包含叢集節點 VM 使用的 NTP 伺服器、DNS 伺服器和 DNS 搜尋網域相關資訊。
  3. 請確認您已將 loadBalancer.vips.controlPlaneVIP 的值替換為您分配的 IP 位址。
  4. 將 adminMaster.replicas 設為 3。
  5. 移除 vCenter.dataDisk 欄位。對於 HA 管理員叢集,控制平面節點使用的三個資料磁碟路徑,會自動在資料存放區的根目錄 anthos 下產生。
  6. 如果 loadBalancer.kind 設為 "ManualLB",請將 loadBalancer.manualLB.controlPlaneNodePort 設為 0。

下列管理員叢集設定檔範例顯示這些變更:

vCenter:
  address: "my-vcenter-server.my-domain.example"
  datacenter: "my-data-center"
  dataDisk: "xxxx.vmdk"
...
network:
  hostConfig:
    dnsServers:
    - 203.0.113.1
    - 203.0.113.2
    ntpServers:
    - 203.0.113.3
  ...
  controlPlaneIPBlock:
    netmask: "255.255.255.0"
    gateway: "198.51.100.1"
    ips:
    - ip: "192.0.2.1"
      hostname: "admin-cp-hostname-1"
    - ip: "192.0.2.2"
      hostname: "admin-cp-hostname-2"
    - ip: "192.0.2.3"
      hostname: "admin-cp-hostname-3"
...

...
loadBalancer:
  vips:
    controlPlaneVIP: 192.0.2.6 192.0.2.50
  kind: ManualLB
  manualLB:
    controlPlaneNodePort: 30003 0

...
adminMaster:
  replicas: 3
  cpus: 4
  memoryMB: 8192
...

視需要調整負載平衡器中的對應

如果管理員叢集使用手動負載平衡,請完成本節中的步驟。

如果從整合式 F5 BIG-IP 遷移至手動負載平衡,或是遷移至 MetalLB,請跳至下一節「遷移管理員叢集」。

針對您在 network.controlPlaneIPBlock 專區中指定的三個新控制層節點 IP 位址,在外部負載平衡器 (例如 F5 BIG-IP 或 Citrix) 中設定下列對應:

(old controlPlaneVIP:443) -> (NEW_NODE_IP_ADDRESS:old controlPlaneNodePort)

這樣可確保舊的控制層 VIP 在遷移期間繼續運作。

遷移管理員叢集

請仔細檢查您對管理員叢集設定檔所做的所有變更。除了更新遷移的叢集外,所有設定都無法變更。

更新叢集:

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

Replace the following:

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

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

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

從非高可用性遷移至高可用性時,舊的控制層虛擬 IP 位址會繼續運作,可用於存取新的高可用性管理員叢集。遷移完成後,管理員叢集 kubeconfig 檔案會自動更新,以使用新的控制平面 VIP。

遷移後

更新完成後,請確認管理員叢集正在執行:

kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG

負載平衡器遷移

如果您已遷移負載平衡器,請確認負載平衡器元件是否正常運作。

MetalLB

如果您已遷移至 MetalLB,請使用下列指令,確認 MetalLB 元件是否順利運作:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
    --namespace kube-system --selector app=metallb

輸出內容會顯示 MetalLB 控制器和揚聲器的 Pod。例如:

metallb-controller-744884bf7b-rznr9 1/1 Running
metallb-speaker-6n8ws 1/1 Running
metallb-speaker-nb52z 1/1 Running
metallb-speaker-rq4pp 1/1 Running

遷移作業完成後,請刪除管理員叢集已關閉電源的 Seesaw VM。您可以在設定目錄的 seesaw-for-gke-admin.yaml 檔案中找到 Seesaw VM 名稱,位於 vmnames 區段。

ManualLB

將叢集更新為使用手動負載平衡後,叢集的流量不會中斷。這是因為現有的 F5 資源仍然存在,您可以執行下列指令來確認:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \

預期輸出內容如下:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-xt697x   Opaque   4      13h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         13h
kube-system   serviceaccount/load-balancer-f5   0         13h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           13h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           13h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         13h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   13h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T04:37:34Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T04:37:34Z