Jalur Pembelajaran: Aplikasi yang skalabel - Mensimulasikan kegagalan

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

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

Ringkasan dan tujuan

Aplikasi harus dapat mentoleransi pemadaman layanan dan kegagalan. Kemampuan ini memungkinkan pengguna terus mengakses aplikasi Anda meskipun ada masalah. Aplikasi contoh Cymbal Bank dirancang untuk menangani kegagalan dan terus berjalan, tanpa perlu Anda memecahkan masalah dan memperbaiki hal-hal yang salah. Untuk memberikan ketahanan ini, cluster regional GKE mendistribusikan node komputasi di seluruh zona, dan pengontrol Kubernetes secara otomatis merespons masalah layanan dalam cluster.

Dalam tutorial ini, Anda akan mempelajari cara menyimulasikan kegagalan di Google Cloud dan melihat cara Layanan aplikasi di cluster GKE Anda merespons. Anda akan mempelajari cara menyelesaikan tugas berikut:

  • Meninjau distribusi node dan Layanan.
  • Menyimulasikan kegagalan node atau zona.
  • Memverifikasi bahwa Layanan terus berjalan di seluruh node yang tersisa.

Biaya

Mengaktifkan GKE dan men-deploy aplikasi contoh Cymbal Bank untuk rangkaian tutorial ini berarti Anda akan dikenai biaya per cluster untuk GKE on Google Cloud seperti yang tercantum di halaman Harga kami hingga Anda menonaktifkan GKE atau menghapus project.

Anda juga bertanggung jawab atas biaya lain Google Cloud yang dikeluarkan saat menjalankan aplikasi contoh Cymbal Bank, seperti biaya 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 aplikasi berbasis microservice contoh Cymbal Bank.

Sebaiknya selesaikan kumpulan tutorial ini untuk aplikasi yang dapat diskalakan secara berurutan. Saat Anda mempelajari kumpulan tutorial ini, Anda akan mempelajari keterampilan baru dan menggunakan tambahan Google Cloud produk dan layanan.

Meninjau distribusi node dan Layanan

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

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

Saat Anda membuat cluster GKE di tutorial pertama, beberapa nilai konfigurasi default digunakan. Secara default, cluster GKE yang menggunakan Autopilot membuat dan menjalankan node yang mencakup zona region yang Anda tentukan. Pendekatan ini berarti aplikasi contoh Cymbal Bank sudah di-deploy di beberapa zona, yang membantu melindungi dari kegagalan yang tidak terduga.

  1. Periksa distribusi node di seluruh cluster GKE 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 bahwa node tersebar di ketiga zona di region:

    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. Periksa distribusi Layanan aplikasi contoh Cymbal Bank di seluruh node cluster GKE Anda:

    kubectl get pods -o wide
    

    Contoh output berikut menunjukkan bahwa Layanan didistribusikan di seluruh node dalam cluster. Dari langkah sebelumnya untuk memeriksa cara node didistribusikan, output ini menunjukkan bahwa Layanan berjalan di seluruh zona di region:

    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 mendesain zona untuk meminimalkan risiko kegagalan berkorelasi yang disebabkan oleh pemadaman infrastruktur fisik seperti listrik, pendingin, atau jaringan. Namun, masalah yang tidak terduga dapat terjadi. Jika node atau zona tidak tersedia, Anda ingin Layanan 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, pengontrol akan memulai ulang resource yang terpengaruh, dan traffic akan dirutekan ke node yang berfungsi.

Untuk menyimulasikan pemadaman layanan dalam tutorial ini, Anda akan menghalangi dan mengosongkan node di salah satu zona Anda. Pendekatan ini menyimulasikan apa yang terjadi saat node gagal, atau saat seluruh zona mengalami masalah. Pengontrol Kubernetes harus mengenali bahwa beberapa Layanan tidak lagi tersedia dan harus dimulai ulang di node di zona lain:

  • Halangi 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 berjalan di node ini. Kubernetes menjadwalkan ulang Pod ke node lain di zona yang berfungsi.

Memeriksa respons kegagalan yang disimulasikan

Dalam tutorial sebelumnya dalam rangkaian ini, Anda mempelajari cara mengonfigurasi instance Prometheus terkelola untuk cluster GKE Anda guna memantau beberapa Layanan dan membuat pemberitahuan jika ada masalah. Jika Pod berjalan di node di zona tempat Anda menyimulasikan pemadaman layanan, Anda akan mendapatkan pesan notifikasi Slack dari pemberitahuan yang dibuat oleh Prometheus. Perilaku ini menunjukkan cara Anda dapat membangun lingkungan aplikasi modern yang memantau kesehatan Deployment Anda, memberi tahu Anda jika ada masalah, dan dapat otomatis menyesuaikan perubahan atau kegagalan beban.

Cluster GKE Anda otomatis merespons pemadaman layanan yang disimulasikan. Layanan apa pun di node yang terpengaruh akan dimulai ulang di node yang tersisa.

  1. Periksa kembali distribusi node di seluruh cluster GKE 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 bahwa node kini hanya tersebar di dua zona di region:

    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 node yang tersedia. Semua Layanan harus terus berjalan.

    Periksa distribusi Layanan aplikasi contoh Cymbal Bank di seluruh node cluster GKE Anda:

    kubectl get pods -o wide
    

    Contoh output berikut menunjukkan bahwa Layanan didistribusikan di seluruh node yang tersisa dalam cluster. Dari langkah sebelumnya untuk memeriksa cara node didistribusikan, output ini menunjukkan bahwa Layanan kini hanya berjalan di dua zona di region:

    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. Dalam contoh output sebelumnya, beberapa Layanan memiliki usia yang lebih muda daripada yang lain dalam aplikasi contoh Cymbal Bank. Layanan yang lebih muda ini sebelumnya berjalan di salah satu node tempat Anda menyimulasikan kegagalan. Pengontrol Kubernetes memulai ulang Layanan ini di node yang tersedia.

Dalam skenario sebenarnya, Anda akan memecahkan masalah, atau menunggu masalah pemeliharaan yang mendasarinya diselesaikan. Jika Anda mengonfigurasi Prometheus untuk mengirim pesan Slack berdasarkan pemberitahuan, Anda akan melihat notifikasi ini muncul. Anda juga dapat mengulangi langkah-langkah dari tutorial sebelumnya untuk menskalakan resource guna melihat cara cluster GKE Anda merespons dengan peningkatan beban saat hanya dua zona yang tersedia dengan region. Cluster harus menskalakan dengan dua zona yang tersisa.

Pembersihan

Agar akunAnda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang Anda buat. Google Cloud

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

    Buka Kelola resource

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

Langkah berikutnya

Pelajari cara me musatkan manajemen perubahan dengan Sinkronisasi Konfigurasi di tutorial berikutnya.