

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
<a name="lifecycle-hooks"></a>

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 kontainer](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/) memungkinkan kontainer untuk mengetahui peristiwa dalam siklus hidup pengelolaannya. Container dapat menjalankan kode yang diimplementasikan dalam handler ketika hook siklus hidup yang sesuai dijalankan. Pengait siklus hidup kontainer menyediakan solusi untuk sifat asinkron Kubernetes dan cloud. Pendekatan ini dapat mencegah hilangnya koneksi yang diteruskan ke pod penghentian sebelum sumber daya masuk dan `iptables` diperbarui untuk tidak mengirim lalu lintas baru ke pod.

Siklus hidup kontainer,`Endpoint`, dan `EndpointSlice` merupakan bagian dari API yang berbeda. Penting untuk mengatur API ini. Namun, ketika sebuah pod sedang dihentikan, Kubernetes API secara bersamaan akan memberitahukan kubelet (untuk siklus hidup kontainer) dan controller. `EndpointSlice` Untuk informasi selengkapnya, termasuk diagram, lihat [Menangani permintaan klien dengan anggun di Panduan](https://docs.aws.amazon.com/eks/latest/best-practices/load-balancing.html#_gracefully_handle_the_client_requests) *Praktik Terbaik Amazon EKS*.

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 diperbarui`kube-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`SIGTERM`, klien melihat 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 karena `iptables` 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 dikirim `SIGTERM` 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](https://docs.aws.amazon.com/eks/latest/best-practices/load-balancing.html#_gracefully_shutdown_applications) di Panduan Praktik *Terbaik Amazon EKS*.

**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 pengiriman`SIGTERM`. 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 [Container hook](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks) dalam dokumentasi Kubernetes dan [aplikasi Gracefully shutdown di](https://docs.aws.amazon.com/eks/latest/best-practices/load-balancing.html#_gracefully_shutdown_applications) Panduan Praktik Terbaik Amazon EKS.*