Mengupgrade lingkungan GKE multi-cluster dengan Multi Cluster Ingress

Last reviewed 2022-12-15 UTC

Tutorial ini menunjukkan cara mengupgrade lingkungan Google Kubernetes Engine (GKE) multi-cluster menggunakan Multi Cluster Ingress . Tutorial ini merupakan kelanjutan dari upgrade GKE multi-cluster menggunakan dokumen Multi Cluster Ingress yang menjelaskan proses, arsitektur, dan istilah secara lebih mendetail. Sebaiknya baca dokumen konsep sebelum tutorial ini.

Untuk mengetahui perbandingan mendetail antara Multi Cluster Ingress (MCI), Gateway Multi-cluster (MCG), dan load balancer dengan Grup Endpoint Jaringan Mandiri (LB dan NEG Mandiri), lihat Memilih API multi-cluster load balancing untuk GKE.

Dokumen ini ditujukan bagi administrator Google Cloud yang bertanggung jawab mengelola fleet untuk cluster GKE.

Sebaiknya upgrade cluster GKE Anda secara otomatis. Upgrade otomatis adalah cara yang terkelola sepenuhnya untuk mengupdate cluster Anda (bidang kontrol dan node) secara otomatis sesuai jadwal rilis yang ditentukan oleh Google Cloud. Hal ini tidak memerlukan intervensi dari operator. Namun, jika Anda ingin lebih mengontrol cara dan waktu cluster diupgrade, tutorial ini akan membahas metode mengupgrade beberapa cluster tempat aplikasi Anda berjalan di semua cluster. Kemudian, layanan ini menggunakan Multi Cluster Ingress untuk menghabiskan satu cluster dalam satu waktu sebelum mengupgrade.

Arsitektur

Tutorial ini menggunakan arsitektur berikut. Ada total tiga cluster: dua cluster (blue dan green) bertindak sebagai cluster identik dengan aplikasi yang sama yang di-deploy dan satu cluster (ingress-config) bertindak sebagai bidang kontrol cluster yang mengonfigurasi Multi Cluster Ingress. Dalam tutorial ini, Anda akan men-deploy aplikasi contoh ke dua cluster aplikasi (cluster blue dan green).

Arsitektur dari dua cluster identik dan satu cluster bidang kontrol.

Tujuan

  • Buat tiga cluster GKE dan daftarkan ketiganya sebagai fleet.
  • Konfigurasikan satu cluster GKE (ingress-config) sebagai cluster konfigurasi pusat.
  • Deploy aplikasi contoh ke cluster GKE lainnya.
  • Konfigurasikan Multi Cluster Ingress untuk mengirim traffic klien ke aplikasi yang berjalan di kedua cluster aplikasi.
  • Siapkan generator beban ke aplikasi dan konfigurasi pemantauan.
  • Hapus (kosongkan) satu cluster aplikasi dari multi-cluster Ingress dan upgrade cluster yang dikosongkan.
  • Arahkan traffic kembali ke cluster yang diupgrade menggunakan Multi Cluster Ingress.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Tutorial ini mengharuskan Anda untuk Menyiapkan Multi Cluster Ingress sehingga hal-hal berikut dapat disiapkan:
    • Dua cluster atau lebih dengan aplikasi yang sama, seperti namespace, Deployment, dan Layanan, yang berjalan di semua cluster.
    • Upgrade otomatis dinonaktifkan untuk semua cluster.
    • Cluster adalah cluster VPC-native yang menggunakan rentang alamat IP alias
    • Mengaktifkan load balancing HTTP (diaktifkan secara default).
    • gcloud --version harus setidaknya 369 atau lebih Langkah-langkah pendaftaran cluster GKE bergantung pada versi ini atau yang lebih tinggi.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  5. Setel project default Anda:

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud config set project ${PROJECT}
    
  6. Aktifkan GKE, Hub, dan API multiclusteringress:

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

Menyiapkan lingkungan

  1. Di Cloud Shell, clone repositori guna mendapatkan file untuk tutorial ini:

    cd ${HOME}
    git clone https://github.com/GoogleCloudPlatform/gke-multicluster-upgrades.git
    
  2. Buat direktori WORKDIR:

    cd gke-multicluster-upgrades
    export WORKDIR=`pwd`
    

Membuat dan mendaftarkan cluster GKE ke Hub

Di bagian ini, Anda akan membuat tiga cluster GKE dan mendaftarkannya ke GKE Enterprise Hub.

Membuat cluster GKE

  1. Di Cloud Shell, buat tiga cluster GKE:

    gcloud container clusters create ingress-config --zone 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 --zone 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 --zone us-west1-c --num-nodes=3 \
    --release-channel=None --no-enable-autoupgrade --enable-ip-alias \
    --workload-pool=${PROJECT}.svc.id.goog --quiet
    

    Untuk tujuan tutorial ini, Anda akan membuat cluster dalam satu region, di tiga zona berbeda: us-west1-a,us-west1-b, dan us-west1-c. Untuk mengetahui informasi selengkapnya tentang region dan zona, lihat Geografi dan region.

  2. Tunggu beberapa menit hingga semua cluster berhasil dibuat. Pastikan cluster telah berjalan:

    gcloud container clusters list
    

    Outputnya mirip dengan hal berikut ini:

    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. Buat file kubeconfig dan hubungkan ke semua cluster untuk menghasilkan entri di file kubeconfig:

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

    Anda menggunakan file kubeconfig untuk membuat autentikasi ke cluster dengan membuat pengguna dan konteks untuk setiap cluster. Setelah membuat file kubeconfig, Anda dapat dengan cepat mengalihkan konteks antar-cluster.

  4. Verifikasi bahwa Anda memiliki tiga cluster di file kubeconfig:

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

    Outputnya adalah sebagai berikut:

    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. Dapatkan konteks dari ketiga klaster tersebut untuk digunakan nanti:

    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}"
    

    Outputnya adalah sebagai berikut:

    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
    

Mendaftarkan cluster GKE ke fleet

Dengan mendaftarkan cluster ke fleet, Anda dapat mengoperasikan cluster Kubernetes di seluruh lingkungan hybrid. Cluster yang terdaftar ke fleet dapat menggunakan fitur-fitur GKE tingkat tinggi seperti Multi Cluster Ingress. Untuk mendaftarkan cluster GKE ke fleet, Anda dapat menggunakan akun layanan Google Cloud secara langsung, atau gunakan pendekatan Workload Identity yang direkomendasikan, yang memungkinkan akun layanan Kubernetes di cluster GKE Anda untuk bertindak sebagai akun layanan Identity and Access Management.

  1. Daftarkan ketiga cluster sebagai fleet:

    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. Verifikasi bahwa cluster-cluster sudah terdaftar:

    gcloud container fleet memberships list
    

    Outputnya mirip dengan hal berikut ini:

    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. Konfigurasikan cluster ingress-config sebagai cluster konfigurasi untuk Multi Cluster Ingress dengan mengaktifkan fitur multiclusteringress melalui Hub:

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

    Perintah sebelumnya menambahkan CRD (Custom Resource Definitions) MulticlusterIngress dan MulticlusterService ke cluster ingress-config. Proses perintah ini memerlukan waktu beberapa menit. Tunggu sebelum melanjutkan ke langkah berikutnya.

  4. Verifikasi bahwa cluster ingress-cluster telah berhasil dikonfigurasi untuk Multi Cluster Ingress:

    watch gcloud container fleet ingress describe
    

    Tunggu hingga output mirip dengan berikut ini:

    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'
    

    Untuk keluar dari perintah watch, tekan Control+C.

Men-deploy aplikasi contoh ke cluster biru dan hijau

  1. Di Cloud Shell, deploy aplikasi contoh whereami ke cluster blue dan green:

    kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests
    kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifests
    
  2. Tunggu beberapa menit dan pastikan semua Pod di cluster blue dan green memiliki status Running:

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

    Outputnya mirip dengan hal berikut ini:

    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.
    

Mengonfigurasi multi-cluster ingress

Di bagian ini, Anda akan membuat multi-cluster Ingress yang mengirimkan traffic ke aplikasi yang berjalan di cluster blue dan green. Anda menggunakan Cloud Load Balancing untuk membuat load balancer yang menggunakan aplikasi whereami di cluster blue dan green sebagai backend. Untuk membuat load balancer, Anda memerlukan dua resource: MultiClusterIngress dan satu atau beberapa MultiClusterServices. Objek MultiClusterIngress dan MultiClusterService adalah analog multi-cluster untuk resource Layanan dan Ingress Kubernetes yang ada yang digunakan dalam konteks cluster tunggal.

  1. Di Cloud Shell, deploy resource MulticlusterIngress ke cluster ingress-config:

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

    Outputnya adalah sebagai berikut:

    multiclusteringress.networking.gke.io/whereami-mci created
    
  2. Deploy resource MulticlusterService ke cluster ingress-config:

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

    Outputnya adalah sebagai berikut:

    multiclusterservice.networking.gke.io/whereami-mcs created
    
  3. Untuk membandingkan kedua resource tersebut, lakukan langkah berikut:

    • Periksa resource MulticlusterIngress:

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

      Outputnya berisi hal berikut:

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

      Resource MulticlusterIngress mirip dengan resource Ingress Kubernetes kecuali spesifikasi serviceName mengarah ke resource MulticlusterService.

    • Periksa resource MulticlusterService:

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

      Outputnya berisi hal berikut:

      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
      

      Resource MulticlusterService mirip dengan resource Layanan Kubernetes, tetapi memiliki spesifikasi clusters. Nilai clusters adalah daftar cluster terdaftar tempat resource MulticlusterService dibuat.

    • Verifikasi bahwa resource MulticlusterIngress telah membuat load balancer dengan layanan backend yang mengarah ke resource MulticlusterService:

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

      Diperlukan waktu hingga 10 menit. Tunggu hingga outputnya mirip dengan berikut ini:

      34.107.246.9
      

      Untuk keluar dari perintah watch, tekan Control+C.

  4. Di Cloud Shell, dapatkan Cloud Load Balancing VIP:

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

    Outputnya mirip dengan hal berikut ini:

    34.107.246.9
    
  5. Gunakan curl untuk mengakses load balancer dan aplikasi yang di-deploy:

    curl ${GCLB_VIP}
    

    Outputnya mirip dengan hal berikut ini:

    {
      "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. Jalankan perintah curl berulang kali. Perhatikan bahwa permintaan sedang di-load balanced antara aplikasi whereami yang di-deploy ke dua cluster, blue dan green.

Menyiapkan generator beban

Di bagian ini, Anda akan menyiapkan Layanan loadgenerator yang menghasilkan traffic klien ke Cloud Load Balancing VIP. Pertama, traffic dikirim ke cluster blue dan green karena resource MulticlusterService sudah disiapkan untuk mengirim traffic ke kedua cluster. Kemudian, Anda perlu mengonfigurasi resource MulticlusterService untuk mengirim traffic ke satu cluster.

  1. Konfigurasikan manifes loadgenerator untuk mengirim traffic klien ke Cloud Load Balancing:

    TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}
    
  2. Deploy loadgenerator di cluster ingress-config:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifests
    
  3. Verifikasi bahwa semua Pod loadgenerator dalam cluster ingress-config memiliki status Running:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} get pods
    

    Outputnya mirip dengan hal berikut ini:

    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
    

    Jika salah satu Pod tidak memiliki status Running, tunggu beberapa menit, lalu jalankan perintah tersebut sekali lagi.

Memantau kondisi lalu lintas

Di bagian ini, Anda akan memantau traffic ke aplikasi whereami menggunakan Konsol Google Cloud.

Di bagian sebelumnya, Anda akan menyiapkan deployment loadgenerator yang menyimulasikan traffic klien dengan mengakses aplikasi whereami melalui Cloud Load Balancing VIP. Anda dapat memantau metrik ini melalui konsol Google Cloud. Anda harus menyiapkan pemantauan terlebih dahulu sehingga dapat memantau saat mengosongkan cluster untuk upgrade (dijelaskan di bagian berikutnya).

  1. Buat dasbor untuk menampilkan traffic yang menjangkau Multi Cluster 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}')
    

    Outputnya mirip dengan hal berikut ini:

    Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]
    
  2. Metrik dari Cloud Load Balancing tersedia di Konsol Google Cloud. Buat URL:

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

    Outputnya mirip dengan hal berikut ini:

    https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"
    
  3. Di browser, buka URL yang dihasilkan oleh perintah sebelumnya.

    Traffic ke aplikasi contoh mengarah dari generator beban ke cluster blue dan green (yang ditunjukkan oleh dua zona tempat cluster berada). Diagram metrik linimasa menunjukkan traffic yang menuju ke kedua backend. Nilai pengarahan mouse k8s1- menunjukkan bahwa grup endpoint jaringan (NEG) untuk dua MulticlusterServices frontend yang berjalan di cluster blue dan green.

    Diagram metrik linimasa yang menampilkan traffic yang mengalir ke kedua backend.

Mengosongkan dan mengupgrade cluster blue

Di bagian ini, Anda akan mengosongkan cluster blue. Mengosongkan cluster berarti Anda menghapusnya dari kumpulan load balancing. Setelah Anda mengosongkan cluster blue, semua traffic klien yang ditujukan untuk aplikasi akan masuk ke cluster green. Anda dapat memantau proses ini seperti yang dijelaskan di bagian sebelumnya. Setelah cluster dikosongkan, Anda dapat mengupgrade cluster yang dikosongkan tersebut. Setelah melakukan upgrade, Anda dapat memasukkannya kembali ke kumpulan load balancing. Anda akan mengulangi langkah-langkah ini untuk mengupgrade cluster lain (tidak ditampilkan dalam tutorial ini).

Untuk mengosongkan cluster blue, perbarui resource MulticlusterService di cluster ingress-cluster dan hapus cluster blue dari spesifikasi clusters.

Hapus cluster blue

  1. Di Cloud Shell, update resource MulticlusterService di cluster ingress-config:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} \
              apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yaml
    
  2. Pastikan Anda hanya memiliki cluster green di spesifikasi clusters:

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

    Outputnya adalah sebagai berikut:

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

    Hanya cluster green yang tercantum dalam spesifikasi clusters, sehingga hanya cluster green yang ada dalam kumpulan load balancing.

  3. Anda dapat melihat metrik dari metrik Cloud Load Balancing di konsol Google Cloud. Buat URL:

    echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
    
  4. Di browser, buka URL yang dihasilkan dari perintah sebelumnya.

    Diagram menunjukkan bahwa hanya cluster green yang menerima traffic.

    Traffic yang mengalir ke cluster `green` saja.

Upgrade cluster blue

Setelah cluster blue tidak lagi menerima traffic klien, Anda dapat mengupgrade cluster (bidang kontrol dan node).

  1. Di Cloud Shell, dapatkan versi cluster saat ini:

    gcloud container clusters list
    

    Outputnya mirip dengan hal berikut ini:

    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
    

    Versi cluster Anda mungkin berbeda-beda, bergantung pada kapan Anda menyelesaikan tutorial ini.

  2. Dapatkan daftar versi MasterVersions yang tersedia di zona:

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

    Outputnya mirip dengan hal berikut ini:

    [
      "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. Dapatkan daftar versi NodeVersions yang tersedia di zona:

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

    Outputnya mirip dengan hal berikut ini:

    [
      "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. Tetapkan variabel lingkungan untuk versi MasterVersion dan NodeVersion yang ada dalam daftar MasterVersions dan NodeVersions, serta lebih tinggi dari versi saat ini untuk blue, misalnya:

    export UPGRADE_VERSION="1.22.10-gke.600"
    

    Tutorial ini menggunakan versi 1.22.10-gke.600. Versi cluster Anda mungkin berbeda, tergantung pada versi yang tersedia saat Anda menyelesaikan tutorial ini. Untuk mengetahui informasi selengkapnya tentang cara melakukan upgrade, lihat mengupgrade cluster dan kumpulan node.

  5. Upgrade node control plane untuk cluster blue:

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

    Untuk mengonfirmasi upgrade, tekan Y.

    Proses ini membutuhkan waktu beberapa menit. Tunggu hingga upgrade selesai sebelum melanjutkan.

    Setelah update selesai, output-nya adalah sebagai berikut:

    Updated
    [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
    
  6. Upgrade node di cluster blue:

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

    Untuk mengonfirmasi update, tekan Y.

    Proses ini membutuhkan waktu beberapa menit. Tunggu hingga upgrade node selesai sebelum melanjutkan.

    Setelah upgrade selesai, output-nya adalah sebagai berikut:

    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. Pastikan cluster blue telah diupgrade:

    gcloud container clusters list
    

    Outputnya mirip dengan hal berikut ini:

    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
    

Menambahkan kembali cluster blue ke kumpulan load balancing

Di bagian ini, Anda akan menambahkan kembali cluster blue ke kumpulan load balancing.

  1. Di Cloud Shell, pastikan bahwa deployment aplikasi berjalan pada cluster blue sebelum Anda menambahkannya kembali ke kumpulan load balancing:

    kubectl --context ${BLUE_CLUSTER} get pods
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                   READY   STATUS    RESTARTS   AGE
    whereami-deployment-756c7dc74c-xdnb6   1/1     Running   0          17m
    
  2. Update resource MutliclusterService untuk menambahkan cluster blue kembali ke kumpulan load balancing:

    kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \
            -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
    
  3. Verifikasi bahwa Anda memiliki cluster blue dan green di spesifikasi cluster:

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

    Outputnya adalah sebagai berikut:

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

    Cluster blue dan green kini dalam spesifikasi clusters.

  4. Metrik dari metrik Cloud Load Balancing tersedia di konsol Google Cloud. Buat URL:

    echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
    
  5. Di browser, buka URL yang dihasilkan dari perintah sebelumnya.

    Diagram menunjukkan bahwa cluster biru dan hijau menerima traffic dari generator beban menggunakan load balancer.

    Kedua cluster menerima traffic.

    Selamat. Anda berhasil mengupgrade cluster GKE dalam arsitektur multi-cluster menggunakan Multi Cluster Ingress.

  6. Untuk mengupgrade cluster green, ulangi proses untuk menguras dan mengupgrade cluster blue, dengan mengganti blue dengan green seluruhnya.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project Google Cloud yang Anda buat untuk tutorial ini. Atau, Anda dapat menghapus resource satu per satu.

Menghapus cluster

  1. Di Cloud Shell, batalkan pendaftaran dan hapus cluster blue dan green:

    gcloud container fleet memberships unregister blue --gke-cluster=us-west1-b/blue
    gcloud container clusters delete blue --zone us-west1-b --quiet
    
    gcloud container fleet memberships unregister green --gke-cluster=us-west1-c/green
    gcloud container clusters delete green --zone us-west1-c --quiet
    
  2. Hapus resource MuticlusterIngress dari cluster ingress-config:

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

    Perintah ini akan menghapus resource Cloud Load Balancing dari project.

  3. Batalkan pendaftaran dan hapus cluster ingress-config:

    gcloud container fleet memberships unregister ingress-config --gke-cluster=us-west1-a/ingress-config
    gcloud container clusters delete ingress-config --zone us-west1-a --quiet
    
  4. Pastikan semua cluster telah dihapus:

    gcloud container clusters list
    

    Outputnya adalah sebagai berikut:

    *&lt;null&gt;*
    
  5. Reset file kubeconfig:

    unset KUBECONFIG
    
  6. Hapus folder WORKDIR:

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

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya