Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan kait siklus hidup kontainer
Selama shutdown kontainer yang anggun, aplikasi Anda harus merespons SIGTERM
sinyal dengan memulai shutdownnya sehingga klien tidak mengalami downtime apa pun. Aplikasi Anda harus menjalankan prosedur pembersihan seperti berikut:
Menyimpan data
Menutup deskriptor file
Menutup koneksi database
Menyelesaikan permintaan dalam penerbangan dengan anggun
Keluar tepat waktu untuk memenuhi permintaan penghentian pod
Tetapkan masa tenggang yang cukup lama untuk pembersihan selesai. Untuk mempelajari cara merespons SIGTERM
sinyal, lihat dokumentasi untuk bahasa pemrograman yang Anda gunakan untuk aplikasi Anda.
Pengait siklus hidup kontaineriptables
diperbarui untuk tidak mengirim lalu lintas baru ke pod.
Container Lifecycle dan Endpoint dan EndpointSlice merupakan bagian dari yang berbeda. APIs Penting untuk mengatur ini. APIs Namun, ketika sebuah pod sedang dihentikan, Kubernetes API secara bersamaan akan memberitahukan kubelet (untuk Container Lifecycle) dan controller. EndpointSlice
Untuk informasi selengkapnya, termasuk diagram, lihat Menangani permintaan klien dengan anggun di Panduan
Ketika kubelet
mengirim SIGTERM
ke pod, EndpointSlice
controller menghentikan EndpointSlice
objek. Penghentian itu memberi tahu server API Kubernetes untuk memberi tahu setiap node yang akan diperbaruikube-proxy
. iptables
Meskipun tindakan ini terjadi pada saat yang sama, tidak ada dependensi atau urutan di antara mereka. Ada kemungkinan besar bahwa wadah menerima SIGKILL
sinyal jauh lebih awal daripada kube-proxy
pada setiap node memperbarui iptables
aturan lokal. Dalam hal ini, skenario yang mungkin termasuk yang berikut:
-
Jika aplikasi Anda segera dan terus terang membatalkan permintaan dan koneksi dalam penerbangan setelah menerima klien, lihat
SIGTERM,
kesalahan.500
-
Jika aplikasi Anda memastikan bahwa semua permintaan dan koneksi dalam penerbangan diproses sepenuhnya setelah menerima
SIGTERM
, selama masa tenggang, permintaan klien baru akan tetap dikirim ke wadah aplikasi karenaiptables
aturan mungkin belum diperbarui. Sampai prosedur pembersihan menutup soket server pada wadah, permintaan baru tersebut akan menghasilkan koneksi baru. Ketika masa tenggang berakhir, koneksi baru yang dibuat setelah dikirimSIGTERM
dijatuhkan tanpa syarat.
Untuk mengatasi skenario sebelumnya, Anda dapat menerapkan integrasi dalam aplikasi atau kait PreStop siklus hidup. Untuk informasi selengkapnya, termasuk diagram, lihat Mematikan aplikasi dengan anggun
Catatan: Terlepas dari apakah aplikasi dimatikan dengan anggun, atau hasil preStop
pengait, wadah aplikasi akhirnya dihentikan pada akhir masa tenggang. SIGKILL
Gunakan preStop
hook dengan sleep
perintah untuk menunda pengirimanSIGTERM
. Ini akan membantu untuk terus menerima koneksi baru sementara objek ingress merutkannya ke pod. Uji nilai waktu sleep
perintah untuk memastikan bahwa latensi Kubernetes dan dependensi aplikasi lainnya diperhitungkan, seperti yang ditunjukkan pada contoh berikut:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: containers: - name: nginx lifecycle: # This "sleep" preStop hook delays the Pod shutdown until # after the Ingress Controller removes the matching Endpoint or EndpointSlice preStop: exec: command: - /bin/sleep - "20" # This period should be turned to Ingress/Service Mesh update latency
Untuk informasi selengkapnya, lihat Pengait kontainer