Melakukan simulasi kegagalan zona di cluster regional GKE


Persyaratan peraturan umum yang umum adalah perusahaan dapat mendemonstrasikan kemampuan pemulihan dari bencana (DR). Untuk aplikasi yang berjalan di cloud, persyaratan ini mencakup keandalan dan ketersediaan layanan jika server yang dihosting di satu zona menjadi tidak tersedia dalam 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 Google Kubernetes Engine (GKE) Standard.

Cluster regional GKE dibuat di region yang dipilih pengguna, dan menjalankan bidang kontrol pada VM yang terletak di beberapa zona dalam region yang dipilih. Cluster GKE Autopilot selalu bersifat regional, dan cluster GKE Standard dapat bersifat regional atau zona. 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 zona, termasuk zona tunggal dan multi-zona. Metode ini hanya memengaruhi node di zona yang ditargetkan, dan bidang kontrol GKE tidak terpengaruh.

Tujuan

  • Buat cluster Standar GKE regional menggunakan konfigurasi default.
  • Deploy contoh aplikasi microservice ke cluster regional.
  • Simulasikan pemadaman zona menggunakan salah satu dari tiga metode berikut:
    • Kurangi zona kumpulan node di cluster regional.
    • Menggunakan kumpulan node satu zona.
    • Cordon dan menguras node zona kegagalan target.
  • Verifikasi ketersediaan microservice.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Compute Engine
  • Cluster mode GKE Standar

Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang diproyeksikan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

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

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

    gcloud services enable container.googleapis.com compute.googleapis.com
  7. Menginstal Google Cloud CLI.
  8. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  9. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

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

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

    gcloud services enable container.googleapis.com compute.googleapis.com

Membuat cluster Standar regional

Sebelum menyimulasikan kegagalan zona, buat cluster regional dengan kumpulan node multi-zona. Bidang kontrol dan node cluster direplikasi ke beberapa zona di 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 cluster Anda.
    • REGION: region untuk cluster Anda, seperti us-central1.

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

  2. Periksa zona dari 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 contoh aplikasi microservice

Untuk melihat efek simulasi failover dalam dokumen ini, deploy contoh aplikasi berbasis microservice ke cluster Anda. Dalam dokumen ini, Anda akan menggunakan contoh aplikasi Cymbal Bank:

  1. Di shell, clone repositori GitHub berikut dan ubah menjadi 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 berada dalam status Running, dapatkan alamat IP eksternal Layanan 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 diisi secara otomatis, sehingga Anda dapat login ke aplikasi dan mempelajari beberapa contoh transaksi dan saldo. Tidak ada tindakan spesifik yang perlu Anda lakukan, selain mengonfirmasi bahwa Cymbal Bank berhasil dijalankan. Mungkin perlu waktu satu atau dua menit hingga semua Layanan dimulai dengan benar dan Anda dapat login. Tunggu hingga semua Pod berada dalam status Running dan Anda dapat berhasil login ke situs Cymbal Bank sebelum melanjutkan ke bagian berikutnya dan melakukan simulasi kegagalan zona.

Menyimulasikan kegagalan zona

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

Mengurangi zona kumpulan node

Secara default, kumpulan node dari 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 pada node di salah satu zona ini.

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

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

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

  1. Periksa ketersediaan cluster regional dan Layanan:

    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 contoh output 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 menyimulasikan kegagalan, Anda harus menonaktifkan salah satu zona, seperti asia-southeast1-c, tempat layanan frontend di-deploy.

  2. Melakukan simulasi penonaktifan zona. Update kumpulan node 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 kumpulan node terus berjalan.

  3. Verifikasi ketersediaan microservice setelah Anda mengupdate kumpulan node:

    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 masih dapat melakukan tindakan penyetoran dan pembayaran, meskipun salah satu zona tidak lagi tersedia.

Menggunakan kumpulan node satu zona

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

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

Cluster yang Anda build di bagian ini untuk menyimulasikan kegagalan kumpulan node zona tunggal mencakup komponen berikut:

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

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

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

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

Untuk membuat kumpulan node 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 contoh output 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 di bawah cluster yang sama dan berjalan di default-pool yang ada.

  2. Buat dua kumpulan node zona tunggal 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 menjalankan kumpulan node zona tunggal yang baru.

  3. Untuk menyimulasikan kegagalan zona, hapus kumpulan node regional default-pool dan salah satu kumpulan node zona tunggal yang 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 dihentikan dan dijadwalkan ulang ke kumpulan node lain yang tersedia. Jika proses ini terjadi, Layanan dan Deployment tidak akan tersedia. Perilaku ini berarti 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 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 sudah tidak ada, semua Layanan berjalan di zonal-node-pool-2.

Cordon dan kuras node dalam zona

Di bagian ini, Anda akan menghubungkan dan mengalirkan node tertentu di cluster. Anda menghubungkan dan menghabiskan semua node dalam satu zona, yang menyimulasikan hilangnya Pod yang berjalan pada 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 menghubungkan dan mengeringkan node di zona pertama. Node di dua zona lainnya akan terus berjalan. Pendekatan ini memverifikasi bahwa aplikasi Anda dapat merespons hilangnya semua node di zona dengan mendistribusikan Pod dan traffic dengan benar di seluruh node yang berjalan di zona lain.

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

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

    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
    

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

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

  3. Cordon dan kuras node target di salah satu zona. Dalam contoh ini, terdapat 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 akan menjadwalkan ulang Pod ke node lain di zona yang berfungsi.

  4. Lihat tempat Pod frontend baru dan contoh Pod Cymbal Bank lainnya yang sebelumnya berjalan pada node di zona kegagalan sekarang 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 pada node dengan kordon, dan semua Pod kini hanya berjalan di dua zona lainnya.

    Anggaran Gangguan Pod (PDB) di node dapat memblokir pengosongan node. Periksa kebijakan PDB sebelum melakukan tindakan pengamanan dan pengurasan. 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. 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