本文說明如何將 1.16 至 1.29 版的 Seesaw 負載平衡器遷移至 MetalLB 負載平衡器。如果叢集版本為 1.30 以上,建議按照「規劃叢集遷移至建議功能」一文中的操作說明進行。
1.28 和 1.29:正式發布版
1.16:預先發布版
如要檢查 externalTrafficPolicy
,請執行下列指令:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get svc -A -o yaml | grep "externalTrafficPolicy: Local"
如要解決這個問題,請與 Google 支援團隊聯絡。
停機時間注意事項
遷移期間工作負載會停機。以下注意事項僅適用於非高可用性 (非 HA) 管理員叢集,因為 SeeSaw 負載平衡器不支援 HA 管理員叢集。
遷移管理員叢集時:
kubeception 使用者叢集會因
controlPlaneVIP
遷移而導致控制層停機。停機時間應少於 10 分鐘,但停機時間長度取決於您的基礎架構。管理員主節點需要重新建立,且
controlPlaneVIP
直接附加至 VM,因此管理員叢集控制層會暫停運作。停機時間應少於 20 分鐘,但停機時間長度取決於您的基礎架構。
遷移使用者叢集時,Seesaw 負載平衡器關閉電源後,MetalLB Pod 啟動前,VIP 會發生中斷情形。這項程序通常約需一分鐘。
使用者叢集遷移
您必須選擇節點集區,並啟用該集區以搭配使用 MetalLB。MetalLB 會部署在這個節點集區的節點上。
在使用者叢集設定檔中,選擇節點集區,並將 enableLoadBalancer
設為 true
:
nodePools: - name: pool-1 replicas: 3 enableLoadBalancer: true
更新叢集:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑
USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑
接著,從檔案中移除 Seesaw 區段,並新增 MetalLB 區段。
然後再次更新叢集:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
確認 MetalLB 元件是否順利執行:
kubectl --kubeconfig USER_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-[USERCLUSTERNAME].yaml
檔案中,找到 Seesaw VM 名稱的 vmnames
區段。
範例:使用者叢集、靜態 IP 位址
假設您有一個使用者叢集,其叢集節點使用靜態 IP 位址。假設叢集有兩個 LoadBalancer
類型的服務,且這些服務的外部位址為 172.16.21.41 和 172.16.21.45。
按照下列方式調整使用者叢集設定檔:
- 保留
network.hostConfig
部分。 - 將
loadBalancer.kind
設為MetalLB
。 - 移除「
loadBalancer.seesaw
」部分。 - 新增
loadBalancer.metalLB
區段。
範例:
network: hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0" loadBalancer: vips: controlPlaneVIP: "172.16.20.30" ingressVIP: "172.16.20.31" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.31/32" - "172.16.20.40 - 172.16.21.49"
上述範例的重點如下:
即使叢集不再使用 Seesaw 負載平衡器,仍需要
network.hostConfig
區段,因為叢集節點會使用靜態 IP 位址。ingressVIP
值會顯示在 MetalLB 位址集區中。現有
LoadBalancer
類型服務的外部 IP 位址 172.16.21.41 和 172.16.21.45 包含在 MetalLB 位址集區中。
範例:kubeception 使用者叢集、DHCP
假設您有一個使用者叢集,其叢集節點使用 DHCP。假設叢集有兩個 LoadBalancer
類型的服務,這些服務的外部位址分別是 172.16.21.61 和 172.16.21.65。
按照下列方式調整使用者叢集設定檔:
- 移除「
network.hostConfig
」部分。 - 將
loadBalancer.kind
設為MetalLB
。 - 移除「
loadBalancer.seesaw
」部分。 - 新增
loadBalancer.metalLB
區段。
範例:
enableControlplaneV2: false network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.50" ingressVIP: "172.16.20.51" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-2-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.51/32" - "172.16.20.60 - 172.16.21.69"
上述範例的重點如下:
叢集將不再使用 Seesaw 負載平衡器,且叢集節點不會使用靜態 IP 位址。因此不需要
network.hostConfig
區段。ingressVIP
值會顯示在 MetalLB 位址集區中。現有
LoadBalancer
類型服務的外部 IP 位址 172.16.21.61 和 172.16.21.65 包含在 MetalLB 位址集區中。
範例:Controlplane V2 使用者叢集、DHCP
假設您有一個已啟用 Controlplane V2 的使用者叢集,並使用 DHCP 做為工作站節點。假設叢集有兩個 LoadBalancer
類型的 Service,且這些 Service 的外部位址為 172.16.21.81 和 172.16.21.85。
按照下列方式調整使用者叢集設定檔:
- 保留
network.hostconfig
部分。 - 將
loadBalancer.kind
設為MetalLB
。 - 移除「
loadBalancer.seesaw
」部分。 - 新增
loadBalancer.metalLB
區段。
範例:
enableControlplaneV2: true network: hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0" loadBalancer: vips: controlPlaneVIP: "172.16.20.70" ingressVIP: "172.16.20.71" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-2-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.71/32" - "172.16.20.80 - 172.16.21.89"
上述範例的重點如下:
叢集將不再為工作站節點使用靜態 IP 位址,但會為控制層節點使用靜態 IP 位址。因此需要
network.hostConfig
區段。ingressVIP
值會顯示在 MetalLB 位址集區中。現有
LoadBalancer
類型服務的外部 IP 位址 172.16.21.81 和 172.16.21.85 包含在 MetalLB 位址集區中。
遷移管理員叢集
在管理員叢集設定檔中,將 loadBalancer.kind
設為 MetalLB
,並移除 loadBalancer.seesaw
區段。
更新叢集:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑
ADMIN_CLUSTER_CONFIG:管理員叢集設定檔的路徑
確認 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
區段。
範例:管理員叢集、靜態 IP 位址
假設您有一個管理員叢集,其叢集節點使用靜態 IP 位址。
按照下列方式調整管理員叢集設定檔:
- 保留
network.hostConfig
部分。 - 將
loadBalancer.kind
設為MetalLB
。 - 移除「
loadBalancer.seesaw
」部分。
範例:
network: hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0" loadBalancer: vips: controlPlaneVIP: "172.16.20.30" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072
上述範例的重點:
- 即使叢集不再使用 Seesaw 負載平衡器,仍需要
network.hostConfig
區段,因為叢集節點會使用靜態 IP 位址。
範例:管理員叢集、DHCP
假設您有一個管理員叢集,其叢集節點使用 DHCP。
按照下列方式調整管理員叢集設定檔:
- 移除「
network.hostConfig
」部分。 - 將
loadBalancer.kind
設為MetalLB
。 - 移除「
loadBalancer.seesaw
」部分。
範例:
network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.30" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072
上述範例的重點:
- 叢集將不再使用 Seesaw 負載平衡器,且叢集節點不會使用靜態 IP 位址。因此不需要
network.hostConfig
區段。
疑難排解
如果在使用者叢集遷移期間 gkectl update
失敗,且 MetalLB Pod 未在使用者叢集中執行,請手動啟動使用者叢集 Seesaw VM。這會重新建立目前所用 VIP 的流量。但如果 load-balancer-seesaw
Pod 未執行,Seesaw VM 可能無法為新建立的 VIP 提供服務。如果發生這種情況,請建立支援單。
如果管理員叢集遷移作業期間 gkectl update
失敗,且管理員叢集未執行 MetalLB Pod,請手動啟動管理員叢集 Seesaw VM。這或許能讓使用者叢集目前使用的控制層虛擬 IP 再次運作。但管理員叢集控制層的 VIP 本身可能無法運作。在這種情況下,請編輯管理員叢集的 kubeconfig 檔案,直接使用管理員叢集控制層節點的 IP 位址。
此外,在 kube-system
命名空間中,將 kube-apiserver
服務類型從 ClusterIP
變更為 LoadBalancer
。如有需要,請建立支援單。