Halaman ini membantu Anda memahami, mengonfigurasi, dan memantau peristiwa gangguan yang mungkin terjadi pada 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 lancar
- Memantau progres penghentian tuntas yang aktif
Selama siklus proses cluster GKE yang berjalan lama, secara berkala gangguan pada beban kerja terjadi karena pemeliharaan otomatis yang dikeluarkan oleh Google Cloud untuk resource Compute Engine yang mendasari infrastruktur GKE. Ketika gangguan ini memengaruhi Node GKE yang menjalankan workload AI/ML, GKE perlu memulai ulang beban kerja 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 mengadakan peristiwa yang disebabkan oleh berbagai alasan seperti update perangkat keras atau perangkat lunak, pemeliharaan, dan perangkat keras gagal. Peristiwa host dikeluarkan untuk layanan Google Cloud infrastruktur dan abaikan Kebijakan dan pengecualian pemeliharaan GKE.
Sebagian besar VM Compute Engine, dengan beberapa pengecualian, memiliki kebijakan pemeliharaan host ditetapkan ke live migration, yang berarti tidak ada gangguan atau gangguan pada beban kerja yang berjalan. Namun, kelas VM tertentu tidak mendukung migrasi langsung, termasuk VM dengan GPU dan TPU tempat AI/ML Anda workload berjalan. Selain itu, GKE juga dapat memulai ulang TPU on-demand dengan menggunakan preemption, yang memungkinkan GKE untuk menyediakan TPU yang lebih besar terhadap defragmentasi alasan.
Saat terjadi peristiwa host, 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 pada node yang terpengaruh. Terserah Anda atau kerangka kerja yang Anda gunakan untuk menangani beban kerja atau Tugas agar bereaksi dengan tepat terjadinya gangguan. Misalnya, Anda dapat menyimpan status tugas pelatihan AI untuk mengurangi kehilangan data.
Proses penghentian halus
Alur kerja berikut menunjukkan cara GKE mengeksekusi node halus penghentian setelah gangguan dikeluarkan oleh Compute Engine:
- Compute Engine mengeluarkan nilai
TERMINATE_ON_HOST_MAINTENANCE
yang telah diupdate untuk kunci metadata VMmaintenance-event
. Dalam 60 detik, hal berikut akan terjadi:
Komponen sistem menerapkan label node baru berikut yang ditetapkan ke
true
untuk menunjukkan bahwa pemeliharaan sedang dalam proses: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 beban kerja agar dapat menoleransi taint ini karena penghentian yang diketahui dan terjadi.
Komponen
maintenance-handler
mulai mengeluarkan Pod sesuai urutan workload Pod terlebih dahulu, lalu Pod sistem (misalnya,kube-system
).GKE mengirimkan sinyal penonaktifan SIGTERM untuk memberi tahu beban kerja yang sedang berjalan Pod di node yang akan segera dimatikan. Pod dapat menggunakan pemberitahuan ini untuk menyelesaikan setiap tugas yang sedang berlangsung. GKE melakukan upaya terbaik untuk menghentikan layanan Pod dengan lancar.
Notifikasi maintenance-event
terjadi saat VM Compute Engine yang mendasari
node GKE mengalami peristiwa host yang mengganggu
yang menyebabkan penghentian node. Saat hal ini terjadi, Compute Engine akan memperbarui maintenance-event
kunci metadata.
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 dialokasikan. GKE menghapus label dan taint setelah proses selesai. Kepada meningkatkan periode penghentian untuk workload Anda menggunakan GPU atau TPU, selesaikan langkah-langkah dalam Konfigurasikan GKE untuk menghentikan workload Anda dengan lancar.
Menangani gangguan beban kerja di GKE
Untuk mengelola peristiwa penghentian GKE dan mengurangi gangguan pada di cluster Anda, GKE memantau notifikasi ini untuk Anda, dan akan melakukan hal berikut:
- GKE memberi tahu workload Anda terlebih dahulu saat terjadi shutdown: Saat node GKE perlu dihentikan untuk host peristiwa pemeliharaan, GKE mengirimkan sinyal SIGTERM ke Pod yang sedang berjalan pada node di awal periode pemberitahuan lanjutan. Sinyal OS seperti SIGTERM dapat ditangani secara native oleh sebagian besar contoh Python dan Buka. Framework yang dapat menangkap SIGTERM mencakup MaxText, Pax, dan JAX dengan Orbax.
- GKE menghentikan workload Anda dengan lancar: Anda dapat mengonfigurasi GKE untuk menghentikan workload Anda secara halus dengan Pod masa tenggang penghentian. Pod dapat bereaksi terhadap sinyal SIGTERM untuk menyelesaikan semua tugas yang sedang berlangsung dan menjalankan tindakan penghentian apa pun yang Anda tentukan, seperti menyimpan status pelatihan. Selama penghentian secara halus, GKE berusaha untuk menghentikan Pod dengan lancar dan untuk menjalankan proses pembersihan atau tindakan penghentian yang Anda tentukan di aplikasi dengan, misalnya, menyimpan data beban kerja untuk mengurangi kehilangan data atau menyimpan status pelatihan.
Mengonfigurasi GKE untuk menghentikan workload Anda dengan lancar
Pada bagian ini, Anda mengonfigurasi GKE untuk mengelola siklus proses aplikasi dan meminimalkan gangguan terhadap beban kerja Anda. Jika Anda tidak mengonfigurasi masa tenggang, masa tenggang default adalah 30 detik.
GKE melakukan upaya terbaik untuk menghentikan Pod ini dengan baik dan
mengeksekusi tindakan penghentian yang Anda tentukan, misalnya, menyimpan
status. GKE mengirimkan sinyal SIGTERM
ke Pod di awal masa tenggang
titik. Jika Pod tidak keluar pada akhir masa tenggang, GKE
mengirimkan sinyal SIGKILL
tindak lanjut ke proses apa pun yang masih berjalan di
container-nya di Pod.
Guna mengonfigurasi periode penghentian halus untuk workload, ikuti instruksi untuk GPU atau TPU.
GPU
Dalam manifes Pod, tetapkan kolom spec.terminationGracePeriodSeconds
ke
maksimum 3600 detik (60 menit). Misalnya, untuk mendapatkan
selama 10 menit, dalam manifes Pod Anda, setel
spec.terminationGracePeriodSeconds
menjadi 600 detik, sebagai berikut:
spec:
terminationGracePeriodSeconds: 600
Sebaiknya tetapkan masa tenggang penghentian yang cukup lama untuk semua periode tugas untuk diselesaikan dalam jangka waktu notifikasi.
TPU
Untuk mengalokasikan waktu maksimum melakukan proses pembersihan, atur
spec.terminationGracePeriodSeconds
hingga 300 detik (lima menit) di
Manifes pod. Contoh:
spec:
terminationGracePeriodSeconds: 300
Sebaiknya tetapkan masa tenggang penghentian yang cukup lama untuk semua periode tugas untuk diselesaikan dalam jangka waktu notifikasi.
Jika beban kerja Anda menggunakan framework ML seperti MaxText, Pax, atau JAX dengan Orbax, workload dapat menangkap sinyal SIGTERM shutdown dan memulai proses {i>checkpointing<i}. Untuk mempelajari lebih lanjut, lihat Titik pemeriksaan otomatis TPU.
Memantau progres penghentian tuntas yang aktif
Di cluster GKE dengan bidang kontrol yang menjalankan 1.29.1-gke.1425000
atau yang lebih baru, GKE men-deploy komponen level node yang disebut
gpu-maintenance-handler
. Komponen ini berjalan pada semua node GPU dan TPU
dengan komponen bidang kontrol yang sesuai. Komponen ini melakukan hal berikut:
- Memproses peristiwa penghentian halus.
- Tanggapi peristiwa gangguan yang akan segera terjadi di VM GKE dengan meneruskan sinyal SIGTERM ke beban kerja node yang sedang berjalan. Gangguan ini dicatat sebagai permintaan Penghapusan Pod dan Penghapusan.
GKE menambahkan label dan taint ke node yang akan segera dimatikan
. GKE memantau notifikasi peristiwa host, seperti
pemeliharaan mesin, dengan 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 GCE
peristiwa pemeliharaan host: GKE menambahkan label node berikut:
cloud.google.com/active-node-maintenance
ditetapkan ketrue
. - Saat membatasi workload baru agar tidak dijadwalkan: GKE
menerapkan
cloud.google.com/impending-node-termination:NoSchedule
taint.
Ketika GKE menyelesaikan penghentian tuntas, label dan taint akan dihapus.
Untuk memantau status penghentian tuntas
aktif yang disebabkan oleh gangguan,
Anda dapat melihat log gpu-maintenance-handler
dengan menggunakan Konsol atau Google Cloud CLI.
gcloud
Mencari 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 mencakup Node name, Pod name, dan status.
Periksa log:
kubectl logs -n=kube-system MAINTENANCE_HANDLER_POD_NAME
Ganti
MAINTENANCE_HANDLER_POD_NAME
dengan nama dari instance pengendali.Jika peristiwa pemeliharaan terdeteksi, Pod akan mencatat pesan, menerapkan label, dan penghapusan dimulai.
Periksa label dan taint node:
kubectl describe node NODE_NAME
Ganti
NODE_NAME
dengan nama node yang ingin Anda lihat.Output menunjukkan daftar label node dan taint 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.