Halaman ini membantu Anda memahami, mengonfigurasi, dan memantau peristiwa gangguan yang mungkin terjadi di node Google Kubernetes Engine (GKE) yang menjalankan workload kecerdasan buatan (AI) atau machine learning (ML), termasuk:
- Alasan GPU dan TPU memerlukan pengelolaan gangguan
- Menangani gangguan workload di GKE
- Mengonfigurasi GKE untuk menghentikan workload Anda dengan baik
- Memantau progres penghentian halus yang aktif
Selama siklus proses cluster GKE yang berjalan lama, gangguan berkala pada workload terjadi karena peristiwa pemeliharaan otomatis yang dikeluarkan oleh Google Cloud untuk resource Compute Engine yang mendasari infrastruktur GKE. Jika gangguan ini memengaruhi node GKE Anda yang menjalankan workload AI/ML, GKE perlu memulai ulang workload yang sedang berjalan dan node yang mendasarinya.
Alasan GPU dan TPU memerlukan pengelolaan gangguan
Cluster GKE Anda mengelola siklus proses node GKE. Node ini disediakan di VM Compute Engine. VM Compute Engine secara berkala mengalami peristiwa host yang disebabkan oleh berbagai alasan seperti update hardware atau software, pemeliharaan, dan kegagalan hardware. Peristiwa host dikeluarkan untuk infrastruktur Google Cloud yang mendasarinya dan mengabaikan kebijakan dan pengecualian pemeliharaan GKE.
Sebagian besar VM Compute Engine, dengan beberapa pengecualian, memiliki kebijakan pemeliharaan host yang ditetapkan ke migrasi langsung, yang berarti bahwa ada sedikit atau tidak ada gangguan pada beban kerja yang sedang berjalan. Namun, class VM tertentu tidak mendukung migrasi langsung, termasuk VM dengan GPU dan TPU terpasang tempat beban kerja AI/ML Anda berjalan. Selain itu, GKE mungkin juga memulai ulang TPU yang dicadangkan dan on demand dengan menggunakan preemption, yang memungkinkan GKE menyediakan TPU yang lebih besar, karena alasan defragmentasi.
Saat peristiwa host terjadi, GKE menghentikan node dan Pod-nya. Jika Pod di-deploy sebagai bagian dari workload yang lebih besar seperti Job atau Deployment, GKE akan memulai ulang Pod di node yang terpengaruh. Anda atau framework yang Anda gunakan untuk menangani workload atau Tugas dapat bereaksi dengan tepat terhadap gangguan. Misalnya, Anda dapat menyimpan status tugas pelatihan AI untuk mengurangi hilangnya data.
Proses penghentian tuntas
Alur kerja berikut menunjukkan cara GKE menjalankan penghentian node yang halus setelah gangguan dikeluarkan oleh Compute Engine:
- Compute Engine mengeluarkan nilai
TERMINATE_ON_HOST_MAINTENANCE
yang diperbarui untuk kunci metadata VMmaintenance-event
. Dalam waktu 60 detik, hal berikut akan terjadi:
Komponen sistem menerapkan label node baru berikut yang ditetapkan ke
true
untuk menunjukkan bahwa pemeliharaan sedang berlangsung:cloud.google.com/active-node-maintenance
GKE menerapkan taint node untuk mencegah Pod baru dijadwalkan di node: cloud.google.com/impending-node-termination:NoSchedule. Sebaiknya ubah workload untuk menoleransi taint ini karena penghentian yang diketahui terjadi.
Komponen
maintenance-handler
mulai mengeluarkan Pod sesuai urutan Pod workload terlebih dahulu, lalu Pod sistem (misalnya,kube-system
).GKE mengirimkan sinyal shutdown SIGTERM untuk memberi tahu Pod beban kerja yang sedang berjalan di node tentang penghentian yang akan segera terjadi. Pod dapat menggunakan pemberitahuan ini untuk menyelesaikan tugas yang sedang berlangsung. GKE berupaya semaksimal mungkin untuk menghentikan Pod ini secara terkendali.
Notifikasi maintenance-event
terjadi saat VM Compute Engine yang mendasari node GKE mengalami peristiwa host yang mengganggu yang menyebabkan penghentian node. Jika hal ini terjadi, Compute Engine akan memperbarui kunci metadata maintenance-event
.
Periode notifikasi pemeliharaan lanjutan sebelum node dihentikan adalah
sebagai berikut:
- GPU: 60 menit.
- TPU: 5 menit.
Setelah itu, penghentian node akan terjadi dan node pengganti akan dialokasikan. GKE akan menghapus label dan taint saat proses selesai. Untuk meningkatkan periode penghentian untuk workload Anda yang menggunakan GPU atau TPU, selesaikan langkah-langkah di bagian Mengonfigurasi GKE untuk menghentikan workload Anda secara terkendali.
Menangani gangguan workload di GKE
Untuk mengelola peristiwa penghentian GKE dan mengurangi gangguan pada workload di cluster Anda, GKE memantau notifikasi ini untuk Anda, dan akan melakukan hal berikut:
- GKE memberi tahu beban kerja Anda sebelum penghentian yang akan segera terjadi: Saat node GKE perlu berhenti untuk peristiwa pemeliharaan host, GKE akan mengirimkan sinyal SIGTERM ke Pod yang berjalan di node pada awal periode pemberitahuan awal. Sinyal OS seperti SIGTERM dapat ditangani secara native oleh sebagian besar library standar, misalnya Python dan Go. Framework yang dapat menangkap SIGTERM mencakup MaxText, Pax, dan JAX dengan Orbax.
- GKE menghentikan workload Anda secara terkendali: Anda dapat mengonfigurasi GKE untuk menghentikan workload Anda secara terkendali dengan masa tenggang penghentian Pod. Pod dapat bereaksi terhadap sinyal SIGTERM untuk menyelesaikan tugas yang sedang berlangsung dan menjalankan tindakan penghentian yang Anda tentukan, seperti menyimpan status pelatihan. Selama penghentian terkendali, GKE akan melakukan upaya terbaik untuk menghentikan Pod secara terkendali dan menjalankan proses pembersihan atau tindakan penghentian yang Anda tentukan dalam aplikasi, misalnya, dengan menyimpan data beban kerja untuk mengurangi kehilangan data atau menyimpan status pelatihan.
Mengonfigurasi GKE untuk menghentikan workload Anda dengan baik
Di bagian ini, Anda akan mengonfigurasi GKE untuk mengelola siklus proses aplikasi dan meminimalkan gangguan pada workload. Jika Anda tidak mengonfigurasi masa tenggang, masa tenggang akan ditetapkan secara default ke 30 detik.
GKE melakukan upaya terbaik untuk menghentikan Pod ini secara terkendali dan untuk
menjalankan tindakan penghentian yang Anda tentukan, misalnya, menyimpan status
pelatihan. GKE mengirimkan sinyal SIGTERM
ke Pod di awal masa tenggang. Jika Pod tidak keluar pada akhir masa tenggang, GKE akan mengirimkan sinyal SIGKILL
lanjutan ke proses apa pun yang masih berjalan di penampung apa pun di Pod.
Untuk mengonfigurasi periode penghentian halus untuk workload, ikuti petunjuk untuk GPU atau TPU.
GPU
Dalam manifes Pod, tetapkan kolom spec.terminationGracePeriodSeconds
ke
nilai hingga maksimum 3.600 detik (60 menit). Misalnya, untuk mendapatkan
waktu notifikasi 10 menit, di manifes Pod, tetapkan
kolom spec.terminationGracePeriodSeconds
ke 600 detik, sebagai berikut:
spec:
terminationGracePeriodSeconds: 600
Sebaiknya tetapkan masa tenggang penghentian yang cukup lama agar tugas yang sedang berlangsung dapat diselesaikan dalam jangka waktu notifikasi.
TPU
Untuk mengalokasikan waktu maksimum guna melakukan proses pembersihan, tetapkan
kolom spec.terminationGracePeriodSeconds
ke 300 detik (lima menit) dalam
manifes Pod Anda. Contoh:
spec:
terminationGracePeriodSeconds: 300
Sebaiknya tetapkan masa tenggang penghentian yang cukup lama agar tugas yang sedang berlangsung dapat diselesaikan dalam jangka waktu notifikasi.
Jika beban kerja Anda menggunakan framework ML seperti MaxText, Pax, atau JAX dengan Orbax, beban kerja tersebut dapat menangkap sinyal SIGTERM shutdown dan memulai proses checkpointing. Untuk mempelajari lebih lanjut, lihat Autocheckpoint TPU.
Memantau progres penghentian halus yang aktif
Di cluster GKE dengan bidang kontrol yang menjalankan 1.29.1-gke.1425000
atau yang lebih baru, GKE men-deploy komponen tingkat node yang disebut
gpu-maintenance-handler
. Komponen ini berjalan di semua node GPU dan TPU bersama
dengan komponen bidang kontrol yang sesuai. Komponen ini melakukan hal berikut:
- Memproses peristiwa penghentian tuntas.
- Respons peristiwa gangguan yang akan segera terjadi di VM GKE dengan meneruskan sinyal SIGTERM ke workload yang sedang berjalan di node. Gangguan ini dicatat ke dalam log sebagai permintaan Pengusiran Pod dan Penghapusan.
GKE menambahkan label dan taint ke node dengan status penghentian yang akan segera terjadi. GKE memantau notifikasi peristiwa host, seperti
pemeliharaan, menggunakan komponen sistem maintenance-handler
yang berjalan di setiap
node GPU dan TPU.
GKE mencatat peristiwa penghentian halus berikut ke dalam log:
- Saat mendeteksi gangguan karena penghentian node yang akan datang seperti peristiwa pemeliharaan host GCE: GKE menambahkan label node berikut:
cloud.google.com/active-node-maintenance
ditetapkan ketrue
. - Saat membatasi penjadwalan workload baru: GKE
akan menerapkan
taint
cloud.google.com/impending-node-termination:NoSchedule
.
Saat GKE menyelesaikan penghentian yang wajar, label dan taint akan dihapus.
Untuk memantau status penghentian halus aktif yang disebabkan oleh gangguan, Anda dapat melihat log gpu-maintenance-handler
menggunakan Konsol atau Google Cloud CLI.
gcloud
Temukan nama node dan Pod yang menjalankan instance
gpu-maintenance-handler
dengan menjalankan perintah berikut:kubectl get pods -l name=maintenance-handler -A -o wide
Setiap baris output menyertakan Nama node, Nama pod, dan status.
Periksa log:
kubectl logs -n=kube-system MAINTENANCE_HANDLER_POD_NAME
Ganti
MAINTENANCE_HANDLER_POD_NAME
dengan nama instance pengendali.Jika peristiwa pemeliharaan terdeteksi, Pod akan mencatat pesan, menerapkan label, dan pengusiran dimulai.
Periksa label dan taint node:
kubectl describe node NODE_NAME
Ganti
NODE_NAME
dengan nama node yang ingin Anda lihat.Output menampilkan daftar label dan taint node yang akan dipantau.
Konsol
Buka halaman Logs Explorer di konsol Google Cloud:
Di kolom Kueri, tentukan kueri berikut:
resource.type="k8s_container" resource.labels.namespace_name="kube-system" resource.labels.container_name="maintenance-handler" resource.labels.cluster_name="CLUSTER_NAME"
Ganti
CLUSTER_NAME
: Nama cluster Anda.