Jika Anda sudah familiar dengan Kubernetes dan ingin menjalankan operasi tertentu sebelum atau sesudah kontainer aplikasi dimulai atau dihentikan, Anda dapat mengonfigurasi manajemen siklus hidup aplikasi. Sebagai contoh, Anda dapat menerapkan sumber daya sebelum kontainer berjalan atau mematikan aplikasi secara mulus sebelum kontainer dihentikan. Topik ini menjelaskan cara mengonfigurasi PostStart, PreStop, dan TerminationGracePeriodSeconds di Serverless App Engine (SAE).
Ikhtisar
Pod hook (kontainer hook) adalah mekanisme yang diimplementasikan oleh komponen kubelet yang dikelola oleh Kubernetes. Mekanisme ini digunakan untuk mengeksekusi tugas kustom pada tahap-tahap penting dalam siklus hidup kontainer, termasuk sebelum proses kontainer dimulai (preStart) dan dihentikan (preStop). Hook memungkinkan Kubernetes untuk mengelola siklus hidup kontainer dengan fleksibilitas dan presisi yang lebih besar. Untuk informasi lebih lanjut, lihat Container Lifecycle Hooks.
PostStart Setting: Hook ini langsung dipicu setelah sebuah kontainer dibuat. Hook memberi tahu Kubernetes bahwa kontainer telah dibuat. Hook tidak mengirim parameter ke penanganan hook yang sesuai. Jika penanganan hook gagal dieksekusi, kontainer akan dihentikan, dan kebijakan restart kontainer digunakan untuk menentukan apakah akan me-restart kontainer tersebut.
PreStop Setting: Hook ini dipicu sebelum sebuah kontainer dihapus, sering digunakan untuk operasi pembersihan atau mematikan layanan secara mulus. Penanganan hook harus sepenuhnya dieksekusi sebelum permintaan untuk menghapus kontainer dikirim ke Docker daemon. Docker daemon mengirim semafor SIGTERM kepada dirinya sendiri untuk menghapus kontainer, tanpa memedulikan hasil eksekusi penanganan hook.
Timeout Duration Settings of Graceful Shutdown (TerminationGracePeriodSeconds): Pengaturan ini memberikan waktu jeda untuk pematian mulus, memastikan bahwa tugas pembersihan dan pematian yang diperlukan selesai sebelum aplikasi dipaksa dihentikan. Hal ini meningkatkan stabilitas dan keandalan sistem serta mencegah masalah seperti kehilangan data, kegagalan permintaan, dan ketidaktersediaan layanan yang disebabkan oleh penghentian paksa. Dikombinasikan dengan hook PreStop, ini memfasilitasi proses pematian mulus yang lengkap.
Persiapan
Prosedur bervariasi tergantung pada skenario:
Buat aplikasi
Masuk ke Konsol SAE. Di panel navigasi sebelah kiri, pilih . Pada halaman yang muncul, pilih wilayah di bilah navigasi atas dan namespace dari daftar drop-down Namespace, lalu klik Create Application.
Di bagian Basic Information halaman Create Application, konfigurasikan parameter yang diperlukan dan klik Next: Advanced Settings.
Pada halaman yang muncul, temukan dan perluas bagian Application Lifecycle Management.
Modifikasi aplikasi yang sedang berjalan
Setelah Anda menerapkan ulang aplikasi, aplikasi tersebut akan di-restart. Untuk mencegah kesalahan tak terduga seperti gangguan bisnis, kami sarankan Anda menerapkan aplikasi selama jam-jam sepi.
Masuk ke Konsol SAE. Di panel navigasi sebelah kiri, pilih . Pada halaman yang muncul, pilih wilayah di bilah navigasi atas dan namespace dari daftar drop-down Namespace, lalu klik nama aplikasi target.
Di halaman Basic Information aplikasi target, klik Deploy Application.
Pada halaman Deploy Application, temukan dan perluas bagian Application Lifecycle Management.
Modifikasi aplikasi yang dihentikan
Masuk ke Konsol SAE. Di panel navigasi sebelah kiri, pilih . Pada halaman yang muncul, pilih wilayah di bilah navigasi atas dan namespace dari daftar drop-down Namespace, lalu klik nama aplikasi target.
Di halaman Basic Information aplikasi target, klik Modify Application Configurations.
Pada halaman Modify Application Configurations, temukan dan perluas bagian Application Lifecycle Management.
Prosedur
Di bagian Application Lifecycle Management, konfigurasikan PostStart Settings, PreStop Settings, dan Timeout Duration Settings of Graceful Shutdown sesuai kebutuhan.
Kami merekomendasikan Anda mengonfigurasi ketiganya untuk mencapai manajemen siklus hidup yang lengkap untuk kontainer, memastikan startup dan shutdown layanan yang lancar, pelepasan sumber daya yang teratur, dan tanpa gangguan bisnis.
Pengaturan PostStart
Konfigurasikan PostStart di tab PostStart Settings di bagian Application Lifecycle Management.
SAE menyediakan dua interpreter shell:
>_ /bin/sh
>_ /bin/bash
Dalam contoh ini, tulis Hello from the postStart handler di dalam skrip /usr/share/message sebelum Anda memulai aplikasi.
Dalam lingkungan produksi, konfigurasikan parameter berdasarkan kebutuhan bisnis Anda. Contoh yang diberikan dalam bagian ini hanya untuk verifikasi minimal fitur dan tidak boleh digunakan dalam lingkungan produksi.

Verifikasi:
Setelah aplikasi dibuat atau diterapkan ulang, gunakan Webshell untuk memeriksa apakah skrip /usr/share/message berisi konten yang diharapkan.

Pengaturan PreStop
Konfigurasikan PreStop di tab PreStop Settings di bagian Application Lifecycle Management.
SAE menyediakan dua interpreter shell:
>_ /bin/sh
>_ /bin/bash
Dalam contoh ini, jalankan perintah Perform cleanup dan tulis Perform cleanup di dalam skrip /cleanup.log. Tunggu selama 100 detik sebelum melakukan verifikasi.
Dalam lingkungan produksi, konfigurasikan parameter berdasarkan kebutuhan bisnis Anda. Contoh yang diberikan dalam bagian ini hanya untuk verifikasi minimal fitur dan tidak boleh digunakan dalam lingkungan produksi.

Verifikasi:
Di halaman Basic Information aplikasi, klik Stop Application, lalu gunakan Webshell untuk memeriksa apakah file /cleanup.log berisi konten yang diharapkan.

Pengaturan Durasi Timeout Pematian Mulus (TerminationGracePeriodSeconds)
Konfigurasikan durasi timeout pematian mulus di tab Timeout Duration Settings of Graceful Shutdown di bagian Application Lifecycle Management.
Jika durasi timeout pematian mulus yang Anda atur lebih pendek daripada periode pematian mulus (termasuk waktu untuk eksekusi hook PreStop dan waktu untuk proses kontainer SIGTERM signal), kontainer akan dipaksa dihentikan (nama sinyal: SIGKILL, kode keluar: 137) saat timeout berakhir, mengganggu proses pematian mulus. Sebagai contoh, jika periode pemberhentian pematian mulus kontainer adalah 100 detik dan periode timeout pematian mulus diatur menjadi 60 detik, kontainer akan dihentikan sebelum pematian mulus selesai.

Verifikasi:
Dalam contoh ini, durasi timeout pematian mulus diatur lebih pendek daripada periode pematian mulus untuk tujuan verifikasi.
Di halaman Basic Information aplikasi, klik Stop Application, lalu gunakan Webshell untuk memeriksa apakah kode keluar 137 muncul di dalam kontainer.
Selama pematian mulus, kontainer akan tetap berada dalam status Terminating hingga periode timeout terlampaui.