Apa yang terjadi ketika kubernetes memulai ulang container atau cluster ditingkatkan?

Aug 18 2020

Kami menggunakan Helm Chart untuk men -deploy aplikasi di cluster Kubernetes .

Kami memiliki layanan statefulsets dan headless. Untuk menginisialisasi mTLS, kami telah membuat jenis 'pekerjaan' dan dalam 'perintah' kami mengirimkan skrip shell & python sebagai argumen. Dan membuat jenis 'cronjob' untuk memperbarui sertifikat.

Kami telah menulis 'docker-entrypoint.sh' di dalam 'gambar buruh pelabuhan' untuk beberapa pekerjaan inisialisasi & untuk menghasilkan sertifikat TLS.

Pertanyaan untuk ditanyakan:

  • Siapa (Helm Chart / Kubernetes) yang menangani penskalaan / pemantauan / restart container?
  • Apakah itu menyebarkan gambar buruh pelabuhan baru jika pod gagal / dimulai ulang?
  • Akankah buruh pelabuhan ENTRYPOINT dijalankan setelah penampung gagal / dimulai ulang?
  • Apakah 'job' & 'cronjob' dijalankan jika container dimulai ulang?

Apa langkah lain yang diambil oleh Kubernetes? Apakah Anda juga akan membagikan wawasan kontainer?

Jawaban

4 ArghyaSadhu Aug 18 2020 at 14:28

Kubernetes dan bukan helm akan memulai ulang container yang gagal secara default kecuali Anda menyetelnya restartPolicy: Neverdi spesifikasi pod

Memulai ulang container sama persis dengan memulai pertama kali. Karenanya saat memulai ulang, Anda dapat mengharapkan hal-hal terjadi dengan cara yang sama seperti saat memulai penampung untuk pertama kali.

Secara internal kubelet agent yang berjalan di setiap node kubernetes mendelegasikan tugas untuk memulai container ke runtime container pengaduan OCI seperti buruh pelabuhan, containerd dll yang kemudian memutar image buruh pelabuhan sebagai container di node.

Saya berharap skrip entrypoint akan dieksekusi di keduanya memulai restart wadah.

Apakah itu menyebarkan gambar buruh pelabuhan baru jika pod gagal / dimulai ulang?

Ini membuat penampung baru dengan gambar yang sama seperti yang ditentukan dalam spesifikasi pod.

Apakah 'job' & 'cronjob' dijalankan jika container dimulai ulang?

Jika sebuah container yang merupakan bagian dari cronjob gagal, kubernetes akan terus merestart (kecuali restartPolicy: Neverdalam spesifikasi pod) container tersebut sampai pekerjaan waktu tidak dianggap gagal. Periksa ini untuk bagaimana membuat cronjob tidak merestart container jika gagal. Anda dapat menentukan backoffLimituntuk mengontrol berapa kali akan mencoba lagi sebelum pekerjaan dianggap gagal.

Peningkatan skala setara dengan penjadwalan dan memulai instance lain dari penampung yang sama di node Kubernetes yang sama atau sama sekali berbeda.

Sebagai catatan tambahan, Anda harus menggunakan abstraksi tingkat yang lebih tinggi seperti penerapan daripada pod karena ketika sebuah pod gagal, Kubernetes mencoba untuk memulainya kembali pada node yang sama tetapi ketika sebuah penerapan gagal, Kubernetes akan mencoba untuk memulai kembali di node lain juga jika tidak dapat memulai pod pada node terjadwal saat ini.