Halaman ini menunjukkan cara memberi tahu Google Kubernetes Engine (GKE) untuk menjalankan Pod Anda di node di zona Google Cloud tertentu menggunakan topologi zona. Jenis penempatan ini berguna dalam situasi seperti berikut:
- Pod harus mengakses data yang disimpan di persistent disk Compute Engine zona.
- Pod harus berjalan bersama resource zona lain seperti instance Cloud SQL.
Anda juga dapat menggunakan penempatan zona dengan pemilihan rute traffic sesuai topologi untuk mengurangi latensi antara klien dan workload. Untuk mengetahui detail tentang pemilihan rute traffic sesuai topologi, lihat Pemilihan rute sesuai topologi.
Menggunakan topologi zona untuk mengontrol penempatan Pod adalah mekanisme lanjutan Kubernetes yang hanya boleh digunakan jika situasi Anda mengharuskan Pod berjalan di zona tertentu. Di sebagian besar lingkungan produksi, sebaiknya Anda menggunakan resource regional, yang merupakan default GKE, jika memungkinkan.
Metode penempatan zona
Topologi zona yang dibangun di Kubernetes dengan
label node topology.kubernetes.io/zone: ZONE. Untuk memberi tahu
GKE agar menempatkan Pod di zona tertentu, gunakan salah satu
metode berikut:
- nodeAffinity: Menentukan aturan nodeAffinity dalam spesifikasi Pod untuk satu atau beberapa zona Google Cloud . Metode ini lebih fleksibel daripada nodeSelector karena memungkinkan Anda menempatkan Pod di beberapa zona.
nodeSelector: Menentukan nodeSelector di spesifikasi Pod untuk satu zona Google Cloud .
Class komputasi: Konfigurasikan Pod Anda untuk menggunakan class komputasi GKE. Pendekatan ini memungkinkan Anda menentukan daftar set zona Google Cloud yang diprioritaskan. Hal ini memungkinkan workload dipindahkan secara dinamis ke kumpulan zona yang paling disukai saat node tersedia di zona tersebut. Untuk mengetahui informasi selengkapnya, lihat Tentang class komputasi kustom.
Pertimbangan
Penempatan Pod zona yang menggunakan topologi zona memiliki pertimbangan berikut:
- Cluster harus berada di region Google Cloud yang sama dengan zona yang diminta.
- Di cluster Standard, Anda harus menggunakan node auto-provisioning atau membuat node pool dengan node di zona yang diminta. Cluster Autopilot secara otomatis mengelola proses ini untuk Anda.
- Cluster Standard harus berupa cluster regional.
Harga
Topologi zona adalah kemampuan penjadwalan Kubernetes dan ditawarkan tanpa biaya tambahan di GKE.
Untuk mengetahui detail harga, lihat harga GKE.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Untuk menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda memiliki cluster GKE yang sudah ada di region Google Cloud yang sama dengan zona di mana Anda ingin menempatkan Pod. Untuk membuat cluster baru, lihat Membuat cluster Autopilot.
Menempatkan Pod di beberapa zona menggunakan nodeAffinity
nodeAffinity Kubernetes menyediakan mekanisme kontrol penjadwalan fleksibel yang
mendukung beberapa pemilih label dan operator logis. Gunakan nodeAffinity jika Anda
ingin membiarkan Pod berjalan di salah satu dari serangkaian zona (misalnya, di
us-central1-a atau us-central1-f).
Simpan manifes berikut sebagai
multi-zone-affinity.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx-multi-zone template: metadata: labels: app: nginx-multi-zone spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - us-central1-a - us-central1-fManifes ini membuat Deployment dengan tiga replika dan menempatkan Pod di
us-central1-aatauus-central1-fberdasarkan ketersediaan node.Pastikan cluster Anda berada di region
us-central1. Jika cluster Anda berada di region berbeda, ubah zona di kolom nilai manifes menjadi zona yang valid di region cluster Anda.Opsional: Jika Anda menyediakan VM TPU, gunakan zona AI, seperti
us-central1-ai1a. Zona AI adalah lokasi khusus yang dioptimalkan untuk workload AI/ML dalam region Google Cloud .Membuat Deployment:
kubectl create -f multi-zone-affinity.yamlGKE membuat Pod di node di salah satu zona yang ditentukan. Beberapa Pod dapat berjalan di node yang sama. Anda dapat menggunakan anti-afinitas Pod untuk memberi tahu GKE agar menempatkan setiap Pod di node yang terpisah (opsional).
Menempatkan Pod di satu zona menggunakan nodeSelector
Untuk menempatkan Pod di satu zona, gunakan nodeSelector di spesifikasi Pod. nodeSelector
setara dengan aturan nodeAfinitas requiredDuringSchedulingIgnoredDuringExecution
yang memiliki satu zona yang ditentukan.
Simpan manifes berikut sebagai
single-zone-selector.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-singlezone spec: replicas: 3 selector: matchLabels: app: nginx-singlezone template: metadata: labels: app: nginx-singlezone spec: nodeSelector: topology.kubernetes.io/zone: "us-central1-a" containers: - name: nginx image: nginx:latest ports: - containerPort: 80Manifes ini memberi tahu GKE untuk menempatkan semua replika di Deployment di zona
us-central1-a.Membuat Deployment:
kubectl create -f single-zone-selector.yaml
Memprioritaskan penempatan Pod di zona yang dipilih menggunakan class komputasi
Kelas komputasi GKE menyediakan mekanisme kontrol yang memungkinkan Anda menentukan daftar prioritas konfigurasi node. Preferensi zona memungkinkan Anda menentukan zona tempat Anda ingin GKE menempatkan Pod.
Menggunakan prioritas zona lokasi
Menentukan preferensi zona di class komputasi menggunakan prioritas zona lokasi memerlukan GKE versi 1.33.1-gke.1545000 atau yang lebih baru.
Contoh berikut membuat class komputasi yang menentukan daftar zona pilihan untuk Pod.
Langkah-langkah ini mengasumsikan bahwa cluster Anda berada di region us-central1. Jika cluster Anda berada di region berbeda, ubah nilai zona dalam manifes menjadi zona yang valid di region cluster Anda.
Simpan manifes berikut sebagai
zones-custom-compute-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: zones-custom-compute-class spec: priorities: - location: zones: [us-central1-a, us-central1-b] - location: zones: [us-central1-c] activeMigration: optimizeRulePriority: true nodePoolAutoCreation: enabled: true whenUnsatisfiable: ScaleUpAnywayManifes class komputasi ini mengubah perilaku penskalaan sebagai berikut:
- GKE mencoba menempatkan Pod di
us-central1-aatau dius-central1-b. - Jika
us-central1-adanus-central1-btidak memiliki kapasitas yang tersedia, GKE akan mencoba menempatkan Pod dius-central1-c. - Jika
us-central1-ctidak memiliki kapasitas yang tersedia, kolomwhenUnsatisfiable: ScaleUpAnywayakan membuat GKE menempatkan Pod di zona mana pun yang tersedia di region tersebut. - Jika zona yang memiliki prioritas lebih tinggi di class komputasi tersedia
nanti, kolom
activeMigration.optimizeRulePriority: trueakan membuat GKE memindahkan Pod ke zona tersebut dari zona dengan prioritas lebih rendah. Migrasi ini menggunakan Anggaran Gangguan Pod untuk membantu memastikan ketersediaan layanan.
- GKE mencoba menempatkan Pod di
Membuat Class Komputasi Kustom:
kubectl create -f zones-custom-compute-class.yamlGKE membuat class komputasi kustom yang dapat direferensikan oleh workload Anda.
Simpan manifes berikut sebagai
custom-compute-class-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-zonal-preferences spec: replicas: 3 selector: matchLabels: app: nginx-zonal-preferences template: metadata: labels: app: nginx-zonal-preferences spec: nodeSelector: cloud.google.com/compute-class: "zones-custom-compute-class" containers: - name: nginx image: nginx:latest ports: - containerPort: 80Membuat Deployment:
kubectl create -f custom-compute-class-deployment.yaml
Menggunakan prioritas zoneTypes lokasi
Menentukan preferensi zona di kelas komputasi menggunakan prioritas jenis zona lokasi memerlukan GKE versi 1.35.2-gke.1842000 atau yang lebih baru. Memilih jenis zona untuk pod Anda akan, bergantung pada setelan Anda, menggunakan atau membuat node pool baru yang mencakup semua zona dari jenis tertentu.
Anda dapat menentukan jenis zona berikut di class komputasi:
STANDARD: Tujuan umum, Google Cloud zona di suatu region. Direkomendasikan untuk workload non-ML.AI: Zona khusus yang dioptimalkan untuk kapasitas AI/akselerator. Direkomendasikan untuk workload AI/ML.CLUSTER_DEFAULT: Zona yang ditentukan dalamautoprovisioning-locationscluster (atau lokasi cluster jika kosong).
Untuk mengetahui informasi selengkapnya tentang zona standar dan AI, lihat Tentang zona AI
Batasan untuk menggabungkan kolom
Anda tidak dapat menggabungkan kolom zoneTypes dengan kolom location.zones atau
kolom reservations.specific dalam entri prioritas yang sama. Anda dapat menggunakan
kolom zoneTypes dan kolom location.zones di class komputasi
yang sama asalkan Anda menempatkannya dalam entri prioritas terpisah.
Selain itu, kolom priorityDefaults berlaku untuk setiap prioritas di class komputasi. Konsekuensi dari aturan ini adalah bahwa menetapkan kolom zoneTypes di kolom priorityDefaults akan mencegah Anda menggunakan kolom location.zones atau kolom reservations.specific dalam prioritas apa pun.
Contoh yang valid: Prioritas terpisah
Contoh berikut valid karena zones dan zoneTypes ditentukan dalam entri prioritas terpisah:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: valid-zonal-preferences
spec:
priorities:
- location:
zones: [us-central1-a]
- location:
zoneTypes: [AI]
Contoh tidak valid: Prioritas sama
Contoh berikut tidak valid karena zones dan zoneTypes ditentukan dalam entri prioritas yang sama:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: invalid-same-priority
spec:
priorities:
- location:
zones: [us-central1-a]
zoneTypes: [AI] # Error: mutually exclusive
Contoh tidak valid: Bertentangan dengan default
Contoh berikut tidak valid karena menetapkan kolom zoneTypes di bagian priorityDefaults bertentangan dengan kolom zones di entri prioritas:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: invalid-defaults-conflict
spec:
priorityDefaults:
location:
zoneTypes: [AI]
priorities:
- location:
zones: [us-central1-a] # Error: merges with defaults
Contoh penggunaan
Contoh berikut membuat class komputasi yang menentukan daftar jenis zona pilihan untuk Pod.
Simpan manifes berikut sebagai
zone-types-custom-compute-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: zone-types-custom-compute-class spec: priorities: - location: zones: [us-central1-c] - location: zoneTypes: - AI - location: zoneTypes: - CLUSTER_DEFAULT activeMigration: optimizeRulePriority: true nodePoolAutoCreation: enabled: true whenUnsatisfiable: ScaleUpAnywayManifes class komputasi ini mengubah perilaku penskalaan sebagai berikut:
- GKE mencoba menempatkan Pod di salah satu zona
us-central1-c. - Jika
us-central1-ctidak memiliki kapasitas yang tersedia, GKE akan mencoba menempatkan Pod di zonaAImana pun di region tersebut. - Jika tidak ada zona
AIyang memiliki kapasitas yang tersedia, GKE akan mencoba menempatkan Pod di salah satu zonaCLUSTER_DEFAULT. - Jika tidak ada zona
CLUSTER_DEFAULTyang memiliki kapasitas yang tersedia, kolomwhenUnsatisfiable: ScaleUpAnywayakan membuat GKE menempatkan Pod di zona mana pun yang tersedia di region tersebut. - Jika zona yang memiliki prioritas lebih tinggi di class komputasi tersedia
nanti, kolom
activeMigration.optimizeRulePriority: trueakan membuat GKE memindahkan Pod ke zona tersebut dari zona dengan prioritas lebih rendah. Migrasi ini menggunakan Anggaran Gangguan Pod untuk membantu memastikan ketersediaan layanan.
- GKE mencoba menempatkan Pod di salah satu zona
Membuat Class Komputasi Kustom:
kubectl create -f zone-types-custom-compute-class.yamlGKE membuat class komputasi kustom yang dapat direferensikan oleh workload Anda.
Simpan manifes berikut sebagai
custom-compute-class-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-zonal-preferences spec: replicas: 3 selector: matchLabels: app: nginx-zonal-preferences template: metadata: labels: app: nginx-zonal-preferences spec: nodeSelector: cloud.google.com/compute-class: "zone-types-custom-compute-class" containers: - name: nginx image: nginx:latest ports: - containerPort: 80Membuat Deployment:
kubectl create -f custom-compute-class-deployment.yaml
Cara NAP mengevaluasi zoneTypes
Saat menentukan apakah akan menggunakan kembali node pool yang ada atau membuat node pool baru, node auto-provisioning (NAP) biasanya memerlukan kecocokan persis antara zona node pool yang ada dan zoneTypes yang Anda minta. Jika Anda memperbarui prioritas untuk
menyertakan jenis zona yang lebih luas (misalnya, berpindah dari [AI] ke [AI, STANDARD]), NAP
akan menyediakan node pool baru agar sesuai dengan bentuk persis yang baru.
Pemangkasan berbasis jenis mesin
Jika jenis mesin (seperti h3-standard-88) hanya tersedia di subset zona yang ditentukan oleh jenis (misalnya, hanya di us-central1-a), GKE akan otomatis memangkas daftar lokasi node pool agar hanya menyertakan zona tempat hardware tersebut ada secara fisik.
Zona AI target
Zona AI adalah zona khusus yang digunakan untuk workload pelatihan dan inferensi AI/ML. Zona ini menyediakan kapasitas akselerator ML yang signifikan. Untuk mengetahui informasi selengkapnya, lihat dokumentasi zona AI.
Dalam dokumen ini dan dokumentasi GKE, "zona standar" atau "zona" mengacu pada zona non-AI dalam region Google Cloud .
Sebelum Anda menggunakan zona AI di GKE, pertimbangkan karakteristik berikut:
- Untuk menggunakan zona AI dengan cluster GKE yang ada, bidang kontrol Anda harus menjalankan versi 1.36.4-gke.1495002 atau yang lebih baru, atau 1.37.1-gke.1552000 atau yang lebih baru. Versi ini memungkinkan bidang kontrol mengenali zona dan mendaftarkan node. Jika bidang kontrol Anda menjalankan versi 1.35 atau yang lebih lama, atau versi yang lebih lama dari versi minimum ini, upgrade bidang kontrol sebelum membuat node pool di zona AI. Jika upgrade tidak memungkinkan, hubungi Cloud Customer Care.
- Zona AI terpisah secara fisik dari zona standar untuk menyediakan ruang penyimpanan dan daya tambahan. Pemisahan ini dapat menyebabkan latensi yang lebih tinggi, yang umumnya dapat ditoleransi untuk workload AI/ML.
- Zona AI memiliki akhiran dengan notasi
ai. Misalnya, zona AI di regionus-central1diberi namaus-central1-ai1a. - Saat ini, hanya VM TPU yang didukung.
- Bidang kontrol cluster berjalan di satu atau beberapa zona standar dalam region yang sama dengan zona AI.
Anda dapat menjalankan VM tanpa TPU yang terpasang di zona AI hanya jika Anda memenuhi persyaratan berikut:
- Anda sudah menjalankan workload lain yang menggunakan VM TPU di zona yang sama.
- VM non-TPU adalah Spot VM, yang terkait dengan pemesanan, atau bagian dari node pool dengan rasio VM akselerator terhadap VM tujuan umum tertentu.
Zona AI berbagi komponen, seperti koneksi jaringan dan peluncuran software, dengan zona standar yang memiliki akhiran yang sama dalam region yang sama. Untuk workload ketersediaan tinggi, sebaiknya gunakan zona yang berbeda. Misalnya, hindari penggunaan
us-central1-ai1adanus-central1-auntuk ketersediaan tinggi.
Secara default, GKE tidak men-deploy workload Anda di zona AI. Untuk menggunakan zona AI, Anda harus mengonfigurasi salah satu opsi berikut:
- (Direkomendasikan) ComputeClass: tetapkan prioritas tertinggi Anda untuk meminta TPU on-demand di zona AI. ComputeClass membantu Anda menentukan daftar konfigurasi hardware yang diprioritaskan untuk workload Anda. Untuk mengetahui contohnya, lihat Tentang ComputeClasses.
- node auto-provisioning: gunakan
nodeSelectorataunodeAffinitydalam spesifikasi pod Anda untuk menginstruksikan node auto-provisioning agar membuat node pool di zona AI. Jika workload Anda tidak secara eksplisit menargetkan zona AI, node auto-provisioning hanya akan mempertimbangkan zona standar atau zona dari--autoprovisioning-locationssaat membuat node pool baru. Konfigurasi ini membantu memastikan bahwa workload yang tidak menjalankan model AI/ML tetap berada di zona standar, kecuali jika Anda mengonfigurasinya secara eksplisit. Untuk contoh manifes yang menggunakannodeSelector, lihat Menetapkan zona default untuk node yang dibuat secara otomatis. - GKE Standard: jika Anda mengelola node pool secara langsung, gunakan zona AI di flag
--node-locationssaat membuat node pool. Sebagai contoh, lihat Men-deploy workload TPU di GKE Standard.
Memverifikasi penempatan Pod
Untuk memverifikasi penempatan Pod, buat daftar Pod dan periksa label node. Beberapa Pod mungkin berjalan di satu node, sehingga Anda mungkin tidak melihat Pod tersebar di beberapa zona jika menggunakan nodeAffinity.
Mencantumkan Pod Anda:
kubectl get pods -o wideOutputnya adalah daftar Pod yang berjalan dan node GKE yang sesuai.
Jelaskan node:
kubectl describe node NODE_NAME | grep "topology.kubernetes.io/zone"Ganti
NODE_NAMEdengan nama node.Outputnya mirip dengan yang berikut ini:
topology.kubernetes.io/zone: us-central1-a
Jika Anda ingin GKE menyebarkan Pod secara merata di beberapa zona untuk peningkatan failover di beberapa domain gagal, gunakan topologySpreadConstraints.
Langkah berikutnya
- Memisahkan workload GKE satu sama lain
- Menjaga traffic jaringan dalam topologi yang sama dengan node
- Menyebarkan Pod di beberapa domain gagal