Jalur Pembelajaran: Aplikasi yang skalabel - Menyimulasikan kegagalan


Kumpulan tutorial ini ditujukan untuk administrator IT dan Operator yang ingin untuk men-deploy, menjalankan, dan mengelola lingkungan aplikasi modern yang berjalan Edisi Google Kubernetes Engine (GKE) Enterprise. Saat Anda terus mempelajari rangkaian tutorial ini, Anda akan belajar cara mengonfigurasi pemantauan dan pemberitahuan, menskalakan workload, dan melakukan simulasi kegagalan, semuanya menggunakan aplikasi microservice contoh Cymbal Bank:

  1. Membuat cluster dan men-deploy aplikasi contoh
  2. Memantau dengan Google Cloud Managed Service for Prometheus
  3. Menskalakan workload
  4. Simulasikan kegagalan (tutorial ini)
  5. Pusatkan manajemen perubahan

Ringkasan dan tujuan

Aplikasi harus dapat menoleransi pemadaman dan kegagalan. Kemampuan ini memungkinkan pengguna terus mengakses aplikasi Anda bahkan saat terjadi masalah. Tujuan Aplikasi contoh Cymbal Bank dirancang untuk menangani kegagalan dan terus berjalan, tanpa perlu Anda memecahkan masalah dan memperbaiki masalah. Untuk menyediakan ketahanan, cluster regional GKE mendistribusikan node komputasi di seluruh berbeda, dan pengontrol Kubernetes akan otomatis merespons masalah layanan dalam cluster.

Dalam tutorial ini, Anda akan mempelajari cara menyimulasikan kegagalan di Google Cloud cara Layanan aplikasi di cluster edisi Google Kubernetes Engine (GKE) Enterprise Anda merespons. Anda akan mempelajari cara menyelesaikan tugas-tugas berikut:

  • Meninjau distribusi node dan Service.
  • Menyimulasikan kegagalan node atau zona.
  • Pastikan Service terus berjalan di node yang tersisa.

Biaya

Mengaktifkan GKE Enterprise dan men-deploy contoh Cymbal Bank untuk rangkaian tutorial ini berarti Anda mengeluarkan biaya per-cluster biaya untuk GKE Enterprise di Google Cloud seperti yang tercantum dalam Halaman harga hingga Anda menonaktifkan GKE Enterprise atau menghapus project.

Anda juga bertanggung jawab atas biaya Google Cloud lainnya yang timbul saat menjalankan Contoh aplikasi Cymbal Bank, seperti tagihan untuk VM Compute Engine.

Sebelum memulai

Untuk mempelajari cara menyimulasikan kegagalan, Anda harus menyelesaikan tutorial pertama untuk membuat cluster GKE yang menggunakan Autopilot dan men-deploy contoh aplikasi berbasis microservice contoh Cymbal Bank.

Sebaiknya Anda menyelesaikan rangkaian tutorial ini secara berurutan untuk Cymbal Bank. Saat Anda terus mempelajari serangkaian tutorial, Anda mempelajari keterampilan baru dan menggunakan produk dan layanan Google Cloud tambahan.

Meninjau distribusi node dan Layanan

Di Google Cloud, region adalah lokasi geografis spesifik tempat Anda dapat menghosting resource Anda. Region memiliki tiga zona atau lebih. Misalnya, Wilayah us-central1 menunjukkan wilayah di wilayah Barat Tengah di Amerika Serikat yang memiliki beberapa zona, seperti us-central1-a, us-central1-b, dan us-central1-c. Zona memiliki koneksi jaringan bandwidth tinggi dan latensi rendah untuk zona lain di region yang sama.

Untuk men-deploy aplikasi fault-tolerant yang memiliki ketersediaan tinggi, Google menyarankan Anda untuk men-deploy aplikasi di beberapa zona dan region. Pendekatan ini membantu melindungi dari kegagalan komponen yang tidak terduga, hingga dan termasuk satu zona atau region.

Saat Anda membuat cluster GKE Enterprise terakhir, beberapa nilai konfigurasi default digunakan. Secara {i>default<i}, Cluster GKE Enterprise yang menggunakan Autopilot menjalankan node yang membentang di seluruh zona dari region yang Anda tentukan. Ini berarti bahwa aplikasi contoh Cymbal Bank sudah di-deploy di berbagai zona, yang membantu melindungi data dari kegagalan tak terduga.

  1. Memeriksa distribusi node di seluruh GKE Enterprise Anda :

    kubectl get nodes -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 yang menunjukkan node tersebar di ketiga zona dalam region ini:

    NAME                         ZONE            INT_IP
    scalable-apps-pool-2-node5   us-central1-c   10.148.0.6
    scalable-apps-pool-2-node6   us-central1-c   10.148.0.7
    scalable-apps-pool-2-node2   us-central1-a   10.148.0.8
    scalable-apps-pool-2-node1   us-central1-a   10.148.0.9
    scalable-apps-pool-2-node3   us-central1-b   10.148.0.5
    scalable-apps-pool-2-node4   us-central1-b   10.148.0.4
    
  2. Memeriksa distribusi Layanan aplikasi contoh Cymbal Bank di seluruh node cluster GKE Enterprise:

    kubectl get pods -o wide
    

    Contoh {i>output<i} berikut menunjukkan bahwa Layanan didistribusikan di seluruh node lainnya di cluster. Dari langkah sebelumnya untuk memeriksa performa node didistribusikan, {i>output<i} ini menunjukkan bahwa Layanan berjalan lintas zona di wilayah:

    NAME                                  READY   STATUS    RESTARTS   AGE     IP          NODE
    accounts-db-0                         1/1     Running   0          6m30s   10.28.1.5   scalable-apps-pool-2-node3
    balancereader-7dc7d9ff57-shwg5        1/1     Running   0          6m30s   10.28.5.6   scalable-apps-pool-2-node1
    contacts-7ddc76d94-qv4x5              1/1     Running   0          6m29s   10.28.4.6   scalable-apps-pool-2-node2
    frontend-747b84bff4-xvjxq             1/1     Running   0          6m29s   10.28.3.6   scalable-apps-pool-2-node6
    ledger-db-0                           1/1     Running   0          6m29s   10.28.5.7   scalable-apps-pool-2-node1
    ledgerwriter-f6cc7889d-mttmb          1/1     Running   0          6m29s   10.28.1.6   scalable-apps-pool-2-node3
    loadgenerator-57d4cb57cc-7fvrc        1/1     Running   0          6m29s   10.28.4.7   scalable-apps-pool-2-node2
    transactionhistory-5dd7c7fd77-cmc2w   1/1     Running   0          6m29s   10.28.3.7   scalable-apps-pool-2-node6
    userservice-cd5ddb4bb-zfr2g           1/1     Running   0          6m28s   10.28.5.8   scalable-apps-pool-2-node1
    

Menyimulasikan pemadaman layanan

Google merancang zona untuk meminimalkan risiko kegagalan berkorelasi yang disebabkan oleh padamnya infrastruktur fisik seperti listrik, pendingin, atau jaringan. Namun, masalah tak terduga dapat terjadi. Jika node atau zona menjadi tidak tersedia, Anda ingin Layanan agar terus berjalan di node lain atau di zona di region yang sama.

Pengontrol Kubernetes memantau status node, Layanan, dan Deployment di cluster Anda. Jika terjadi pemadaman layanan yang tidak terduga, memulai ulang resource yang terpengaruh, dan traffic dirutekan ke node yang berfungsi.

Untuk menyimulasikan pemadaman dalam tutorial ini, Anda menghubungkan dan menguras node di salah satu berbagai zona Anda. Pendekatan ini menyimulasikan apa yang terjadi ketika sebuah {i>node<i} gagal, atau ketika seluruh zona memiliki masalah. Pengontrol Kubernetes harus mengenali bahwa beberapa Layanan tidak lagi tersedia dan harus dimulai ulang pada node di zona lain:

  • Hentikan dan kosongkan node di salah satu zona. Contoh berikut menargetkan dua node di us-central1-a:

    kubectl drain scalable-apps-pool-2-node1 \
        --delete-emptydir-data --ignore-daemonsets
    
    kubectl drain scalable-apps-pool-2-node2 \
        --delete-emptydir-data --ignore-daemonsets
    

    Perintah ini menandai node sebagai tidak dapat dijadwalkan sehingga Pod tidak dapat lagi dijalankan pada beberapa node ini. Kubernetes menjadwal ulang Pod ke node lain yang berfungsi serta region mendatang dan zonanya.

Memeriksa respons kegagalan yang disimulasikan

Di tutorial sebelumnya di rangkaian ini, Anda mempelajari cara mengkonfigurasi {i>instance<i} Prometheus yang dikelola untuk GKE Enterprise untuk memantau beberapa Layanan dan memunculkan peringatan jika terjadi masalah. Jika Pod dijalankan pada node dalam zona tersebut di mana Anda menyimulasikan pemadaman, Anda mendapatkan pesan notifikasi Slack dari pemberitahuan yang dibuat oleh Prometheus. Perilaku ini menunjukkan bagaimana Anda bisa membangun aplikasi yang memantau kondisi Deployment, akan memberi tahu jika ada masalah, dan dapat secara otomatis menyesuaikan dengan perubahan atau kegagalan pemuatan.

Cluster GKE Enterprise Anda secara otomatis merespons simulasi pemadaman. Setiap Layanan pada node yang terpengaruh akan dimulai ulang jika tersisa node.

  1. Memeriksa distribusi node di seluruh GKE Enterprise Anda ke cluster lagi:

    kubectl get nodes -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 yang menunjukkan node kini hanya tersebar di dua zona dalam region ini:

    NAME                         ZONE            INT_IP
    scalable-apps-pool-2-node5   us-central1-c   10.148.0.6
    scalable-apps-pool-2-node6   us-central1-c   10.148.0.7
    scalable-apps-pool-2-node3   us-central1-b   10.148.0.5
    scalable-apps-pool-2-node4   us-central1-b   10.148.0.4
    
  2. Pengontrol Kubernetes mengenali bahwa dua node tidak lagi tersedia, dan mendistribusikan ulang Layanan di seluruh {i>node<i} yang tersedia. Semua Layanan harus terus berjalan.

    Memeriksa distribusi Layanan aplikasi contoh Cymbal Bank di seluruh node cluster GKE Enterprise:

    kubectl get pods -o wide
    

    Contoh {i>output<i} berikut menunjukkan bahwa Layanan didistribusikan di seluruh untuk node yang tersisa dalam cluster tersebut. Dari langkah sebelumnya untuk memeriksa terdistribusi, {i>output<i} ini menunjukkan bahwa Layanan sekarang hanya berjalan di dua zona di region ini:

    NAME                                  READY   STATUS    RESTARTS   AGE     IP          NODE
    accounts-db-0                         1/1     Running   0          28m     10.28.1.5   scalable-apps-pool-2-node3
    balancereader-7dc7d9ff57-shwg5        1/1     Running   0          9m21s   10.28.5.6   scalable-apps-pool-2-node5
    contacts-7ddc76d94-qv4x5              1/1     Running   0          9m20s   10.28.4.6   scalable-apps-pool-2-node4
    frontend-747b84bff4-xvjxq             1/1     Running   0          28m     10.28.3.6   scalable-apps-pool-2-node6
    ledger-db-0                           1/1     Running   0          9m24s   10.28.5.7   scalable-apps-pool-2-node3
    ledgerwriter-f6cc7889d-mttmb          1/1     Running   0          28m     10.28.1.6   scalable-apps-pool-2-node3
    loadgenerator-57d4cb57cc-7fvrc        1/1     Running   0          9m21s   10.28.4.7   scalable-apps-pool-2-node5
    transactionhistory-5dd7c7fd77-cmc2w   1/1     Running   0          28m     10.28.3.7   scalable-apps-pool-2-node6
    userservice-cd5ddb4bb-zfr2g           1/1     Running   0          9m20s   10.28.5.8   scalable-apps-pool-2-node1
    
  3. Lihat AGE Layanan. Pada {i>output<i} contoh sebelumnya, beberapa Layanan tersebut memiliki usia yang lebih muda dibandingkan layanan lain dalam contoh Cymbal Bank aplikasi. Layanan yang lebih muda ini sebelumnya berjalan di salah satu {i>node<i} di mana Anda telah melakukan simulasi kegagalan. Pengontrol Kubernetes memulai ulang Layanan ini pada node yang tersedia.

Di skenario yang sebenarnya, Anda akan memecahkan masalah, atau menunggu masalah pemeliharaan yang harus diselesaikan. Jika Anda mengonfigurasi Prometheus untuk mengirim Slack pesan berdasarkan pemberitahuan, Anda akan melihat bahwa pemberitahuan ini muncul. Anda juga dapat jika perlu, ulangi langkah-langkah dari tutorial sebelumnya tentang cara menskalakan resource untuk melihat respons cluster GKE Enterprise dengan pemuatan saat hanya dua zona yang tersedia dengan region tersebut. Cluster tersebut akan diskalakan dengan dua zona yang tersisa.

Pembersihan

Kumpulan tutorial untuk Cymbal Bank dirancang untuk diselesaikan satu setelah lainnya. Saat Anda terus mempelajari rangkaian tutorial, Anda belajar keterampilan baru dan menggunakan produk dan layanan Google Cloud tambahan.

Jika Anda ingin istirahat sebelum melanjutkan ke tutorial berikutnya dan menghindari menimbulkan biaya ke akun Google Cloud Anda untuk resource yang digunakan dalam menghapus project yang Anda buat.

  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

Pelajari cara memusatkan manajemen perubahan dengan Config Sync di tutorial berikutnya.