Pod adalah objek terkecil dan paling dasar yang dapat digunakan di Kubernetes, dengan masing -masing pod mewakili satu instance proses (menjalankan) dalam cluster Anda.
Pod terdiri dari satu atau lebih kontainer dengan sumber daya dan penyimpanan jaringan bersama, termasuk spesifikasi untuk menjalankan wadah.
Salah satu penggunaan Kubernetes Pod adalah untuk membantu Anda menjalankan shutdown yang anggun dari aplikasi Anda yang berjalan di dalam wadah.
Misalnya, Anda ingin menerapkan shutdown anggun jika Anda ingin menunggu sampai semua pekerjaan saat ini atau pemrosesan permintaan selesai. Alasan lain mungkin juga termasuk kunci terdistribusi atau koneksi yang dibuka.
Anda dapat mengelola pod Kubernetes untuk menjalankan shutdown anggun menggunakan sinyal.
Misalnya, ketika pod perlu diakhiri, sinyal sigterm dikirim ke proses utama atau PID 1 di setiap wadah. Kemudian, hitungan mundur (masa tenggang 30 detik sebagai default) dimulai.
Setelah sinyal tiba, setiap wadah harus memulai shutdown anggun dari aplikasi dan keluar Anda.
Jika wadah tidak mengakhiri aplikasi yang sedang berjalan dalam masa tenggang, sinyal Sigkill dikirim untuk memaksa mengakhiri wadah.
Itu hanya satu contoh karena Anda dapat menggunakan sinyal lain untuk mengelola pod Kubernetes.
Dalam panduan ini, kita akan melihat lebih dekat bagaimana sinyal umum digunakan mengelola pod Kubernetes.
Tapi pertama …
Apa itu sinyal?
Sinyal adalah interupsi perangkat lunak yang dikirim ke program untuk menunjukkan bahwa suatu peristiwa telah terjadi.
Pada dasarnya, sinyal digunakan untuk mengkomunikasikan keadaan proses ke proses lain, sistem operasi (OS), atau perangkat keras. Ini menjadikan sinyal bagian inti dari sistem berbasis Linux/UNIX.
Ada dua jenis sinyal: maskable dan non-maskable.
Pengguna dapat mengabaikan atau mengubah sinyal maskable, tetapi tidak mungkin melakukan ini dengan sinyal yang tidak dapat masker. Sinyal non-maskable biasanya terjadi jika ada kegagalan perangkat keras yang tidak dapat dipulihkan.
Ada beberapa jenis sinyal untuk berbagai fungsi, seperti Sigint untuk mengirim interupsi dan Sigkill untuk membunuh suatu proses tanpa tindakan pembersihan.
Dengan cara ini, setiap sinyal dikaitkan dengan tindakan default, dan proses yang ditargetkan akan melakukan tindakan ini.
Beberapa tindakan ini dimaksudkan untuk:
- Berhenti atau mengakhiri proses
- Lanjutkan proses yang berhenti
- Inti dump (Buat file dump yang berisi gambar memori dari proses)
Untuk informasi komprehensif tentang sinyal Linux, Anda dapat mengunjungi halaman pria online untuk sinyal atau menjalankan Sinyal Man 7 Perintah menggunakan baris perintah untuk mengakses halaman manusia.
Hubungan antara wadah dan sinyal
Saat Anda menggunakan Docker, perintah Stop Docker menggunakan sinyal sigterm untuk proses yang berjalan sebagai PID 1 di wadah.
Ini menginstruksikannya untuk berhenti dan mengirim SigKill untuk sepenuhnya mengakhiri proses setelah masa tenggang tertentu (default 10 detik). Anda dapat mengonfigurasi masa tenggang ini melalui CLI menggunakan bendera -t atau –Time.
Di sisi lain, perintah Docker Kill secara instan mengirimkan sinyal Sigkill untuk mengakhiri wadah tanpa ada kesempatan untuk pemutusan yang anggun.
Plus, perintah Docker Kill hadir dengan bendera – SIGNAL, yang memungkinkan pengguna menentukan berbagai jenis sinyal untuk dikirim ke wadah.
Anda dapat memodifikasi perilaku ini dari DockerFile itu sendiri menggunakan perintah StopSignal untuk menetapkan sinyal yang berbeda. Ini mengubah perilaku penghentian wadah.
Bagaimana Kubernetes menggunakan sinyal
Kubernet bergantung pada sinyal sigm dan sigkill untuk mengelola pod.
Dengan demikian, sinyal adalah bagian inti dari siklus hidup Kubernetes Pods. Ini berlaku apakah Anda menggunakan perintah Kubectl Delete Pods untuk mengakhiri pod atau sebagai bagian dari penyebaran untuk mengganti pod aplikasi.
Kubernetes berperilaku dengan cara yang sama, di mana Sigterm dikirim pada awalnya, lalu menunggu waktu yang ditentukan sebelum mengirim perintah Sigkill.
Masa tunggu ini juga dikenal sebagai periode pemutusan pod yang anggun. Anda dapat mengonfigurasi ini melalui terminationGraceperiodSeconds dalam file konfigurasi atau flag –grace-period di antarmuka baris perintah Kubectl.
Anda dapat merujuk pada artikel luar biasa ini tentang penghentian Linux yang anggun dari perspektif Kubernetes untuk panduan yang luas tentang bagaimana semua hal ini bekerja.
Berikut adalah primer cepat dari apa yang terjadi: Jika proses tidak menangani sinyal sigter dengan benar, itu akan mendapatkan sinyal Sigkill untuk mengakhiri proses.
Kemudian, itu akan segera dihapus dari ETCD dan K8S API. Semua ini terjadi tanpa menunggu proses yang sebenarnya diakhiri dari node.
Ini berarti bahwa kesalahan penanganan perilaku penghentian dapat menyebabkan kesalahan yang tidak terduga dalam cluster Kubernetes.
Sinyal sigterm dikirim ke kedua wadah karena polong dapat berisi beberapa wadah. Oleh karena itu, itu adalah tanggung jawab pengembang untuk menerapkan strategi yang tepat untuk menangani single sigter, apakah itu pod tunggal atau multi-kontainer.
Sigterm dan Sigkill bukan satu -satunya sinyal yang dapat Anda gunakan dalam lingkungan Kubernetes. Sinyal lain, seperti SiGquit, juga penting untuk mengelola proses.
Misalnya, Anda dapat menggunakan SiGquit untuk menandakan penutupan proses yang anggun seperti server web.
Namun, Anda harus mengkonfigurasi sinyal -sinyal ini karena Kubernetes tidak memiliki cara asli untuk mengirim jenis sinyal lainnya.
Salah satu cara mengkonfigurasi sinyal yang berbeda adalah dengan mengonversi sinyal default ke yang berbeda di dalam wadah.
Misalkan Anda ingin menerapkan shutdown yang anggun dari suatu proses seperti Nginx atau Apache Web Server.
Dalam hal ini, Anda dapat menggunakan pengawas proses ringan dan sistem init seperti bodoh-init. Ini memungkinkan Anda untuk menulis ulang sinyal, seperti sigterm to sigquit atau sigwinch, di dalam wadah dengan menentukannya dalam konfigurasi Dockerfile pada saat pembuatan gambar.
Kesimpulan
Sinyal adalah umum di lingkungan Linux/UNIX apa pun, dan Anda dapat menggunakannya untuk mengelola dan melakukan tindakan yang berbeda.
Ini juga diterjemahkan ke sebagian besar lingkungan yang dimasukkan untuk manajemen kontainer di seluruh siklus hidup mereka.
Sigterm dan Sigkill diimplementasikan secara alami di lingkungan orkestrasi seperti Kubernetes. Ini berarti bahwa sinyal harus dipertimbangkan dalam pengembangan yang dimasukkan.
Selain itu, strategi yang tepat harus diimplementasikan untuk menangani sinyal -sinyal ini (atau sinyal khusus) di dalam wadah itu sendiri untuk mendefinisikan perilaku pada prosesor penanganan.