Memahami Sampel Kubernetes: Jenis, Konfigurasi, dan Praktik Terbaik



Sumber



Artikel ini membahas tentang konfigurasi probe kesiapan, kesehatan, dan startup untuk mendeteksi dan bekerja dengan modul yang tidak sehat sebagaimana diterjemahkan oleh tim Kubernetes aaS .



Mengapa validasi Kubernetes dibutuhkan



Salah satu tantangan dengan sistem terdistribusi dan arsitektur layanan mikro adalah deteksi otomatis dari aplikasi yang salah, mengarahkan permintaan ke sistem lain yang tersedia, dan memperbaiki komponen yang rusak. Pemeriksaan kesehatan adalah salah satu cara untuk mengatasi masalah ini dan memastikan keandalan. Di Kubernetes, health check dikonfigurasi menggunakan probe untuk menentukan status setiap pod.



Secara default, Kubernetes memantau siklus proses pod dan mulai merutekan traffic ke pod saat kontainer bertransisi dari Tertunda ke Berhasil. Kubelet juga memantau aplikasi yang mogok dan memulai ulang modul untuk pemulihan.



Banyak pengembang percaya bahwa pengaturan dasar ini sudah cukup, terutama ketika aplikasi di dalam modul dikonfigurasi menggunakan manajer proses seperti PM2 untuk Node.js.



Namun, karena Kubernetes menganggap modul tersebut berfungsi baik dan siap untuk permintaan, segera setelah semua container dimulai, aplikasi dapat mulai menerima lalu lintas sebelum benar-benar siap. Ini dapat terjadi jika aplikasi perlu menginisialisasi beberapa status, membuat koneksi database, atau memuat data sebelum memproses logika aplikasi.



Jumlah waktu antara ketersediaan aktual aplikasi dan saat Kubernetes menganggapnya siap menjadi masalah ketika penerapan mulai menskalakan dan aplikasi yang tidak siap menerima lalu lintas dan mengirim kembali kesalahan 500.



Di sinilah probe Kubernetes digunakan untuk menentukan kapan container siap menerima lalu lintas dan kapan harus dimulai ulang. Dimulai dengan Kubernetes 1.16, tiga jenis probe didukung.



Dalam artikel ini, penulis membahas berbagai jenis probe, serta praktik terbaik dan alat untuk mendeteksi penerapan dengan potensi masalah konfigurasi.



Probe Kubernetes



Kubernetes mendukung pemeriksaan kesiapan dan kesehatan untuk versi ≤ 1.15. Probe peluncuran ditambahkan pada 1,16 sebagai fitur alfa dan dipindahkan ke beta pada 1,18.



PERINGATAN: Di versi 1.16, beberapa bagian dari Kubernetes API sudah tidak digunakan lagi. Gunakan panduan migrasi ini untuk memeriksa kompatibilitas.



Semua sampel memiliki parameter berikut:



  • initialDelaySeconds



    : ;
  • periodSeconds



    : ;
  • timeoutSeconds



    : - ( );
  • successThreshold



    : , ;
  • failureThreshold



    : . . , .




Pemeriksaan kesiapan digunakan untuk memberi tahu kubelet ketika aplikasi siap menerima lalu lintas baru. Jika aplikasi Anda membutuhkan waktu untuk menginisialisasi setelah memulai proses, siapkan probe kesiapan agar Kubernetes menunggu sebelum mengirim lalu lintas baru. Kasus penggunaan utama untuk pemeriksaan kesiapan adalah mengarahkan lalu lintas ke penerapan untuk layanan.





Sumber



Penting untuk diingat bahwa probe kesiapan bekerja sepanjang masa pakai modul. Ini berarti bahwa mereka akan diluncurkan tidak hanya saat startup, tetapi juga sepanjang waktu pengoperasian modul.



Ini diperlukan untuk situasi di mana aplikasi untuk sementara tidak tersedia, seperti memuat data besar atau menunggu koneksi eksternal. Dalam hal ini, kami tidak ingin mematikan aplikasi, tetapi menunggu hingga pulih. Probe kesiapan digunakan untuk mendeteksi skenario ini dan tidak mengirimkan lalu lintas ke modul ini sampai mereka melewati pemeriksaan kesiapan lagi.



Tes kinerja



Pemeriksaan kesehatan digunakan untuk memulai ulang wadah yang tidak sehat. Kubelet secara berkala menjalankan tes kesehatan, mendeteksi kesehatan pod, dan membunuhnya jika gagal dalam health check.



Uji coba dapat membantu aplikasi keluar dari kebuntuan. Tanpa health check, Kubernetes menganggap terkunci dalam kondisi sehat karena proses utama terus berjalan dari perspektif Kubernetes. Dengan menyiapkan health probe, kubelet dapat mendeteksi bahwa aplikasi dalam keadaan buruk dan akan memulai ulang pod untuk memulihkan ketersediaan.





Sumber



Luncurkan sampel



Tes startup mirip dengan tes siap, tetapi hanya dilakukan saat startup. Mereka dioptimalkan untuk peluncuran lambat wadah atau aplikasi dengan proses inisialisasi yang tidak dapat diprediksi. Dengan probe kesiapan, kami dapat menyesuaikan initialDelaySeconds



untuk menentukan berapa lama menunggu sebelum memeriksa kesiapan.



Sekarang pertimbangkan aplikasi yang terkadang perlu memuat data dalam jumlah besar atau melakukan operasi intensif sumber daya di awal proses. Karena ini initialDelaySeconds



adalah bilangan statis, kami dipaksa untuk selalu mengambil skenario terburuk (atau meningkatkan nilai failureThreshold



, yang dapat mempengaruhi perilaku lebih lanjut) dan menunggu dalam waktu yang lama, meskipun aplikasi ini tidak perlu melakukan inisialisasi yang lama.



Sebagai gantinya, menggunakan probe startup, kita dapat mengonfigurasifailureThreshold



dan periodSeconds



untuk menangani ketidakpastian ini dengan lebih baik. Misalnya, pengaturan failureThreshold



15 dan periodSeconds



5 berarti aplikasi akan memiliki waktu 15 x 5 = 75 detik untuk memulai sebelum kegagalan didiagnosis.



Pengaturan sampel



Sekarang setelah kami memahami berbagai jenis sampel, kami dapat menjelajahi tiga cara berbeda untuk menyiapkan setiap sampel.



HTTP



Kubelet mengirimkan permintaan HTTP GET ke URL yang ditentukan dan memeriksa respons 2xx atau 3xx. Anda dapat menggunakan titik akhir HTTP yang ada atau mengonfigurasi server HTTP ringan untuk pengujian (misalnya, server Ekspres dengan titik akhir /healthz



).



Probe HTTP mengambil parameter tambahan:



  • host



    : nama host untuk koneksi (secara default, ini adalah alamat IP modul);
  • scheme



    : HTTP atau HTTPS default;
  • path



    : jalur di server HTTP / S;
  • httpHeaders



    : tajuk khusus jika Anda memerlukan nilai tajuk untuk otentikasi, pengaturan CORS, dll.
  • port



    : nama atau nomor port untuk mengakses server.


livenessProbe:
  httpGet:
    path: /healthz
    port: 8080

      
      





TCP



Jika Anda hanya perlu memeriksa apakah koneksi TCP dapat dibuat, gunakan probe TCP. Modul ditandai sebagai sehat jika dapat membuat sambungan TCP. Menggunakan probe TCP dapat berguna untuk gRPC atau server FTP yang tidak mendukung panggilan HTTP.



readinessProbe:
  tcpSocket:
    port: 21

      
      





Perintah



Anda juga dapat mengkonfigurasi probe untuk menjalankan perintah shell. Pemeriksaan lolos jika perintah kembali dengan kode keluar 0. Jika tidak, modul ditandai sebagai rusak.



Jenis validasi ini dapat berguna jika Anda tidak ingin membuka server / port HTTP, atau jika lebih mudah untuk memvalidasi langkah-langkah inisialisasi menggunakan perintah. Misalnya, periksa apakah file konfigurasi dibuat atau jalankan perintah CLI.



readinessProbe:
  exec:
    command: ["/bin/sh", "-ec", "vault status -tls-skip-verify"]

      
      





Praktik terbaik untuk pengambilan sampel Kubernetes



Parameter sampel yang tepat bergantung pada aplikasi Anda, tetapi berikut adalah beberapa pedoman umum untuk Anda mulai:



  1. Untuk cluster Kubernetes yang lebih lama (≤ 1.15), gunakan probe siap lag awal untuk menangani fase startup container. Untuk melakukan ini, gunakan waktu persentil 99%. Namun buat pemeriksaan ini mudah karena uji kesiapan akan dijalankan selama masa pakai modul. Kami tidak ingin waktu probe habis karena pemeriksaan kesiapan membutuhkan waktu lama.
  2. (≥ 1.16) Kubernetes . (, /healthz



    ), . failureThreshold



    , , . .
  3. , . , , , . .
  4. , . , , , . , .


Singkatnya, probe yang terdefinisi dengan baik biasanya meningkatkan stabilitas dan ketersediaan. Pastikan untuk melacak waktu startup dan perilaku sistem untuk menyesuaikan pengaturan sampel Anda saat aplikasi berubah.



Alat



Mengingat pentingnya probe Kubernetes, Anda dapat menggunakan alat analisis resource Kubernetes untuk menemukan probe yang hilang. Alat-alat ini dapat dijalankan pada cluster yang ada atau tertanam dalam proses CI / CD untuk secara otomatis gagal menyebarkan beban kerja tanpa sumber daya yang dikonfigurasi dengan benar:



  • polaris adalah utilitas analisis sumber daya dengan toolbar cantik yang juga dapat digunakan sebagai webhook validasi atau alat baris perintah.
  • kube-score adalah alat analisis kode statis yang bekerja dengan Helm, Kustomize, dan file YAML standar.
  • popeye adalah alat utilitas (hanya baca) yang memindai cluster Kubernetes dan melaporkan potensi masalah konfigurasi.


Di dua saluran Telegram ini, Anda akan menemukan berita dari Kubernetes aaS kami dan pengumuman acara pertemuan @Kubernetes .



Apa lagi yang harus dibaca:






All Articles