Dokumen ini menjelaskan cara melakukan pemeliharaan host pada instance Compute Engine yang mendasari node di cluster Google Kubernetes Engine (GKE). Anda hanya perlu mengelola pemeliharaan ini secara aktif untuk jenis instance Compute Engine tertentu yang tidak melakukan migrasi langsung, termasuk instance dengan GPU dan TPU. Strategi yang dijelaskan dalam dokumen ini berfungsi dengan baik untuk workload pelatihan dan inferensi. Jika Anda hanya perlu melakukan pemeliharaan host secara manual untuk setiap node, atau workload Anda dapat mentoleransi pemeliharaan host otomatis, lihat Memahami cara melakukan pemeliharaan host di GKE.
Strategi ini melakukan pemeliharaan host untuk grup node, dan, secara opsional, memulai upgrade cluster GKE.
Gunakan strategi paralel untuk node workload yang dapat mengalami satu periode downtime, seperti untuk node workload pelatihan. Gunakan strategi berkelanjutan untuk node workload yang dapat mengalami periode nonaktif dalam batch sambil mempertahankan ketersediaan sebagian besar resource, seperti untuk node workload inferensi.
Menggunakan strategi paralel untuk mengupdate node workload pelatihan
Strategi ini melakukan perubahan secara bersamaan untuk sekelompok node yang menggunakan akselerator. Anda dapat menggunakan strategi ini untuk workload pelatihan. Atau, Anda dapat menggunakannya untuk jenis workload lain yang metode perubahan paling tidak mengganggunya adalah dengan memiliki satu periode nonaktif total untuk semua node dalam grup dan workload yang berjalan di dalamnya.
Strategi ini mengikuti langkah-langkah tingkat tinggi berikut:
- Menghentikan workload: pilih node pool dan hentikan workload yang berjalan di dalamnya atau pindahkan workload ke node lain yang masih tersedia.
- Memicu pemeliharaan host: menerapkan label pemeliharaan ke semua node yang dipilih secara bersamaan dan menunggu proses selesai di semua node.
- Mengupgrade versi GKE: mengubah versi GKE node.
- Mulai ulang workload: setelah semua pemeliharaan dan upgrade host selesai, mulai ulang workload Anda.
Petunjuk yang diberikan melakukan perubahan untuk satu node pool. Namun, Anda dapat menyesuaikan langkah-langkah untuk melakukan perubahan pada beberapa node pool secara bersamaan. Sebelum memulai langkah-langkah ini, pastikan Anda memiliki waktu setidaknya beberapa jam saat workload ini tidak perlu dijalankan di node ini.
Untuk meminimalkan gangguan saat menerima perubahan penting untuk instance Compute Engine yang mendasarinya dan node GKE, gunakan periode nonaktif ini untuk melakukan pemeliharaan host dan upgrade versi GKE. Namun, Anda hanya dapat melakukan pemeliharaan host jika tidak ingin mengupgrade versi node GKE.
Pertimbangan sebelum memulai
Tinjau pertimbangan berikut sebelum Anda memulai:
- Hindari men-deploy ulang workload: untuk menghindari penundaan yang tidak perlu karena PodDisruptionBudgets, jangan men-deploy ulang workload apa pun hingga Anda menyelesaikan semua langkah.
- Rencanakan gangguan: pastikan workload Anda dapat terganggu selama jangka waktu tertentu. Langkah-langkah ini memerlukan waktu beberapa jam untuk diselesaikan, terutama karena waktu yang diperlukan untuk pemeliharaan host.
Melakukan update untuk semua node secara bersamaan
Untuk melakukan pemeliharaan host dan, secara opsional, upgrade versi GKE, selesaikan langkah-langkah berikut:
- Menyiapkan workload: hentikan workload, atau pastikan workload telah mengambil snapshot atau checkpoint terbaru.
Memulai dan memantau pemeliharaan host:
Sub-blok dari pemesanan yang menggunakan penjadwalan pemeliharaan yang dikelompokkan: memicu pemeliharaan di seluruh pemesanan, blok pemesanan, atau sub-blok pemesanan menggunakan sub-perintah
gcloud compute reservationsyang sesuai. Misalnya, perintah berikut memulai pemeliharaan untuk sub-blok:gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \ --block-name=BLOCK_NAME \ --sub-block-name=SUB_BLOCK_NAME \ --zone=ZONEGanti kode berikut:
RESERVATION_NAME: nama pemesanan.BLOCK_NAME: nama blok pemesanan.SUB_BLOCK_NAME: nama sub-blok pemesanan.ZONE: zona tempat pemesanan berada.
Compute Engine mulai mengosongkan dan mengupdate instance apa pun di sub-blok secara bersamaan. Proses ini mungkin memerlukan waktu beberapa jam.
Untuk memantau, lihat status pemeliharaan dengan memeriksa kolom metadata
upcomingGroupMaintenancedi resource pemesanan. Untuk mengetahui informasi selengkapnya, lihat Melihat status pemeliharaan.Instance yang menggunakan penjadwalan pemeliharaan independen: memicu pemeliharaan untuk instance on-demand atau untuk pemesanan yang tidak menggunakan sub-blok dengan menerapkan label
cloud.google.com/perform-maintenance=trueke node di node pool Anda:kubectl label nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME cloud.google.com/perform-maintenance=true --overwriteCompute Engine mulai mengosongkan dan mengupdate instance yang mendasarinya secara bersamaan. Proses ini mungkin memerlukan waktu beberapa jam. Untuk mengetahui informasi selengkapnya, lihat Proses penghentian halus.
Untuk memantau status pemeliharaan, periksa node. GKE menghapus label pemeliharaan saat pemeliharaan selesai, jika label tersebut diterapkan. Setelah pemeliharaan selesai, Anda dapat menemukan log dengan pesan berikut di Cloud Logging:
Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed.
Opsional: Upgrade versi node GKE: ikuti petunjuk untuk mengupgrade versi GKE node.
Menggunakan strategi berkelanjutan untuk mengupdate node workload inferensi
Strategi ini menguraikan pendekatan manual untuk melakukan pemeliharaan pada node GKE yang menjalankan workload inferensi. Hal ini melibatkan pengupdatean node dalam batch untuk mempertahankan ketersediaan layanan. Metode ini paling cocok untuk workload yang dapat menoleransi persentase tertentu replika yang offline untuk sementara.
Strategi ini mengikuti langkah-langkah tingkat tinggi berikut:
- Mengidentifikasi dan mengelompokkan node: pilih node pool yang akan diupdate. Kelompokkan node ke dalam batch yang ukurannya sesuai dengan toleransi kegagalan workload Anda.
- Lakukan iterasi melalui batch: untuk setiap batch, terapkan label pemeliharaan dan pantau batch node hingga label dihapus.
- Upgrade versi GKE: setelah semua batch menyelesaikan pemeliharaan host, ubah versi node GKE.
Pertimbangan sebelum memulai
Tinjau pertimbangan berikut sebelum Anda memulai:
- Pahami deployment Anda: keberhasilan memerlukan pengetahuan mendetail tentang distribusi workload, penempatan replika, dan domain kegagalan. Pastikan Anda mempertahankan kapasitas inferensi yang memadai selama proses berlangsung.
- Rencanakan ukuran batch: update node dalam batch. Ukuran setiap batch ditentukan oleh toleransi kesalahan workload Anda. Faktor yang perlu dipertimbangkan mencakup hal berikut:
- Jumlah replika per model inferensi.
- Distribusi replika di seluruh node dan domain gagal.
- PodDisruptionBudgets dapat membantu menerapkan jumlah maksimum Pod yang tidak aktif secara bersamaan.
- Rekomendasi: untuk menyederhanakan pengelolaan, pertimbangkan untuk mendedikasikan node pool yang berbeda untuk set replika yang berbeda, sehingga Anda dapat mengisolasi domain kegagalan di level node pool.
- Hitung batasan waktu: pertimbangkan faktor waktu berikut:
- Setiap batch dapat memerlukan waktu beberapa jam untuk menyelesaikan langkah pemeliharaan host.
- Hitung ukuran batch minimum untuk membantu memastikan bahwa semua pemeliharaan
selesai dalam batas waktu yang diperlukan:
MAINTENANCE_BLOCKS = floor(HOURS_TO_MAINTENANCE / 4)(denganHOURS_TO_MAINTENANCEadalah total waktu yang tersedia).MIN_PER_BATCH = TOTAL_NODE_COUNT / MAINTENANCE_BLOCKS
- Ukuran batch yang Anda pilih harus sama dengan atau lebih besar dari
MIN_PER_BATCH.
- Tinjau jenis workload tertentu: pertimbangkan hal berikut untuk
masing-masing jenis konfigurasi:
- Mixture of Experts (MOE): pastikan strategi pengelompokan Anda mempertahankan jumlah replika minimum yang diperlukan untuk setiap model.
- Penayangan terdisagregasi: pastikan Anda melacak semua replika yang terlibat dalam penyiapan terdisagregasi saat merencanakan batch.
- Node pool multi-host (TPU, MNNVL): untuk konfigurasi ini, Anda mungkin akan menghapus seluruh node pool sekaligus. Rencanakan domain kegagalan Anda di beberapa node pool dengan tepat.
Melakukan update bertahap dalam batch
Untuk melakukan update pemeliharaan host berkelanjutan, Anda dapat mengupdate kapasitas dari pemesanan yang menggunakan penjadwalan pemeliharaan yang dikelompokkan dalam batch yang terdiri dari satu atau beberapa sub-blok, atau Anda dapat mengupdate set node tertentu dalam cluster berdasarkan nama dengan penjadwalan pemeliharaan independen.
Pilih strategi yang sesuai untuk resource Anda:
Memperbarui pemesanan dalam batch sub-blok
Untuk melakukan pemeliharaan host berkelanjutan untuk pemesanan kapasitas dalam batch sub-blok, selesaikan langkah-langkah berikut:
Mengidentifikasi pemesanan untuk pemeliharaan: Identifikasi nama pemesanan kapasitas, dan blok pemesanan atau sub-blok pemesanan yang digunakan oleh cluster GKE. Untuk melakukannya, lakukan pencarian menggunakan label node GKE dan perintah
gcloud compute reservations:Cantumkan nama pemesanan serta ID topologi blok dan sub-blok fisik dari node di node pool Anda:
kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME \ -o custom-columns='NAME:.metadata.name,RESERVATION:.metadata.labels.cloud\.google\.com/reservation-name,BLOCK_ID:.metadata.labels.cloud\.google\.com/gce-topology-block,SUBBLOCK_ID:.metadata.labels.cloud\.google\.com/gce-topology-subblock'Ganti
NODE_POOL_NAMEdengan nama node pool.Perhatikan nilai output: nama pemesanan (misalnya,
nvidia-gb300-m7kp2xq9vd4j1), ID blok (misalnya,3f2a8c9b1d4e0756f8a2b3c1d9e4f0a5), dan ID sub-blok (misalnya,e7b91f4a3c2d58069e1a4b7f3d2c8056).Untuk mengidentifikasi nama resource blok pemesanan, buat kueri daftar blok pemesanan Compute Engine menggunakan nama pemesanan dan filter menurut ID blok:
gcloud compute reservations blocks list RESERVATION_NAME \ --zone=ZONE \ --project=PROJECT_ID \ --filter="physicalTopology.block=BLOCK_ID"Ganti kode berikut:
RESERVATION_NAME: nama pemesanan.ZONE: zona tempat pemesanan berada.PROJECT_ID: project ID tempat pemesanan berada.BLOCK_ID: ID blok yang diambil dari label node.
Catat nama blok dari output.
Untuk mengidentifikasi nama resource sub-blok pemesanan, buat kueri daftar sub-blok pemesanan menggunakan nama pemesanan dan nama blok, lalu filter menurut ID sub-blok:
gcloud compute reservations sub-blocks list RESERVATION_NAME \ --block-name=BLOCK_NAME \ --zone=ZONE \ --project=PROJECT_ID \ --filter="physicalTopology.subBlock=SUBBLOCK_ID"Ganti kode berikut:
RESERVATION_NAME: nama pemesanan.BLOCK_NAME: nama resource blok pemesanan.ZONE: zona tempat pemesanan berada.PROJECT_ID: project ID tempat pemesanan berada.SUBBLOCK_ID: ID sub-blok yang diambil dari label node.
Output akan menampilkan detail tentang sub-blok pemesanan yang cocok, termasuk nama resource-nya.
Membagi pemesanan menjadi beberapa batch: Bagi sub-blok pemesanan kapasitas yang diidentifikasi menjadi beberapa batch yang sama. Tentukan ukuran batch menggunakan formula yang dijelaskan dalam item daftar Menghitung batasan waktu di bagian Pertimbangan sebelum memulai sebelumnya. Setiap batch sesuai dengan satu atau beberapa sub-blok pemesanan, dan setiap batch harus setidaknya berukuran sub-blok.
Melakukan pemeliharaan host: Untuk setiap batch, selesaikan langkah-langkah berikut:
Pilih batch sub-blok pemesanan dan picu pemeliharaan host. Anda dapat memicu pemeliharaan di seluruh pemesanan, blok pemesanan, atau sub-blok pemesanan. Untuk jenis mesin seperti A4X, A4X Max, TPU v6e, dan TPU7x, Anda harus memicu pemeliharaan dengan cara ini. Pemeliharaan dilakukan dalam grup sub-blok. Gunakan perintah
gcloud compute reservations sub-blocks perform-maintenance.gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \ --block-name=BLOCK_NAME \ --sub-block-name=SUB_BLOCK_NAME \ --zone=ZONEGanti kode berikut:
RESERVATION_NAME: nama pemesanan.BLOCK_NAME: nama blok pemesanan.SUB_BLOCK_NAME: nama sub-blok pemesanan.ZONE: zona tempat pemesanan berada.
Compute Engine mulai mengosongkan dan mengupdate instance apa pun di sub-blok secara bersamaan. Proses ini mungkin memerlukan waktu beberapa jam.
Pantau status pemeliharaan dengan melihat status pemeliharaan dengan memeriksa kolom metadata
upcomingGroupMaintenancedi resource pemesanan. Untuk mengetahui informasi selengkapnya, lihat Melihat status pemeliharaan pemesanan.Ulangi langkah sebelumnya untuk setiap batch yang tersisa hingga Anda menyelesaikan pemeliharaan host untuk semua batch.
Opsional: Upgrade versi node GKE: lakukan langkah ini hanya setelah pemeliharaan host selesai untuk semua sub-blok pemesanan, guna menghindari skenario saat node GKE di-deploy di host yang belum menyelesaikan pemeliharaan. Ikuti petunjuk untuk mengupgrade versi GKE node.
Mengupdate node dalam batch
Untuk melakukan pemeliharaan host berkelanjutan untuk instance on-demand atau pemesanan yang tidak mendukung sub-blok dalam batch, selesaikan langkah-langkah berikut:
Identifikasi node untuk pemeliharaan: Identifikasi semua node tempat Anda ingin melakukan pemeliharaan, dan simpan daftar ini. Untuk mengidentifikasi node, gunakan salah satu metode berikut atau pilih secara manual:
Dapatkan semua node di cluster yang menggunakan akselerator (TPU atau GPU):
kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints[]? | select(.key=="nvidia.com/gpu" or .key=="google.com/tpu")) | .metadata.name'Mendapatkan semua node dalam node pool tertentu:
kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME --no-headers -o custom-columns=":metadata.name"Ganti
NODE_POOL_NAMEdengan nama node pool.Mendapatkan semua node dengan label tertentu:
kubectl get nodes -l LABEL -o jsonpath='{.items[*].metadata.name}'Ganti
LABELdengan label node.
Membagi node menjadi beberapa batch: Bagi node yang diidentifikasi menjadi beberapa batch yang sama. Tentukan ukuran batch menggunakan formula yang dijelaskan dalam item daftar Menghitung batasan waktu di bagian Pertimbangan sebelum memulai sebelumnya.
Melakukan pemeliharaan host: Untuk setiap batch, selesaikan langkah-langkah berikut:
Pilih batch node dan picu pemeliharaan di lapisan instance menggunakan
instancesAPI dengan menerapkan label pemeliharaan:kubectl label nodes LIST_OF_NODES_IN_BATCH cloud.google.com/perform-maintenance=true --overwriteGanti
LIST_OF_NODES_IN_BATCHdengan daftar node yang dipisahkan spasi dari batch. Contoh,node-1 node-2 node-3.Compute Engine mulai mengosongkan dan mengupdate instance yang mendasarinya secara bersamaan. Proses ini mungkin memerlukan waktu beberapa jam. Untuk mengetahui informasi selengkapnya, lihat Proses penghentian halus.
Memantau status pemeliharaan host. GKE akan menghapus label pemeliharaan setelah pemeliharaan selesai, jika label tersebut diterapkan. Setelah pemeliharaan selesai, Anda dapat menemukan log dengan pesan berikut di Logging:
Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed.Ulangi langkah sebelumnya untuk setiap batch yang tersisa hingga Anda menyelesaikan pemeliharaan host untuk semua batch.
Opsional: Upgrade versi node GKE: lakukan langkah ini hanya setelah pemeliharaan host selesai untuk semua node, guna menghindari skenario saat node GKE di-deploy di host yang belum menyelesaikan pemeliharaan. Ikuti petunjuk untuk mengupgrade versi GKE node.
Mengupgrade versi GKE node
Pertimbangkan jumlah node yang ingin Anda upgrade secara bersamaan. Dengan strategi paralel, Anda melakukan pemeliharaan host untuk seluruh node pool atau beberapa node pool secara bersamaan. Dengan strategi berkelanjutan, Anda melakukan pemeliharaan host secara berkelompok. Tentukan metode upgrade yang akan Anda gunakan berdasarkan ukuran grup node:
- Strategi paralel: jika setiap node pool Anda memiliki 100 node atau kurang per zona, gunakan upgrade lonjakan. Jika setiap node pool Anda memiliki lebih dari 100 node per zona, hapus dan buat ulang node pool tersebut.
- Strategi berkelanjutan: jika batch Anda memiliki 100 node, per zona, per node pool, atau kurang, gunakan upgrade lonjakan. Jika batch Anda memiliki lebih dari 100 node, per zona, per node pool, hapus dan buat ulang node tersebut.
Menggunakan upgrade lonjakan
Konfigurasikan upgrade lonjakan, menggunakan setelan
maxUnavailableuntuk menentukan jumlah node yang tidak tersedia secara bersamaan, per zona, dalam node pool. Misalnya, jika Anda memiliki 18 node di satu zona dalam node pool, tetapkan nilai kolommaxUnavailableke18.Setelan ini berfungsi paling baik saat menggunakan kapasitas dari pemesanan yang tidak memiliki kapasitas berlebih. Untuk mengetahui informasi selengkapnya tentang alasan menggunakan setelan ini, lihat Mengupgrade di lingkungan dengan resource terbatas.
Upgrade node pool dengan menjalankan perintah berikut. Jika Anda ingin mengupgrade beberapa node pool, jalankan perintah ini untuk setiap node pool:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool NODE_POOL_NAME \ --cluster-version VERSION \ --location CONTROL_PLANE_LOCATION \ --quietGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.NODE_POOL_NAME: nama node pool.VERSION: target upgrade otomatis yang direkomendasikan untuk node pool. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan informasi upgrade untuk node pool cluster Standard. Jika cluster Anda tidak memiliki target upgrade otomatis yang direkomendasikan, periksa entri Update versi terbaru di catatan rilis GKE.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.
Menghapus dan membuat ulang node
Hapus node pool dan buat ulang menggunakan versi yang lebih baru:
Hapus node pool:
gcloud container node-pools delete NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATIONBuat ulang node pool, dengan meneruskan versi baru menggunakan flag
--cluster-version. Teruskan target upgrade otomatis yang direkomendasikan untuk node pool. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan informasi upgrade untuk node pool cluster Standard. Jika cluster Anda tidak memiliki target upgrade otomatis yang direkomendasikan, periksa entri Update versi terbaru di Catatan rilis GKE.