使用多叢集 Ingress 升級多叢集 GKE 環境

Last reviewed 2022-12-15 UTC

本教學課程說明如何使用多叢集 Ingress 升級多叢集 Google Kubernetes Engine (GKE) 環境。本教學課程延續使用多叢集 Ingress 升級多叢集 GKE 的內容,更詳細地說明相關程序、架構和術語。建議您先閱讀概念文件,再開始本教學課程。

如要詳細比較多叢集 Ingress (MCI)、多叢集閘道 (MCG) 和負載平衡器與獨立網路端點群組 (LB 和獨立 NEG),請參閱為 GKE 選擇多叢集負載平衡 API

本文適用對象為負責維護 GKE 叢集車隊的 Google Cloud 管理員。

建議您自動升級 GKE 叢集。自動升級是全代管功能,可根據Google Cloud決定的發布時間表,自動更新叢集 (控制層和節點)。這項作業不需要操作人員介入。不過,如果您想進一步掌控叢集的升級方式和時間,本教學課程將逐步說明如何升級多個叢集,讓應用程式在所有叢集上執行。接著,系統會使用多叢集 Ingress 逐一排空叢集,然後再升級。

架構

本教學課程使用下列架構。共有三個叢集:兩個叢集 (bluegreen) 是相同的叢集,部署的應用程式也相同,一個叢集 (ingress-config) 則做為控制平面叢集,用於設定多叢集 Ingress。在本教學課程中,您將範例應用程式部署至兩個應用程式叢集 (bluegreen 叢集)。

兩個相同叢集和一個控制層叢集的架構。

目標

  • 建立三個 GKE 叢集,並註冊為機群。
  • 將一個 GKE 叢集 (ingress-config) 設定為中央設定叢集。
  • 將範例應用程式部署至其他 GKE 叢集。
  • 設定多叢集 Ingress,將用戶端流量傳送至在兩個應用程式叢集上執行的應用程式。
  • 為應用程式設定負載產生器,並設定監控功能。
  • 從多叢集 Ingress 中移除 (排空) 一個應用程式叢集,然後升級排空的叢集。
  • 使用多叢集 Ingress 將流量溢回升級後的叢集。

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

  1. 本教學課程需要設定多叢集 Ingress, 以便設定下列項目:
    • 兩個以上的叢集具有相同應用程式,例如命名空間、部署作業和服務,且這些應用程式在所有叢集上執行。
    • 所有叢集都已停用自動升級功能。
    • 叢集是使用別名 IP 位址範圍的虛擬私有雲原生叢集
    • 啟用 HTTP 負載平衡 (預設為啟用)。
    • gcloud --version必須為 369 以上。 GKE 叢集註冊步驟會因這個版本而異。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. 設定您的預設專案:

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud config set project ${PROJECT}
    
  6. 啟用 GKE、Hub 和 multiclusteringress API:

    gcloud services enable container.googleapis.com \
                           gkehub.googleapis.com \
                           multiclusteringress.googleapis.com \
                           multiclusterservicediscovery.googleapis.com
    

設定環境

  1. 在 Cloud Shell 中複製存放區,取得本教學課程的檔案:

    cd ${HOME}
    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  2. 建立 WORKDIR 目錄:

    cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/
    export WORKDIR=`pwd`
    

建立 GKE 叢集並向 Hub 註冊

在本節中,您將建立三個 GKE 叢集,並向 GKE Enterprise Hub 註冊這些叢集。

建立 GKE 叢集

  1. 在 Cloud Shell 中建立三個 GKE 叢集:

    gcloud container clusters create ingress-config --location us-west1-a \
    --release-channel=None --no-enable-autoupgrade --num-nodes=4 \
    --enable-ip-alias --workload-pool=${PROJECT}.svc.id.goog --quiet --async
    gcloud container clusters create blue --location us-west1-b --num-nodes=3 \
    --release-channel=None --no-enable-autoupgrade --enable-ip-alias \
    --workload-pool=${PROJECT}.svc.id.goog --quiet --async
    gcloud container clusters create green --location us-west1-c --num-nodes=3 \
    --release-channel=None --no-enable-autoupgrade --enable-ip-alias \
    --workload-pool=${PROJECT}.svc.id.goog --quiet
    

    在本教學課程中,您會在單一區域的三個不同區域 (us-west1-aus-west1-bus-west1-c) 中建立叢集。如要進一步瞭解地區和區域,請參閱地理位置與地區

  2. 稍候幾分鐘,直到所有叢集建立成功,然後確認叢集正在執行:

    gcloud container clusters list
    

    輸出結果會與下列內容相似:

    NAME: ingress-config
    LOCATION: us-west1-a
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 35.233.186.135
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 4
    STATUS: RUNNING
    
    NAME: blue
    LOCATION: us-west1-b
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 34.82.35.222
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 3
    STATUS: RUNNING
    
    NAME: green
    LOCATION: us-west1-c
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 35.185.204.26
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 3
    STATUS: RUNNING
    
  3. 建立 kubeconfig 檔案,並連線至所有叢集,在 kubeconfig 檔案中產生項目:

    touch gke-upgrade-kubeconfig
    export KUBECONFIG=gke-upgrade-kubeconfig
    gcloud container clusters get-credentials ingress-config \
        --location us-west1-a --project ${PROJECT}
    gcloud container clusters get-credentials blue --location us-west1-b \
        --project ${PROJECT}
    gcloud container clusters get-credentials green --location us-west1-c \
        --project ${PROJECT}
    

    您可以使用 kubeconfig 檔案為每個叢集建立使用者和背景資訊,藉此為叢集建立驗證。建立 kubeconfig 檔案後,您就可以快速切換不同叢集的背景資訊。

  4. 確認 kubeconfig 檔案中有三個叢集:

    kubectl config view -ojson | jq -r '.clusters[].name'
    

    輸出內容如下:

    gke_gke-multicluster-upgrades_us-west1-a_ingress-config
    gke_gke-multicluster-upgrades_us-west1-b_blue
    gke_gke-multicluster-upgrades_us-west1-c_green
    
  5. 取得這三個叢集的內容,以供日後使用:

    export INGRESS_CONFIG_CLUSTER=$(kubectl config view -ojson | jq \
        -r '.clusters[].name' | grep ingress-config)
    export BLUE_CLUSTER=$(kubectl config view -ojson | jq \
        -r '.clusters[].name' | grep blue)
    export GREEN_CLUSTER=$(kubectl config view -ojson | jq \
        -r '.clusters[].name' | grep green)
    echo -e "${INGRESS_CONFIG_CLUSTER}\n${BLUE_CLUSTER}\n${GREEN_CLUSTER}"
    

    輸出內容如下:

    gke_gke-multicluster-upgrades_us-west1-a_ingress-config
    gke_gke-multicluster-upgrades_us-west1-b_blue
    gke_gke-multicluster-upgrades_us-west1-c_green
    

將 GKE 叢集註冊至機群

將叢集註冊至機群後,您就能在混合式環境中運作 Kubernetes 叢集。註冊至機群的叢集可以使用多叢集 Ingress 等進階 GKE 功能。如要將 GKE 叢集註冊至車隊,您可以直接使用 Google Cloud服務帳戶,也可以使用建議的 GKE 適用的工作負載身分聯盟方法,讓 GKE 叢集中的 Kubernetes 服務帳戶做為 Identity and Access Management 服務帳戶。

  1. 將這三個叢集註冊為機群:

    gcloud container fleet memberships register ingress-config \
        --gke-cluster=us-west1-a/ingress-config \
        --enable-workload-identity
    
    gcloud container fleet memberships register blue \
        --gke-cluster=us-west1-b/blue \
        --enable-workload-identity
    
    gcloud container fleet memberships register green \
        --gke-cluster=us-west1-c/green \
        --enable-workload-identity
    
  2. 確認叢集已註冊:

    gcloud container fleet memberships list
    

    輸出結果會與下列內容相似:

    NAME: blue
    EXTERNAL_ID: 401b4f08-8246-4f97-a6d8-cf1b78c2a91d
    
    NAME: green
    EXTERNAL_ID: 8041c36a-9d42-40c8-a67f-54fcfd84956e
    
    NAME: ingress-config
    EXTERNAL_ID: 65ac48fe-5043-42db-8b1e-944754a0d725
    
  3. 透過 Hub 啟用 multiclusteringress 功能,將 ingress-config 叢集設為多叢集 Ingress 的設定叢集:

    gcloud container fleet ingress enable --config-membership=ingress-config
    

    上述指令會將 MulticlusterIngressMulticlusterService CRD (自訂資源定義) 新增至 ingress-config 叢集。這個指令需要幾分鐘才能完成。請稍候片刻,再進行下一個步驟。

  4. 確認 ingress-cluster 叢集已成功設定 Multi Cluster Ingress:

    watch gcloud container fleet ingress describe
    

    等待輸出結果與下列內容相似:

    createTime: '2022-07-05T10:21:40.383536315Z'
    membershipStates:
      projects/662189189487/locations/global/memberships/blue:
        state:
          code: OK
          updateTime: '2022-07-08T10:59:44.230329189Z'
      projects/662189189487/locations/global/memberships/green:
        state:
          code: OK
          updateTime: '2022-07-08T10:59:44.230329950Z'
      projects/662189189487/locations/global/memberships/ingress-config:
        state:
          code: OK
          updateTime: '2022-07-08T10:59:44.230328520Z'
    name: projects/gke-multicluster-upgrades/locations/global/features/multiclusteringress
    resourceState:
      state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/gke-multicluster-upgrades/locations/global/memberships/ingress-config
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2022-07-08T10:57:33.303543609Z'
    updateTime: '2022-07-08T10:59:45.247576318Z'
    

    如要結束 watch 指令,請按 Control+C

將範例應用程式部署至藍色和綠色叢集

  1. 在 Cloud Shell 中,將範例 whereami 應用程式部署至 bluegreen 叢集:

    kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests
    kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifests
    
  2. 請稍候幾分鐘,確認 bluegreen 叢集中的所有 Pod 狀態皆為 Running

    kubectl --context ${BLUE_CLUSTER} get pods
    kubectl --context ${GREEN_CLUSTER} get pods
    

    輸出結果會與下列內容相似:

    NAME                                   READY   STATUS    RESTARTS   AGE
    whereami-deployment-756c7dc74c-zsmr6   1/1     Running   0          74s
    NAME                                   READY   STATUS    RESTARTS   AGE
    whereami-deployment-756c7dc74c-sndz7   1/1     Running   0          68s.
    

設定多叢集 Ingress

在本節中,您將建立多叢集 Ingress,將流量傳送至 bluegreen 叢集上執行的應用程式。您可以使用 Cloud Load Balancing 建立負載平衡器,並將 bluegreen 叢集中的 whereami 應用程式做為後端。如要建立負載平衡器,您需要兩個資源:MultiClusterIngress 和一或多個 MultiClusterServicesMultiClusterIngressMultiClusterService 物件是多叢集類似項目,適用於單一叢集環境中現有的 Kubernetes Ingress 和 Service 資源。

  1. 在 Cloud Shell 中,將 MulticlusterIngress 資源部署至 ingress-config 叢集:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yaml
    

    輸出內容如下:

    multiclusteringress.networking.gke.io/whereami-mci created
    
  2. MulticlusterService 資源部署至 ingress-config 叢集:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
    

    輸出內容如下:

    multiclusterservice.networking.gke.io/whereami-mcs created
    
  3. 如要比較這兩項資源,請按照下列步驟操作:

    • 檢查 MulticlusterIngress 資源:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusteringress -o yaml
      

      輸出內容包含下列項目:

      spec:
        template:
          spec:
            backend:
              serviceName: whereami-mcs
              servicePort: 8080
      

      MulticlusterIngress 資源與 Kubernetes Ingress 資源類似,但 serviceName 規格會指向 MulticlusterService 資源。

    • 檢查 MulticlusterService 資源:

      kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice -o yaml
      

      輸出內容包含下列項目:

      spec:
        clusters:
        - link: us-west1-b/blue
        - link: us-west1-c/green
        template:
          spec:
            ports:
            - name: web
              port: 8080
              protocol: TCP
              targetPort: 8080
            selector:
              app: whereami
      

      MulticlusterService 資源與 Kubernetes Service 資源類似,但具有 clusters 規格。clusters 值是已註冊的叢集清單,其中會建立 MulticlusterService 資源。

    • 確認 MulticlusterIngress 資源是否已建立負載平衡器,且後端服務指向 MulticlusterService 資源:

      watch kubectl --context ${INGRESS_CONFIG_CLUSTER} \
            get multiclusteringress -o jsonpath="{.items[].status.VIP}"
      

      最多可能需要 10 分鐘。請等待輸出內容與下列內容類似:

      34.107.246.9
      

      如要結束 watch 指令,請按下 Control+C

  4. 在 Cloud Shell 中,取得 Cloud Load Balancing VIP:

    export GCLB_VIP=$(kubectl --context ${INGRESS_CONFIG_CLUSTER} \
           get multiclusteringress -o json | jq -r '.items[].status.VIP') \
           && echo ${GCLB_VIP}
    

    輸出結果會與下列內容相似:

    34.107.246.9
    
  5. 使用 curl 存取負載平衡器和已部署的應用程式:

    curl ${GCLB_VIP}
    

    輸出結果會與下列內容相似:

    {
      "cluster_name": "green",
      "host_header": "34.107.246.9",
      "pod_name": "whereami-deployment-756c7dc74c-sndz7",
      "pod_name_emoji": "😇",
      "project_id": "gke-multicluster-upgrades",
      "timestamp": "2022-07-08T14:26:07",
      "zone": "us-west1-c"
    }
    
  6. 重複執行 curl 指令。請注意,系統會在部署至兩個叢集 (bluegreen) 的 whereami 應用程式之間,平衡負載要求。

設定負載產生器

在本節中,您將設定 loadgenerator 服務,產生傳送至 Cloud Load Balancing VIP 的用戶端流量。首先,流量會傳送至 bluegreen 叢集,因為 MulticlusterService 資源已設定為將流量傳送至這兩個叢集。稍後,您會設定 MulticlusterService 資源,將流量傳送至單一叢集。

  1. 設定 loadgenerator 資訊清單,將用戶端流量傳送至 Cloud Load Balancing:

    TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}
    
  2. ingress-config 叢集中部署 loadgenerator

    kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifests
    
  3. 確認 ingress-config 叢集中的 loadgenerator Pod 狀態皆為 Running

    kubectl --context ${INGRESS_CONFIG_CLUSTER} get pods
    

    輸出結果會與下列內容相似:

    NAME                             READY   STATUS    RESTARTS   AGE
    loadgenerator-5498cbcb86-hqscp   1/1     Running   0          53s
    loadgenerator-5498cbcb86-m2z2z   1/1     Running   0          53s
    loadgenerator-5498cbcb86-p56qb   1/1     Running   0          53s
    

    如果任何 Pod 的狀態不是 Running,請稍候幾分鐘,然後再次執行指令。

監控流量

在本節中,您將使用Google Cloud 控制台監控 whereami 應用程式的流量。

在上一節中,您設定了 loadgenerator 部署作業,透過存取 Cloud Load Balancing VIP 中的 whereami 應用程式,模擬用戶端流量。您可以透過Google Cloud 控制台監控這些指標。請先設定監控功能,以便在排空叢集以進行升級時監控 (詳見下一節)。

  1. 建立資訊主頁,顯示抵達多叢集 Ingress 的流量:

    export DASH_ID=$(gcloud monitoring dashboards create \
        --config-from-file=dashboards/cloud-ops-dashboard.json \
        --format=json | jq  -r ".name" | awk -F '/' '{print $4}')
    

    輸出結果會與下列內容相似:

    Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]
    
  2. 您可以在Google Cloud 主控台中查看 Cloud Load Balancing 的指標。產生網址:

    echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
    

    輸出結果會與下列內容相似:

    https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"
    
  3. 在瀏覽器中前往上一個指令產生的網址。

    範例應用程式的流量會從負載產生器傳送至 bluegreen 叢集 (以叢集所在的兩個區域表示)。時間軸指標圖表會顯示前往兩個後端的流量。滑鼠懸停在值上時,會顯示兩個前端 MulticlusterServices 的網路端點群組 (NEG) 正在 bluegreen 叢集中執行。k8s1-

    時間軸指標圖表,顯示流向兩個後端的流量。

排空並升級 blue 叢集

在本節中,您將排空 blue 叢集。排空叢集是指將叢集從負載平衡集區中移除。排空 blue 叢集後,所有傳送至應用程式的用戶端流量都會導向 green 叢集。如要監控這個程序,請參閱上一節的說明。叢集排空後,即可升級排空的叢集。升級完成後,即可將其放回負載平衡集區。重複這些步驟,即可升級其他叢集 (本教學課程未顯示)。

如要排空 blue 叢集,請更新 ingress-cluster 叢集中的 MulticlusterService 資源,並從 clusters 規格中移除 blue 叢集。

排空藍色叢集

  1. 在 Cloud Shell 中,更新 ingress-config 叢集中的 MulticlusterService 資源:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} \
              apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yaml
    
  2. 確認 clusters 規格中只有 green 叢集:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \
            -o json | jq '.items[].spec.clusters'
    

    輸出內容如下:

    [
      {
        "link": "us-west1-c/green"
      }
    ]
    

    clusters 規格中只列出 green 叢集,因此只有 green 叢集位於負載平衡集區中。

  3. 您可以在Google Cloud 主控台中查看 Cloud Load Balancing 指標。產生網址:

    echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
    
  4. 在瀏覽器中前往上一個指令產生的網址。

    圖表顯示只有 green 叢集收到流量。

    流量只會流向 `green` 叢集。

升級 blue 叢集

blue 叢集不再接收任何用戶端流量,現在可以升級叢集 (控制層和節點)。

  1. 在 Cloud Shell 中,取得叢集的目前版本:

    gcloud container clusters list
    

    輸出結果會與下列內容相似:

    NAME: ingress-config
    LOCATION: us-west1-a
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 35.233.186.135
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 4
    STATUS: RUNNING
    
    NAME: blue
    LOCATION: us-west1-b
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 34.82.35.222
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 3
    STATUS: RUNNING
    
    NAME: green
    LOCATION: us-west1-c
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 35.185.204.26
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 3
    STATUS: RUNNING
    

    叢集版本可能因完成本教學課程的時間而異。

  2. 取得區域中可用的 MasterVersions 版本清單:

    gcloud container get-server-config --location us-west1-b --format=json | jq \
    '.validMasterVersions[0:20]'
    

    輸出結果會與下列內容相似:

    [
      "1.24.1-gke.1400",
      "1.23.7-gke.1400",
      "1.23.6-gke.2200",
      "1.23.6-gke.1700",
      "1.23.6-gke.1501",
      "1.23.6-gke.1500",
      "1.23.5-gke.2400",
      "1.23.5-gke.1503",
      "1.23.5-gke.1501",
      "1.22.10-gke.600",
      "1.22.9-gke.2000",
      "1.22.9-gke.1500",
      "1.22.9-gke.1300",
      "1.22.8-gke.2200",
      "1.22.8-gke.202",
      "1.22.8-gke.201",
      "1.22.8-gke.200",
      "1.21.13-gke.900",
      "1.21.12-gke.2200",
      "1.21.12-gke.1700"
    ]
    
  3. 取得可用區的可用 NodeVersions 版本清單:

    gcloud container get-server-config --location us-west1-b --format=json | jq \
    '.validNodeVersions[0:20]'
    

    輸出結果會與下列內容相似:

    [
      "1.24.1-gke.1400",
      "1.23.7-gke.1400",
      "1.23.6-gke.2200",
      "1.23.6-gke.1700",
      "1.23.6-gke.1501",
      "1.23.6-gke.1500",
      "1.23.5-gke.2400",
      "1.23.5-gke.1503",
      "1.23.5-gke.1501",
      "1.22.10-gke.600",
      "1.22.9-gke.2000",
      "1.22.9-gke.1500",
      "1.22.9-gke.1300",
      "1.22.8-gke.2200",
      "1.22.8-gke.202",
      "1.22.8-gke.201",
      "1.22.8-gke.200",
      "1.22.7-gke.1500",
      "1.22.7-gke.1300",
      "1.22.7-gke.900"
    ]
    
  4. MasterVersionsNodeVersions 清單中的 MasterVersionNodeVersion 版本設定環境變數,且該版本高於 blue 叢集的目前版本,例如:

    export UPGRADE_VERSION="1.22.10-gke.600"
    

    本教學課程使用 1.22.10-gke.600 版本。叢集版本可能有所不同,具體取決於您完成本教學課程時可用的版本。如要進一步瞭解升級,請參閱升級叢集和節點集區

  5. 升級 blue 叢集的 control plane 節點:

    gcloud container clusters upgrade blue \
        --location us-west1-b --master --cluster-version ${UPGRADE_VERSION}
    

    如要確認升級,請按 Y

    此程序需要幾分鐘才能完成。請等待升級完成再繼續操作。

    更新完成後,輸出內容如下:

    Updated
    [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
    
  6. 升級 blue 叢集中的節點:

    gcloud container clusters upgrade blue \
        --location=us-west1-b --node-pool=default-pool \
        --cluster-version ${UPGRADE_VERSION}
    

    按下 Y 即可確認更新。

    此程序需要幾分鐘才能完成。請等待節點升級完成再繼續操作。

    升級完成後,輸出內容如下:

    Upgrading blue... Done with 3 out of 3 nodes (100.0%): 3 succeeded...done.
    Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
    
  7. 確認 blue 叢集已升級:

    gcloud container clusters list
    

    輸出結果會與下列內容相似:

    NAME: ingress-config
    LOCATION: us-west1-a
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 35.233.186.135
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 4
    STATUS: RUNNING
    
    NAME: blue
    LOCATION: us-west1-b
    MASTER_VERSION: 1.22.10-gke.600
    MASTER_IP: 34.82.35.222
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.10-gke.600
    NUM_NODES: 3
    STATUS: RUNNING
    
    NAME: green
    LOCATION: us-west1-c
    MASTER_VERSION: 1.22.8-gke.202
    MASTER_IP: 35.185.204.26
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.22.8-gke.202
    NUM_NODES: 3
    STATUS: RUNNING
    

blue 叢集加回負載平衡集區

在本節中,您會將 blue 叢集加回負載平衡集區。

  1. 在 Cloud Shell 中,確認應用程式部署作業正在 blue 叢集上執行,然後再將其加回負載平衡集區:

    kubectl --context ${BLUE_CLUSTER} get pods
    

    輸出結果會與下列內容相似:

    NAME                                   READY   STATUS    RESTARTS   AGE
    whereami-deployment-756c7dc74c-xdnb6   1/1     Running   0          17m
    
  2. 更新 MutliclusterService 資源,將 blue 叢集加回負載平衡集區:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \
            -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
    
  3. 確認叢集規格中同時有 bluegreen 叢集:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \
            -o json | jq '.items[].spec.clusters'
    

    輸出內容如下:

    [
      {
        "link": "us-west1-b/blue"
      },
      {
        "link": "us-west1-c/green"
      }
    ]
    

    bluegreen 叢集現在位於 clusters 規格中。

  4. 您可以在Google Cloud 控制台中查看 Cloud Load Balancing 指標。產生網址:

    echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
    
  5. 在瀏覽器中前往上一個指令產生的網址。

    圖表顯示藍色和綠色叢集都透過負載平衡器接收負載產生器的流量。

    兩個叢集都會接收流量。

    恭喜!您已使用多叢集 Ingress,在多叢集架構中成功升級 GKE 叢集。

  6. 如要升級 green 叢集,請重複執行排空並升級藍色叢集的程序,並將所有 blue 替換為 green

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

如要避免付費,最簡單的方法就是刪除您為本教學課程建立的專案。 Google Cloud 或者,您也可以刪除個別資源。

刪除叢集

  1. 在 Cloud Shell 中,取消註冊並刪除 bluegreen 叢集:

    gcloud container fleet memberships unregister blue --gke-cluster=us-west1-b/blue
    gcloud container clusters delete blue --location us-west1-b --quiet
    
    gcloud container fleet memberships unregister green --gke-cluster=us-west1-c/green
    gcloud container clusters delete green --location us-west1-c --quiet
    
  2. ingress-config 叢集刪除 MuticlusterIngress 資源:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yaml
    

    這項指令會從專案中刪除 Cloud Load Balancing 資源。

  3. 取消註冊並刪除 ingress-config 叢集:

    gcloud container fleet memberships unregister ingress-config --gke-cluster=us-west1-a/ingress-config
    gcloud container clusters delete ingress-config --location us-west1-a --quiet
    
  4. 確認所有叢集都已刪除:

    gcloud container clusters list
    

    輸出內容如下:

    *&lt;null&gt;*
    
  5. 重設 kubeconfig 檔案:

    unset KUBECONFIG
    
  6. 移除 WORKDIR 資料夾:

    cd ${HOME}
    rm -rf ${WORKDIR}
    

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

後續步驟