Tiga Tingkat Penskalaan Otomatis di Kubernetes: Cara Menggunakannya Secara Efektif

Tiga Tingkat Penskalaan Otomatis di Kubernetes: Cara Menggunakannya Secara Efektif
Untuk sepenuhnya menguasai Kubernetes, Anda perlu mengetahui berbagai cara untuk menskalakan sumber daya cluster: dengan menurut pengembang sistem, ini adalah salah satu tugas utama Kubernetes. Kami telah memberikan ikhtisar tingkat tinggi tentang mekanisme penskalaan otomatis dan pengubahan ukuran klaster horizontal dan vertikal, serta rekomendasi tentang cara menggunakannya secara efektif.

artikel Kubernetes Autoscaling 101: Cluster Autoscaler, Horizontal Autoscaler, dan Vertikal Pod Autoscaler diterjemahkan oleh tim yang menerapkan penskalaan otomatis Kubernetes aaS dari Mail.ru.

Mengapa penting untuk memikirkan tentang penskalaan

Kubernetes - alat untuk pengelolaan sumber daya dan orkestrasi. Tentu saja, menyenangkan untuk mengutak-atik fitur-fitur keren dalam penerapan, pemantauan, dan pengelolaan pod (pod adalah sekelompok container yang diluncurkan sebagai respons terhadap permintaan).

Namun, Anda juga harus memikirkan pertanyaan-pertanyaan berikut:

  1. Bagaimana cara menskalakan modul dan aplikasi?
  2. Bagaimana cara menjaga agar kontainer tetap beroperasi dan efisien?
  3. Bagaimana cara merespons perubahan konstan dalam kode dan beban kerja dari pengguna?

Mengonfigurasi klaster Kubernetes untuk menyeimbangkan sumber daya dan kinerja dapat menjadi tantangan dan memerlukan pengetahuan ahli tentang cara kerja Kubernetes. Beban kerja aplikasi atau layanan Anda dapat berfluktuasi sepanjang hari atau bahkan selama satu jam, jadi penyeimbangan sebaiknya dianggap sebagai proses yang berkelanjutan.

Tingkat penskalaan otomatis Kubernetes

Penskalaan otomatis yang efektif memerlukan koordinasi antara dua tingkat:

  1. Level pod, termasuk autoscaler horizontal (Horizontal Pod Autoscaler, HPA) dan vertikal (Vertical Pod Autoscaler, VPA). Ini menskalakan sumber daya yang tersedia untuk kontainer Anda.
  2. Tingkat cluster, yang dikelola oleh Cluster Autoscaler (CA), yang menambah atau mengurangi jumlah node dalam cluster.

Modul Penskala Otomatis Horizontal (HPA).

Seperti namanya, HPA menskalakan jumlah replika pod. Kebanyakan pengembang menggunakan beban CPU dan memori sebagai pemicu untuk mengubah jumlah replika. Namun, dimungkinkan untuk menskalakan sistem berdasarkan metrik khususmereka kombinasi atau bahkan metrik eksternal.

Diagram operasi HPA tingkat tinggi:

  1. HPA terus-menerus memeriksa nilai metrik yang ditentukan selama instalasi dengan interval default 30 detik.
  2. HPA berupaya menambah jumlah modul jika ambang batas yang ditentukan tercapai.
  3. HPA memperbarui jumlah replika dalam pengontrol penerapan/replikasi.
  4. Pengontrol penerapan/replikasi kemudian menyebarkan modul tambahan apa pun yang diperlukan.

Tiga Tingkat Penskalaan Otomatis di Kubernetes: Cara Menggunakannya Secara Efektif
HPA memulai proses penerapan modul ketika ambang batas metrik tercapai

Saat menggunakan HPA, pertimbangkan hal berikut:

  • Interval pemeriksaan HPA default adalah 30 detik. Itu ditentukan oleh bendera periode sinkronisasi-pod-autoscaler-horizontal di manajer pengontrol.
  • Kesalahan relatif default adalah 10%.
  • Setelah peningkatan jumlah modul terakhir, HPA memperkirakan metrik akan stabil dalam waktu tiga menit. Interval ini ditentukan oleh bendera penundaan-pod-autoscaler-upscale-delay.
  • Setelah pengurangan jumlah modul terakhir, HPA menunggu selama lima menit untuk stabil. Interval ini ditentukan oleh bendera penundaan-pod-autoscaler-downscale-delay.
  • HPA berfungsi paling baik dengan objek penerapan daripada pengontrol replikasi. Penskalaan otomatis horizontal tidak kompatibel dengan pembaruan bergulir, yang secara langsung memanipulasi pengontrol replikasi. Dengan penerapan, jumlah replika bergantung langsung pada objek penerapan.

Penskalaan otomatis vertikal pada pod

Penskalaan otomatis vertikal (VPA) mengalokasikan lebih banyak (atau lebih sedikit) waktu CPU atau memori ke pod yang ada. Cocok untuk pod stateful atau stateless, tetapi terutama ditujukan untuk layanan stateful. Namun, Anda juga dapat menggunakan VPA untuk modul stateless jika Anda perlu secara otomatis menyesuaikan jumlah sumber daya yang dialokasikan pada awalnya.

VPA juga merespons peristiwa OOM (kehabisan memori). Mengubah waktu CPU dan memori memerlukan restart pod. Ketika dimulai kembali, VPA menghormati anggaran alokasi (anggaran penyaluran pod, PDB) untuk menjamin jumlah modul minimum yang diperlukan.

Anda dapat mengatur sumber daya minimum dan maksimum untuk setiap modul. Dengan demikian, Anda dapat membatasi jumlah maksimum memori yang dialokasikan hingga 8 GB. Hal ini berguna jika node saat ini pasti tidak dapat mengalokasikan lebih dari 8 GB memori per kontainer. Spesifikasi rinci dan mekanisme pengoperasian dijelaskan di wiki VPA resmi.

Selain itu, VPA mempunyai fungsi rekomendasi yang menarik (VPA Rekomendasi). Ini memantau penggunaan sumber daya dan peristiwa OOM semua modul untuk menyarankan nilai memori dan waktu CPU baru berdasarkan algoritma cerdas berdasarkan metrik historis. Ada juga API yang mengambil pegangan pod dan mengembalikan nilai sumber daya yang disarankan.

Perlu dicatat bahwa Rekomendasi VPA tidak melacak "batas" sumber daya. Hal ini dapat mengakibatkan modul memonopoli sumber daya dalam node. Lebih baik menetapkan batas pada tingkat namespace untuk menghindari konsumsi memori atau CPU yang besar.

Skema operasi VPA tingkat tinggi:

  1. VPA terus-menerus memeriksa nilai metrik yang ditentukan selama instalasi dengan interval default 10 detik.
  2. Jika ambang batas yang ditentukan tercapai, VPA berupaya mengubah jumlah sumber daya yang dialokasikan.
  3. VPA memperbarui jumlah sumber daya dalam pengontrol penerapan/replikasi.
  4. Saat modul dimulai ulang, semua sumber daya baru diterapkan ke instance yang dibuat.

Tiga Tingkat Penskalaan Otomatis di Kubernetes: Cara Menggunakannya Secara Efektif
VPA menambahkan jumlah sumber daya yang diperlukan

Harap perhatikan hal-hal berikut saat menggunakan VPA:

  • Penskalaan memerlukan restart wajib pada pod. Hal ini diperlukan untuk menghindari pengoperasian yang tidak stabil setelah melakukan perubahan. Untuk keandalan, modul dimulai ulang dan didistribusikan ke seluruh node berdasarkan sumber daya yang baru dialokasikan.
  • VPA dan HPA belum kompatibel satu sama lain dan tidak dapat berjalan di pod yang sama. Jika Anda menggunakan kedua mekanisme penskalaan di klaster yang sama, pastikan pengaturan Anda mencegahnya diaktifkan pada objek yang sama.
  • VPA menyesuaikan permintaan kontainer untuk sumber daya hanya berdasarkan penggunaan sebelumnya dan saat ini. Itu tidak menetapkan batas penggunaan sumber daya. Mungkin ada masalah dengan aplikasi yang tidak berfungsi dengan benar dan mulai mengambil alih lebih banyak sumber daya, hal ini akan menyebabkan Kubernetes mematikan pod ini.
  • VPA masih dalam tahap awal pengembangan. Bersiaplah bahwa sistem mungkin mengalami beberapa perubahan dalam waktu dekat. Anda dapat membaca tentang keterbatasan yang diketahui ΠΈ rencana pembangunan. Oleh karena itu, terdapat rencana untuk menerapkan operasi gabungan VPA dan HPA, serta penerapan modul bersama dengan kebijakan penskalaan otomatis vertikal untuk modul tersebut (misalnya, label khusus 'memerlukan VPA').

Melakukan penskalaan otomatis pada cluster Kubernetes

Cluster Autoscaler (CA) mengubah jumlah node berdasarkan jumlah pod yang menunggu. Sistem secara berkala memeriksa modul yang tertunda - dan meningkatkan ukuran cluster jika diperlukan lebih banyak sumber daya dan jika cluster tidak melebihi batas yang ditetapkan. CA berkomunikasi dengan penyedia layanan cloud, meminta node tambahan darinya, atau melepaskan node yang tidak digunakan. Versi CA pertama yang tersedia secara umum diperkenalkan di Kubernetes 1.8.

Skema operasi SA tingkat tinggi:

  1. CA memeriksa modul yang tertunda dengan interval default 10 detik.
  2. Jika satu atau lebih pod berada dalam keadaan siaga karena klaster tidak memiliki cukup sumber daya untuk mengalokasikannya, maka klaster akan mencoba untuk menyediakan satu atau lebih node tambahan.
  3. Ketika penyedia layanan cloud mengalokasikan node yang diperlukan, ia akan bergabung dengan cluster dan siap melayani pod.
  4. Penjadwal Kubernetes mendistribusikan pod yang tertunda ke node baru. Jika setelah ini beberapa modul masih dalam keadaan menunggu, proses diulangi dan node baru ditambahkan ke cluster.

Tiga Tingkat Penskalaan Otomatis di Kubernetes: Cara Menggunakannya Secara Efektif
Penyediaan otomatis node cluster di cloud

Pertimbangkan hal berikut saat menggunakan CA:

  • CA memastikan bahwa semua pod di cluster memiliki ruang untuk berjalan, berapa pun beban CPU. Ia juga mencoba memastikan bahwa tidak ada node yang tidak perlu di cluster.
  • CA mencatat kebutuhan penskalaan setelah sekitar 30 detik.
  • Setelah node tidak lagi diperlukan, CA secara default menunggu 10 menit sebelum melakukan penskalaan sistem.
  • Sistem penskalaan otomatis memiliki konsep ekspander. Ini adalah strategi berbeda untuk memilih sekelompok node yang akan ditambahkan node baru.
  • Gunakan opsi ini secara bertanggung jawab cluster-autoscaler.kubernetes.io/safe-to-evict (benar). Jika Anda menginstal banyak pod, atau jika banyak pod yang tersebar di seluruh node, Anda akan kehilangan sebagian besar kemampuan untuk memperluas skala cluster.
  • Gunakan Anggaran PodDisruptionuntuk mencegah pod terhapus, yang dapat menyebabkan sebagian aplikasi Anda gagal total.

Bagaimana autoscaler Kubernetes berinteraksi satu sama lain

Untuk keselarasan yang sempurna, penskalaan otomatis harus diterapkan pada tingkat pod (HPA/VPA) dan tingkat cluster. Mereka berinteraksi satu sama lain secara relatif sederhana:

  1. HPA atau VPA memperbarui replika pod atau sumber daya yang dialokasikan ke pod yang ada.
  2. Jika tidak terdapat cukup node untuk penskalaan yang direncanakan, CA akan memperhatikan keberadaan pod dalam status menunggu.
  3. CA mengalokasikan node baru.
  4. Modul didistribusikan ke node baru.

Tiga Tingkat Penskalaan Otomatis di Kubernetes: Cara Menggunakannya Secara Efektif
Sistem perluasan skala Kubernetes yang kolaboratif

Kesalahan umum dalam penskalaan otomatis Kubernetes

Ada beberapa masalah umum yang dihadapi pengembang saat mencoba menerapkan penskalaan otomatis.

HPA dan VPA bergantung pada metrik dan beberapa data historis. Jika sumber daya yang dialokasikan tidak mencukupi, modul akan diminimalkan dan tidak akan dapat menghasilkan metrik. Dalam hal ini, penskalaan otomatis tidak akan pernah terjadi.

Operasi penskalaan itu sendiri sensitif terhadap waktu. Kami ingin modul dan klaster dapat diskalakan dengan cepat - sebelum pengguna menyadari adanya masalah atau kegagalan. Oleh karena itu, waktu penskalaan rata-rata untuk pod dan cluster harus diperhitungkan.

Skenario ideal - 4 menit:

  1. 30 detik. Perbarui metrik target: 30βˆ’60 detik.
  2. 30 detik. HPA memeriksa nilai metrik: 30 detik.
  3. Kurang dari 2 detik. Pod dibuat dan masuk ke status tunggu: 1 detik.
  4. Kurang dari 2 detik. CA melihat modul yang menunggu dan mengirimkan panggilan ke node penyediaan: 1 detik.
  5. 3 menit. Penyedia cloud mengalokasikan node. K8 menunggu hingga siap: hingga 10 menit (tergantung beberapa faktor).

Skenario terburuk (lebih realistis) - 12 menit:

  1. 30 detik. Perbarui metrik target.
  2. 30 detik. HPA memeriksa nilai metrik.
  3. Kurang dari 2 detik. Pod dibuat dan memasuki kondisi siaga.
  4. Kurang dari 2 detik. CA melihat modul yang menunggu dan melakukan panggilan untuk menyediakan node.
  5. 10 menit. Penyedia cloud mengalokasikan node. K8 menunggu sampai siap. Waktu tunggu bergantung pada beberapa faktor, seperti penundaan vendor, penundaan OS, dan alat dukungan.

Jangan bingung antara mekanisme penskalaan penyedia cloud dengan CA kami. Yang terakhir berjalan di dalam cluster Kubernetes, sedangkan mesin penyedia cloud beroperasi berdasarkan distribusi node. Ia tidak mengetahui apa yang terjadi dengan pod atau aplikasi Anda. Sistem ini beroperasi secara paralel.

Cara mengelola penskalaan di Kubernetes

  1. Kubernetes adalah alat manajemen sumber daya dan orkestrasi. Operasi untuk mengelola pod dan sumber daya cluster merupakan tonggak penting dalam menguasai Kubernetes.
  2. Pahami logika skalabilitas pod dengan mempertimbangkan HPA dan VPA.
  3. CA hanya boleh digunakan jika Anda memiliki pemahaman yang baik tentang kebutuhan pod dan container Anda.
  4. Untuk mengonfigurasi klaster secara optimal, Anda perlu memahami bagaimana sistem penskalaan yang berbeda bekerja sama.
  5. Saat memperkirakan penskalaan waktu, ingatlah skenario terburuk dan terbaik.

Sumber: www.habr.com

Tambah komentar