Menyimulasikan kegagalan zona di cluster regional GKE


Persyaratan peraturan umum adalah perusahaan dapat mendemonstrasikan kemampuan pemulihan bencana (DR) mereka. Untuk aplikasi yang berjalan di cloud, persyaratan ini mencakup keandalan dan ketersediaan layanan saat server yang dihosting di satu zona menjadi tidak tersedia untuk jangka waktu tertentu. Dokumen ini ditujukan untuk Admin dan arsitek, Operator, serta administrator pencadangan dan pemulihan dari bencana (DR) yang ingin mempelajari cara menyimulasikan failover zona saat menggunakan cluster regional Standar Google Kubernetes Engine (GKE).

Cluster regional GKE dibuat di region pilihan pengguna, dan menjalankan bidang kontrol di VM yang berada di beberapa zona dalam region yang dipilih. Cluster Autopilot GKE selalu bersifat regional, dan cluster Standard GKE dapat bersifat regional atau zonal. Tutorial ini menggunakan cluster regional GKE Standard. Node cluster berkomunikasi dengan bidang kontrol melalui load balancer, yang berarti bahwa lokasi node dan lokasi VM bidang kontrol tidak selalu cocok. Di konsol Google Cloud , Anda tidak dapat menonaktifkan zona tertentu saat menggunakan cluster regional. Untuk mengetahui informasi selengkapnya, lihat Arsitektur cluster GKE.

Tutorial ini menyediakan tiga metode berbeda untuk menyimulasikan kegagalan zona. Anda dapat menyimulasikan kegagalan zona dan memverifikasi respons aplikasi yang benar menggunakan metode apa pun yang diperlukan untuk tujuan kepatuhan Anda sendiri.

Metode dalam dokumen ini juga berlaku untuk cluster zonal, termasuk zona tunggal dan multi-zona. Metode ini hanya memengaruhi node di zona yang ditargetkan, dan bidang kontrol GKE tidak terpengaruh.

Tujuan

  • Buat cluster GKE Standard regional menggunakan konfigurasi default.
  • Deploy aplikasi microservice contoh ke cluster regional.
  • Simulasikan gangguan zona menggunakan salah satu dari tiga metode berikut:
    • Kurangi zona node pool di cluster regional.
    • Gunakan node pool satu zona.
    • Halangi dan kosongi node zona kegagalan target.
  • Verifikasi ketersediaan layanan mikro.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut: Google Cloud

  • Compute Engine
  • Cluster mode GKE Standard

Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  7. Enable the Kubernetes Engine API, Compute Engine APIs:

    gcloud services enable container.googleapis.com compute.googleapis.com
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  13. Enable the Kubernetes Engine API, Compute Engine APIs:

    gcloud services enable container.googleapis.com compute.googleapis.com
  14. Membuat cluster Standar regional

    Sebelum menyimulasikan kegagalan zona, buat cluster regional dengan node pool multi-zona. Bidang kontrol dan node cluster direplikasi ke beberapa zona dalam region yang ditentukan.

    Gunakan Google Cloud CLI untuk membuat cluster:

    1. Buat cluster GKE Standard baru menggunakan konfigurasi default:

      gcloud container clusters create CLUSTER_NAME \
        --region REGION \
        --num-nodes 2
      

      Ganti parameter berikut:

      • CLUSTER_NAME: nama untuk cluster Anda.
      • REGION: region untuk cluster Anda, seperti us-central1.

      GKE memerlukan waktu beberapa menit untuk membuat cluster dan memverifikasi semuanya berfungsi dengan benar. Dua node dibuat di setiap zona region yang Anda tentukan.

    2. Periksa zona setiap node yang dibuat pada langkah sebelumnya:

      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Outputnya akan terlihat seperti contoh berikut:

      NAME                                    ZONE                INT_IP
      regional-cluster-1-default-pool-node1   asia-southeast1-c   10.128.0.37
      regional-cluster-1-default-pool-node2   asia-southeast1-c   10.128.0.36
      regional-cluster-1-default-pool-node3   asia-southeast1-b   10.128.0.38
      regional-cluster-1-default-pool-node4   asia-southeast1-b   10.128.0.33
      regional-cluster-1-default-pool-node5   asia-southeast1-a   10.128.0.35
      regional-cluster-1-default-pool-node6   asia-southeast1-a   10.128.0.34
      
    3. Hubungkan ke cluster:

      gcloud container clusters get-credentials CLUSTER_NAME \
          --region REGION
      

    Men-deploy aplikasi microservice contoh

    Untuk melihat efek failover yang disimulasikan dalam dokumen ini, deploy aplikasi berbasis mikroservice sampel ke cluster Anda. Dalam dokumen ini, Anda akan menggunakan aplikasi contoh Cymbal Bank:

    1. Di shell, clone repositori GitHub berikut dan ubah ke dalam direktori:

      git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
      cd bank-of-anthos/
      
    2. Deploy aplikasi contoh Cymbal Bank ke cluster GKE yang Anda buat di bagian sebelumnya:

      kubectl apply -f ./extras/jwt/jwt-secret.yaml
      kubectl apply -f ./kubernetes-manifests
      
    3. Tunggu hingga Pod siap:

      kubectl get pods
      
    4. Setelah beberapa menit, Anda akan melihat Pod dalam status Running:

      NAME                                  READY   STATUS    RESTARTS   AGE
      accounts-db-0                         1/1     Running   0          16s
      balancereader-7dc7d9ff57-sstm5        0/1     Running   0          15s
      contacts-7ddc76d94-rr28x              0/1     Running   0          14s
      frontend-747b84bff4-2mtlv             0/1     Running   0          13s
      ledger-db-0                           1/1     Running   0          13s
      ledgerwriter-f6cc7889d-9qjfg          0/1     Running   0          13s
      loadgenerator-57d4cb57cc-zqvqb        1/1     Running   0          13s
      transactionhistory-5dd7c7fd77-lwkv8   0/1     Running   0          12s
      userservice-cd5ddb4bb-wwhml           0/1     Running   0          12s
      
    5. Jika semua Pod dalam status Running, dapatkan alamat IP eksternal Service frontend:

      kubectl get service frontend | awk '{print $4}'
      
    6. Di jendela browser web, buka alamat IP yang ditampilkan dalam output perintah kubectl get service untuk mengakses instance Cymbal Bank Anda.

      Kredensial default akan otomatis diisi, sehingga Anda dapat login ke aplikasi dan menjelajahi beberapa contoh transaksi dan saldo. Tidak ada tindakan khusus yang perlu Anda lakukan, selain mengonfirmasi bahwa Cymbal Bank berhasil dijalankan. Mungkin perlu waktu satu atau dua menit agar semua Layanan dimulai dengan benar dan memungkinkan Anda login. Tunggu hingga semua Pod dalam status Running dan Anda dapat berhasil login ke situs Cymbal Bank sebelum melanjutkan ke bagian berikutnya dan menyimulasikan kegagalan zona.

    Menyimulasikan kegagalan zona

    Di bagian ini, Anda akan menyimulasikan kegagalan dengan salah satu zona. Ada tiga cara berbeda untuk menyimulasikan failover ini. Anda hanya perlu memilih satu metode. Simulasikan kegagalan zona dan verifikasi respons aplikasi yang benar menggunakan metode apa pun yang diperlukan untuk tujuan kepatuhan Anda sendiri.

    Mengurangi zona node pool

    Secara default, node pool cluster regional memiliki node yang mencakup semua zona di regionnya. Dalam diagram berikut, Cloud Load Balancing mendistribusikan traffic ke kumpulan node yang mencakup tiga zona. Setiap zona memiliki dua node, dan Pod Anda dapat berjalan di node di zona mana pun.

    Load balancer mengarahkan traffic ke cluster regional yang berjalan di tiga zona. Setiap zona memiliki dua node.

    Di bagian ini, Anda akan menyimulasikan kegagalan zona dengan memperbarui node pool agar hanya berjalan di dua dari tiga zona. Pendekatan ini memverifikasi bahwa aplikasi Anda dapat merespons hilangnya zona dengan mendistribusikan ulang Pod dan traffic dengan benar di zona lain.

    Untuk mengupdate node pool agar hanya berjalan di zona tertentu dan menyimulasikan kegagalan, selesaikan langkah-langkah berikut:

    1. Periksa ketersediaan cluster dan Layanan regional:

      kubectl get po -o wide \
      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Hasilnya mirip dengan output contoh berikut:

      NAME                                  READY   STATUS    RESTARTS   AGE     IP          NODE
      accounts-db-0                         1/1     Running   0          6m30s   10.28.1.5   regional-cluster-1-default-pool-node3
      balancereader-7dc7d9ff57-shwg5        1/1     Running   0          6m30s   10.28.5.6   regional-cluster-1-default-pool-node1
      contacts-7ddc76d94-qv4x5              1/1     Running   0          6m29s   10.28.4.6   regional-cluster-1-default-pool-node2
      frontend-747b84bff4-xvjxq             1/1     Running   0          6m29s   10.28.3.6   regional-cluster-1-default-pool-node6
      ledger-db-0                           1/1     Running   0          6m29s   10.28.5.7   regional-cluster-1-default-pool-node1
      ledgerwriter-f6cc7889d-mttmb          1/1     Running   0          6m29s   10.28.1.6   regional-cluster-1-default-pool-node3
      loadgenerator-57d4cb57cc-7fvrc        1/1     Running   0          6m29s   10.28.4.7   regional-cluster-1-default-pool-node2
      transactionhistory-5dd7c7fd77-cmc2w   1/1     Running   0          6m29s   10.28.3.7   regional-cluster-1-default-pool-node6
      userservice-cd5ddb4bb-zfr2g           1/1     Running   0          6m28s   10.28.5.8   regional-cluster-1-default-pool-node1
      
      NAME                                    ZONE                INT_IP
      regional-cluster-1-default-pool-node5   asia-southeast1-c   10.148.0.6
      regional-cluster-1-default-pool-node6   asia-southeast1-c   10.148.0.7
      regional-cluster-1-default-pool-node2   asia-southeast1-a   10.148.0.8
      regional-cluster-1-default-pool-node1   asia-southeast1-a   10.148.0.9
      regional-cluster-1-default-pool-node3   asia-southeast1-b   10.148.0.5
      regional-cluster-1-default-pool-node4   asia-southeast1-b   10.148.0.4
      

      Dalam contoh ini, semua beban kerja Cymbal Bank di-deploy di semua zona. Untuk mensimulasikan kegagalan, Anda menonaktifkan salah satu zona, seperti asia-southeast1-c, tempat layanan frontend di-deploy.

    2. Menyimulasikan pemadaman layanan zona. Perbarui node pool yang ada (default-pool) untuk hanya menentukan dua zona dari tiga zona:

        gcloud container node-pools update default-pool \
          --cluster=CLUSTER_NAME \
          --node-locations=ZONE_A, ZONE_B \
          --region=REGION
      

      Ganti ZONE_A, ZONE_B dengan dua zona tempat Anda ingin node pool terus berjalan.

    3. Verifikasi ketersediaan microservice setelah Anda mengupdate node pool:

      kubectl get po -o wide
      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Output akan terlihat seperti contoh berikut:

      NAME                                    ZONE                INT_IP
      regional-cluster-1-default-pool-node2   asia-southeast1-a   10.148.0.8
      regional-cluster-1-default-pool-node1   asia-southeast1-a   10.148.0.9
      regional-cluster-1-default-pool-node3   asia-southeast1-b   10.148.0.5
      regional-cluster-1-default-pool-node4   asia-southeast1-b   10.148.0.4
      
      NAME                                  READY   STATUS    RESTARTS   AGE     IP          NODE
      accounts-db-0                         1/1     Running   0          28m     10.28.1.5   regional-cluster-1-default-pool-node3
      balancereader-7dc7d9ff57-shwg5        1/1     Running   0          28m     10.28.5.6   regional-cluster-1-default-pool-node1
      contacts-7ddc76d94-qv4x5              1/1     Running   0          28m     10.28.4.6   regional-cluster-1-default-pool-node2
      frontend-747b84bff4-mdnkd             1/1     Running   0          9m21s   10.28.1.7   regional-cluster-1-default-pool-node3
      ledger-db-0                           1/1     Running   0          28m     10.28.5.7   regional-cluster-1-default-pool-node1
      ledgerwriter-f6cc7889d-mttmb          1/1     Running   0          28m     10.28.1.6   regional-cluster-1-default-pool-node3
      loadgenerator-57d4cb57cc-7fvrc        1/1     Running   0          28m     10.28.4.7   regional-cluster-1-default-pool-node2
      transactionhistory-5dd7c7fd77-w2vqs   1/1     Running   0          9m20s   10.28.4.8   regional-cluster-1-default-pool-node2
      userservice-cd5ddb4bb-zfr2g           1/1     Running   0          28m     10.28.5.8   regional-cluster-1-default-pool-node1
      

      Dalam contoh output ini, asia-southeast1-c tidak lagi digunakan. Layanan frontend yang Anda akses dari browser dengan URL http://EXTERNAL_IP masih dapat diakses. Pengguna tetap dapat melakukan tindakan penyetoran dan pembayaran, meskipun salah satu zona tidak lagi tersedia.

    Menggunakan node pool satu zona

    Di bagian ini, Anda akan menyimulasikan kegagalan zona dengan menghapus dua node pool. Pendekatan ini memverifikasi bahwa aplikasi Anda dapat merespons hilangnya kumpulan node dengan mendistribusikan ulang Pod dan traffic dengan benar di seluruh kumpulan node di zona lain. Untuk menyimulasikan pemadaman zona pada cluster regional, Anda perlu memperluas cluster dasar yang dibuat sebelumnya, yang menjalankan aplikasi Cymbal Bank di beberapa node pool. Metode simulasi gangguan zona ini lebih mencerminkan kegagalan zona sebenarnya daripada contoh pertama pembaruan zona aktif di node pool, karena beberapa node pool lebih umum ada di cluster:

    Load balancer mengarahkan traffic ke cluster regional yang berjalan di tiga node pool. Node pool default berjalan di semua zona, dan dua node pool lainnya masing-masing berjalan di satu zona.

    Cluster yang Anda bangun di bagian ini untuk menyimulasikan kegagalan node pool satu zona mencakup komponen berikut:

    • Node pool default — biasanya dibuat saat Anda membuat cluster GKE Standard regional — yang merupakan node pool multi-zona (default-pool).

      Cluster dengan satu default-pool ini adalah cluster yang Anda buat sebelumnya dalam dokumen ini.

    • Kumpulan node tambahan (zonal-node-pool-1 dan zonal-node-pool-2) yang juga menjalankan layanan untuk aplikasi contoh Cymbal Bank.

    Garis putus-putus dalam diagram menunjukkan cara traffic hanya melayani zonal-node-pool-2 setelah Anda menyimulasikan kegagalan di default-pool dan zonal-node-pool-1.

    Untuk membuat node pool tambahan dan menyimulasikan kegagalan, selesaikan langkah-langkah berikut:

    1. Periksa ketersediaan cluster regional:

      gcloud container node-pools list \
          --cluster=CLUSTER_NAME \
          --region REGION
      
      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Hasilnya mirip dengan output contoh berikut:

      NAME: default-pool
      MACHINE_TYPE: e2-medium
      DISK_SIZE_GB: 100
      NODE_VERSION: 1.27.8-gke.1067004
      
      NAME                                         ZONE.               INT_IP
      regional-cluster-1-default-pool-node5-pzmc   asia-southeast1-c   10.148.0.6
      regional-cluster-1-default-pool-node6-qf1l   asia-southeast1-c   10.148.0.7
      regional-cluster-1-default-pool-node2-dlk2   asia-southeast1-a   10.148.0.8
      regional-cluster-1-default-pool-node1-pkfd   asia-southeast1-a   10.148.0.9
      regional-cluster-1-default-pool-node3-6b6n   asia-southeast1-b   10.148.0.5
      regional-cluster-1-default-pool-node4-h0lc   asia-southeast1-b   10.148.0.4
      

      Dalam contoh output ini, semua Pod Cymbal Bank di-deploy di semua zona dalam cluster yang sama dan berjalan di default-pool yang ada.

    2. Buat dua node pool satu zona baru:

      gcloud beta container node-pools create zonal-node-pool-1 \
        --cluster CLUSTER_NAME \
        --region REGION \
        --num-nodes 4 \
        --node-locations ZONE_A
      
      gcloud beta container node-pools create zonal-node-pool-2 \
          --cluster CLUSTER_NAME \
          --region REGION \
          --num-nodes 4 \
          --node-locations ZONE_B
      

      Ganti ZONE_A dan ZONE_B dengan dua zona tempat Anda ingin node pool zona tunggal baru berjalan.

    3. Untuk menyimulasikan kegagalan zona, hapus node pool regional default-pool dan salah satu node pool satu zona baru:

      gcloud container node-pools delete default-pool \
          --cluster=CLUSTER_NAME \
          --region=REGION
      
      gcloud container node-pools delete zonal-node-pool-1 \
          --cluster=CLUSTER_NAME \
          --region=REGION
      

      Selama proses penghapusan node-pool, workload dimatikan dan dijadwalkan ulang ke kumpulan node lain yang tersedia. Saat proses ini terjadi, Layanan dan Deployment tidak tersedia. Perilaku ini berarti bahwa periode nonaktif harus ditentukan untuk pelaporan atau dokumentasi DR.

      Verifikasi ketersediaan berkelanjutan microservice:

      kubectl get po -o wide \
      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Output-nya akan terlihat seperti contoh berikut:

      NAME                                  ZONE                INT_IP
      regional-cluster-1-node-pool3-node1   asia-southeast1-b   10.148.0.8
      regional-cluster-1-node-pool3-node2   asia-southeast1-b   10.148.0.9
      regional-cluster-1-node-pool3-node3   asia-southeast1-b   10.148.0.5
      regional-cluster-1-node-pool3-node4   asia-southeast1-b   10.148.0.4
      
      NAME                                  READY   STATUS    RESTARTS   AGE     IP          NODE
      accounts-db-0                         1/1     Running   0          28m     10.28.1.5   regional-cluster-1-zonal-node-pool-2-node3
      balancereader-7dc7d9ff57-shwg5        1/1     Running   0          28m     10.28.5.6   regional-cluster-1-zonal-node-pool-2-node1
      contacts-7ddc76d94-qv4x5              1/1     Running   0          28m     10.28.4.6   regional-cluster-1-zonal-node-pool-2-node2
      frontend-747b84bff4-mdnkd             1/1     Running   0          9m21s   10.28.1.7   regional-cluster-1-zonal-node-pool-2-node3
      ledger-db-0                           1/1     Running   0          28m     10.28.5.7   regional-cluster-1-zonal-node-pool-2-node4
      ledgerwriter-f6cc7889d-mttmb          1/1     Running   0          28m     10.28.1.6   regional-cluster-1-zonal-node-pool-2-node3
      loadgenerator-57d4cb57cc-7fvrc        1/1     Running   0          28m     10.28.4.7   regional-cluster-1-zonal-node-pool-2-node2
      transactionhistory-5dd7c7fd77-w2vqs   1/1     Running   0          9m20s   10.28.4.8   regional-cluster-1-zonal-node-pool-2-node2
      userservice-cd5ddb4bb-zfr2g           1/1     Running   0          28m     10.28.5.8   regional-cluster-1-zonal-node-pool-2-node1
      

      Dalam contoh output ini, karena default-pool dan zonal-node-pool-1 tidak ada lagi, semua Layanan berjalan di zonal-node-pool-2.

    Menghalangi dan mengosongkan node dalam zona

    Di bagian ini, Anda akan mengisolasi dan mengosongkan node tertentu di cluster. Anda mengisolasi dan menguras semua node dalam satu zona, yang menyimulasikan hilangnya Pod yang berjalan di node tersebut di seluruh zona:

    Load balancer mengarahkan traffic ke cluster regional yang berjalan di tiga zona. Setiap zona berisi dua node, dan Pod aplikasi contoh Cymbal Bank berjalan di semua zona dan node.

    Dalam diagram ini, Anda mengisolasi dan mengosongkan node di zona pertama. Node di dua zona lainnya akan terus berjalan. Pendekatan ini memverifikasi bahwa aplikasi Anda dapat merespons hilangnya semua node dalam zona dengan mendistribusikan ulang Pod dan traffic dengan benar di seluruh node yang berjalan di zona lain.

    Untuk mengisolasi dan menguras node di salah satu zona, yang menyimulasikan kegagalan, selesaikan langkah-langkah berikut:

    1. Periksa ketersediaan cluster dan Layanan regional. Lihat nama node zona kegagalan target. Anda ingin menentukan zona tempat Pods frontend berjalan:

      kubectl get pods -o wide
      

      Output akan terlihat seperti contoh berikut:

      NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE
      accounts-db-0                         1/1     Running   0          4m7s    10.96.4.4    regional-cluster-1-default-pool-node2
      balancereader-7dc7d9ff57-lv4z7        1/1     Running   0          4m7s    10.96.1.5    regional-cluster-1-default-pool-node1
      contacts-7ddc76d94-wxvg5              1/1     Running   0          4m7s    10.96.6.11   regional-cluster-1-default-pool-node3
      frontend-747b84bff4-gvktl             1/1     Running   0          4m7s    10.96.1.4    regional-cluster-1-default-pool-node1
      ledger-db-0                           1/1     Running   0          4m7s    10.96.4.5    regional-cluster-1-default-pool-node2
      ledger-db-1                           1/1     Running   0          3m50s   10.96.0.13   regional-cluster-1-default-pool-node5
      ledgerwriter-f6cc7889d-4hqbm          1/1     Running   0          4m6s    10.96.0.12   regional-cluster-1-default-pool-node5
      loadgenerator-57d4cb57cc-fmq52        1/1     Running   0          4m6s    10.96.4.6    regional-cluster-1-default-pool-node2
      transactionhistory-5dd7c7fd77-72zpx   1/1     Running   0          4m6s    10.96.6.12   regional-cluster-1-default-pool-node3
      userservice-cd5ddb4bb-b7862           1/1     Running   0          4m6s    10.96.1.6    regional-cluster-1-default-pool-node1
      
    2. Kaitkan Pod yang tercantum dalam output sebelumnya dengan zona node:

      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Output akan terlihat seperti contoh berikut:

      NAME                                    ZONE                INT_IP
      regional-cluster-1-default-pool-node1   asia-southeast1-b   10.148.0.41
      regional-cluster-1-default-pool-node2   asia-southeast1-b   10.148.0.42
      regional-cluster-1-default-pool-node3   asia-southeast1-a   10.148.0.37
      regional-cluster-1-default-pool-node4   asia-southeast1-a   10.148.0.38
      regional-cluster-1-default-pool-node5   asia-southeast1-c   10.148.0.40
      regional-cluster-1-default-pool-node6   asia-southeast1-c   10.148.0.39
      

      Dalam output contoh sebelumnya, Pod frontend berada di regional-cluster-1-default-pool-node1 di zona asia-southeast1-b.

      Pada langkah berikutnya, Anda akan melacak semua node di zona asia-southeast1-b, yang dalam contoh output ini adalah regional-cluster-1-default-pool-node1 dan regional-cluster-1-default-pool-node2

    3. Halangi dan kosongkan node target di salah satu zona. Dalam contoh ini, ada dua node di asia-southeast1-b:

      kubectl drain regional-cluster-1-default-pool-node1 \
          --delete-emptydir-data --ignore-daemonsets
      
      kubectl drain regional-cluster-1-default-pool-node2 \
          --delete-emptydir-data --ignore-daemonsets
      

      Perintah ini menandai node sebagai tidak dapat dijadwalkan, dan menyimulasikan kegagalan node. Kubernetes menjadwalkan ulang Pod ke node lain di zona yang berfungsi.

    4. Lihat tempat Pod frontend baru dan Pod contoh Cymbal Bank lainnya yang sebelumnya berjalan di node dalam zona kegagalan kini dijadwalkan ulang:

      kubectl get po -o wide
      kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
      

      Output akan terlihat seperti contoh berikut:

      NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE
      accounts-db-0                         1/1     Running   0          4m7s    10.96.4.4    regional-cluster-1-default-pool-node4
      balancereader-7dc7d9ff57-lv4z7        1/1     Running   0          4m7s    10.96.1.5    regional-cluster-1-default-pool-node6
      contacts-7ddc76d94-wxvg5              1/1     Running   0          4m7s    10.96.6.11   regional-cluster-1-default-pool-node3
      frontend-747b84bff4-gvktl             1/1     Running   0          4m7s    10.96.1.4    regional-cluster-1-default-pool-node3
      ledger-db-0                           1/1     Running   0          4m7s    10.96.4.5    regional-cluster-1-default-pool-node6
      ledger-db-1                           1/1     Running   0          3m50s   10.96.0.13   regional-cluster-1-default-pool-node5
      ledgerwriter-f6cc7889d-4hqbm          1/1     Running   0          4m6s    10.96.0.12   regional-cluster-1-default-pool-node5
      loadgenerator-57d4cb57cc-fmq52        1/1     Running   0          4m6s    10.96.4.6    regional-cluster-1-default-pool-node4
      transactionhistory-5dd7c7fd77-72zpx   1/1     Running   0          4m6s    10.96.6.12   regional-cluster-1-default-pool-node3
      userservice-cd5ddb4bb-b7862           1/1     Running   0          4m6s    10.96.1.6    regional-cluster-1-default-pool-node3
      
      NAME                                    ZONE                INT_IP
      regional-cluster-1-default-pool-node3   asia-southeast1-a   10.148.0.37
      regional-cluster-1-default-pool-node4   asia-southeast1-a   10.148.0.38
      regional-cluster-1-default-pool-node5   asia-southeast1-c   10.148.0.40
      regional-cluster-1-default-pool-node6   asia-southeast1-c   10.148.0.39
      

      Dalam contoh output ini, tidak ada contoh Pod Cymbal Bank yang berjalan di node yang dikarantina, dan semua Pod hanya berjalan di dua zona lainnya.

      Anggaran Gangguan Pod (PDB) di node dapat memblokir pengurasan node. Menilai kebijakan PDB sebelum tindakan mengisolasi dan menguras. Untuk memahami lebih lanjut PDB dan hubungannya dengan pengelolaan gangguan, lihat cara memastikan keandalan dan waktu beroperasi untuk cluster GKE Anda.

    Pembersihan

    Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:

    Menghapus project

    Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

    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.

    Langkah berikutnya