Anda dapat mengontrol apakah node Google Kubernetes Engine (GKE) secara fisik berlokasi relatif satu sama lain dalam zona menggunakan kebijakan penempatan ringkas.
Ringkasan
Saat membuat node pool dan workload di cluster GKE, Anda dapat menetapkan kebijakan penempatan rapat, yang menentukan bahwa node atau workload tersebut harus ditempatkan dalam jarak fisik yang saling berdekatan dalam zona. Posisi node yang saling berdekatan dapat mengurangi latensi jaringan antar-node, yang dapat sangat berguna untuk workload batch yang terkait erat.
Gunakan penempatan rapat dengan Autopilot GKE
Batasan
- GKE menyediakan workload dalam penempatan rapat di zona yang sama.
- Penempatan rapat tersedia di
Balanced
dan GPU A100. Untuk mempelajari lebih lanjut, lihat jenis mesin. - Penempatan rapat tersedia untuk Pod yang dikelompokkan pada maksimal 150 node.
- Migrasi langsung untuk node tidak didukung.
Mengaktifkan kebijakan penempatan rapat
Agar dapat mengaktifkan penempatan rapat untuk Autopilot GKE, tambahkan
nodeSelector
ke spesifikasi Pod dengan kunci berikut:
cloud.google.com/gke-placement-group
adalah ID yang Anda tetapkan untuk grup Pod yang harus berjalan bersama, dalam grup penempatan rapat yang sama.Salah satu kunci berikut untuk menentukan jenis resource:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
Contoh berikut adalah kutipan spesifikasi Pod yang memungkinkan penempatan
rapat. ID grup penempatan adalah placement-group-1
dan
kelas komputasinya adalah Balanced
:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
Setiap grup penempatan dibatasi hingga 150 node. Sebaiknya batasi grup penempatan hanya untuk workload yang mendapatkan manfaat dari grup, dan distribusikan workload Anda ke dalam grup penempatan terpisah jika memungkinkan.
Gunakan penempatan rapat dengan GKE Standard
Batasan
Penempatan rapat dalam node pool GKE Standard memiliki batasan berikut:
- Hanya didukung di node pool baru. Anda tidak dapat mengaktifkan atau menonaktifkan penempatan rapat pada node pool yang ada.
- Hanya tersedia untuk node pool yang beroperasi di satu zona.
- Hanya tersedia di jenis mesin A2, C2, G2, C2D, C3D, N2, N2D, dan C3.
- Mendukung hingga 150 instance VM Compute Engine dalam setiap kebijakan. Node pool yang melebihi batas ini kapan saja akan ditolak selama pembuatan.
- Migrasi langsung untuk node tidak didukung.
- Menyediakan kebijakan resource kustom menggunakan flag
placement-policy
tidak didukung dengan upgrade berwarna biru-hijau.
Buat kebijakan penempatan rapat.
Untuk membuat kebijakan penempatan rapat, di Google Cloud CLI, Anda dapat menentukan opsi placement-type=COMPACT
selama pembuatan node pool atau cluster. Dengan setelan ini, GKE mencoba menempatkan node di dalam node pool dalam jarak yang lebih dekat satu sama lain.
Untuk menggunakan kebijakan resource yang sudah ada di cluster Anda, tentukan lokasi kebijakan kustom untuk flag placement-policy
selama node pool atau pembuatan cluster. Hal ini memungkinkan fleksibilitas dalam penggunaan penempatan yang dipesan, beberapa node pool dengan kebijakan penempatan yang sama, dan opsi penempatan lanjutan lainnya. Akan tetapi, cara ini juga memerlukan lebih banyak operasi manual daripada menentukan flag --placement-type=COMPACT. Misalnya, Anda perlu membuat, menghapus, dan mengelola kebijakan resource kustom. Pastikan jumlah maksimum instance VM dipatuhi di seluruh node pool yang menggunakan kebijakan resource. Jika batas ini tercapai saat beberapa node pool Anda belum mencapai ukuran maksimumnya, penambahan node lagi akan gagal.
Jika Anda tidak menentukan flag placement-type
dan placement-policy
, maka
secara default tidak ada persyaratan terkait penempatan node.
Membuat kebijakan penempatan rapat dalam cluster baru
Saat membuat cluster baru, Anda dapat menentukan kebijakan penempatan rapat yang akan diterapkan ke node pool default. Setiap kali Anda membuat node pool berikutnya untuk cluster, Anda harus menentukan apakah Anda akan menerapkan penempatan rapat.
Untuk membuat cluster baru dengan node pool default yang menerapkan kebijakan penempatan rapat, gunakan perintah berikut:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Ganti kode berikut:
CLUSTER_NAME
: Nama cluster baru Anda.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node, yang harus berupa jenis mesin C2 (misalnya,c2-standard-4
).--placement-type COMPACT
: Menerapkan penempatan rapat untuk node di node pool default.MAX_UNAVAILABLE
: Jumlah maksimum node yang tidak dapat tersedia secara bersamaan selama upgrade node pool. Untuk penempatan rapat, sebaiknya gunakan upgrade cepat tanpa lonjakan untuk mengoptimalkan penemuan node dengan lokasi yang sama selama upgrade.
Membuat kebijakan penempatan rapat pada cluster yang ada
Pada cluster yang ada, Anda dapat membuat node pool yang menerapkan kebijakan penempatan rapat.
Untuk membuat node pool yang menerapkan kebijakan penempatan rapat, gunakan perintah berikut:
gcloud container node-pools create NODEPOOL_NAME \
--machine-type MACHINE_TYPE \
--cluster CLUSTER_NAME \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Ganti kode berikut:
NODEPOOL_NAME
: Nama node pool baru.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node, yang harus berupa jenis mesin C2 (misalnya,c2-standard-4
).CLUSTER_NAME
: Nama cluster yang ada.--placement-type COMPACT
: Menunjukkan bahwa penempatan rapat diterapkan untuk node di node pool baru.MAX_UNAVAILABLE
: Jumlah maksimum node yang tidak dapat tersedia secara bersamaan selama upgrade node pool. Untuk penempatan rapat, sebaiknya gunakan upgrade cepat tanpa lonjakan untuk mengoptimalkan penemuan node dengan lokasi yang sama selama upgrade.
Membuat node pool menggunakan kebijakan penempatan kustom bersama
Anda dapat membuat kebijakan resource secara manual dan menggunakannya di beberapa node pool.
Buat kebijakan resource di region Google Cloud cluster:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
Ganti kode berikut:
POLICY_NAME
: Nama kebijakan resource Anda.REGION
: Region cluster Anda.
Buat node pool menggunakan kebijakan resource kustom:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
Ganti kode berikut:
NODEPOOL_NAME
: Nama node pool baru.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node, yang harus berupa jenis mesin C2 (misalnya,c2-standard-4
).CLUSTER_NAME
: Nama cluster yang ada.MAX_UNAVAILABLE
: Jumlah maksimum node yang tidak dapat tersedia secara bersamaan selama upgrade node pool. Untuk penempatan rapat, sebaiknya gunakan upgrade cepat tanpa lonjakan untuk mengoptimalkan penemuan node dengan lokasi yang sama selama upgrade.
Menggunakan reservasi Compute Engine dengan kebijakan penempatan rapat
Reservasi membantu Anda menjamin bahwa hardware tersedia di zona tertentu, sehingga mengurangi risiko kegagalan pembuatan kumpulan node yang disebabkan oleh hardware yang tidak memadai.
Buat reservasi yang menentukan kebijakan penempatan yang ringkas:
gcloud compute reservations create RESERVATION_NAME \ --vm-count MACHINE_COUNT \ --machine-type MACHINE_TYPE \ --resource-policies policy=POLICY_NAME \ --zone ZONE \ --require-specific-reservation
Ganti kode berikut:
RESERVATION_NAME
: Nama pemesanan Anda.MACHINE_COUNT
: Jumlah node yang dipesan.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node, yang harus berupa jenis mesin C2. Misalnya, untuk menggunakan jenis mesin C2 yang telah ditentukan dengan 4 vCPU, tentukanc2-standard-4
.POLICY_NAME
: Nama kebijakan resource Anda.ZONE
: Zona tempat untuk membuat reservasi.
Buat kumpulan node dengan menentukan kebijakan penempatan rapat dan reservasi yang Anda buat di langkah sebelumnya:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --reservation-affinity specific \ --reservation RESERVATION_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
Ganti kode berikut:
NODEPOOL_NAME
: Nama node pool baru.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node, yang harus berupa jenis mesin C2 (misalnya,c2-standard-4
).CLUSTER_NAME
: Nama cluster yang ada.
Membuat workload pada node yang menggunakan penempatan rapat
Untuk menjalankan workload pada node khusus yang menggunakan penempatan rapat, Anda dapat menggunakan beberapa mekanisme Kubernetes, seperti menetapkan pod ke node dan mencegah penjadwalan pod yang tidak diinginkan pada sebuah grup node untuk mencapai hal ini.
Pada contoh berikut, kami menambahkan taint ke node khusus dan menambahkan toleransi dan afinitas yang sesuai ke Pod.
Tambahkan taint ke node di node pool yang memiliki kebijakan penempatan rapat:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
Pada definisi workload, tentukan toleransi yang diperlukan dan afinitas node. Berikut ini contoh dengan satu Pod:
apiVersion: v1 kind: Pod metadata: ... spec: ... tolerations: - key: dedicated-pool operator: "Equal" value: "NODEPOOL_NAME" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: dedicated-pool operator: In values: - NODEPOOL_NAME
Di beberapa lokasi, Anda mungkin tidak dapat membuat node pool besar menggunakan kebijakan penempatan rapat. Untuk membatasi ukuran node pool tersebut hingga ukuran yang diperlukan, Anda disarankan membuat node pool per workload yang memerlukan penempatan rapat.
Gunakan penempatan rapat untuk penyediaan otomatis node
Mulai GKE versi 1.25, penyediaan otomatis node mendukung kebijakan penempatan rapat. Dengan penyediaan otomatis node, GKE secara otomatis menyediakan node pool berdasarkan permintaan resource cluster. Untuk informasi selengkapnya, lihat Menggunakan penyediaan otomatis node.
Guna mengaktifkan penempatan rapat untuk penyediaan otomatis node, tambahkan nodeSelector
ke spesifikasi
Pod dengan kunci berikut:
cloud.google.com/gke-placement-group
adalah ID yang Anda tetapkan untuk grup Pod yang harus berjalan bersama, dalam grup penempatan rapat yang sama.cloud.google.com/machine-family
adalah nama untuk nama kelompok mesin. Gunakan salah satu kelompok mesin yang mendukung penempatan rapat. Sebaiknya gunakan kelompok mesin C2 atau C2D untuk workload dengan persyaratan performa komputasi dan jaringan.
Contoh berikut adalah spesifikasi Pod yang memungkinkan penempatan rapat:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
Anda dapat menghapus kunci cloud.google.com/machine-family
jika konfigurasi Pod sudah
menentukan jenis mesin yang didukung dengan penempatan rapat. Misalnya, jika
spesifikasi Pod menyertakan nvidia.com/gpu
dan cluster dikonfigurasi untuk
menggunakan GPU A100, Anda tidak perlu menyertakan kunci cloud.google.com/machine-family
.
Contoh berikut adalah spesifikasi Pod yang menentukan
permintaan nvidia.com/gpu
dan cluster dikonfigurasi untuk menggunakan GPU A100. Pod
spec
ini tidak menyertakan kunci cloud.google.com/machine-family
:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
resources:
limits:
nvidia.com/gpu: 2
Untuk mempelajari selengkapnya, lihat cara mengonfigurasi Pod untuk memakai GPU.
Mengoptimalkan ukuran grup penempatan
Karena GKE menemukan penempatan terbaik untuk deployment yang lebih kecil, sebaiknya instruksikan GKE untuk tidak menjalankan berbagai jenis Pod dalam grup penempatan yang sama. Tambahkan kunci toleransi dengan
kunci cloud.google.com/gke-placement-group
dan ID penempatan rapat
yang Anda tentukan.
Contoh berikut adalah spesifikasi Pod yang menentukan toleransi Pod terhadap penempatan rapat:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
Untuk mengetahui informasi selengkapnya tentang penyediaan otomatis node dengan toleransi Pod, lihat Pemisahan workload
Langkah selanjutnya
- Pelajari cara Menentukan kebijakan penempatan instance di Compute Engine.