Anda dapat mengontrol apakah node Google Kubernetes Engine (GKE) Anda ditempatkan saling berdekatan secara fisik dalam zona dengan menggunakan kebijakan penempatan rapat.
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.
Menggunakan penempatan rapat dengan Autopilot GKE
Di cluster Autopilot, Anda dapat meminta penempatan rapat untuk workload tertentu dengan menambahkan pemilih node ke spesifikasi Pod. Anda dapat menggunakan kebijakan penempatan rapat Autopilot default atau kebijakan penempatan rapat Compute Engine yang ada yang menggunakan seri mesin N2 atau seri mesin N2D.
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
: ID yang Anda tetapkan untuk grup Pod yang harus berjalan bersama, dalam grup penempatan rapat yang sama. 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.Salah satu kunci berikut untuk menentukan jenis resource:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
cloud.google.com/placement-policy-name
: secara opsional, nama kebijakan penempatan ringkas Compute Engine yang ada. Anda hanya dapat menentukan kebijakan penempatan ringkas kustom di GKE versi 1.31.1-gke.2010000 dan yang lebih baru.Untuk mengetahui petunjuknya, lihat bagian Membuat kebijakan penempatan yang ringkas di halaman ini.
Contoh spesifikasi Pod berikut memungkinkan penempatan rapat dengan kebijakan penempatan rapat kustom:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
Ganti PLACEMENT_POLICY_NAME
dengan nama
kebijakan penempatan ringkas Compute Engine yang ada. Untuk menggunakan
kebijakan penempatan rapat default untuk Autopilot, hapus
baris cloud.google.com/placement-policy-name
.
Menggunakan 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 pada jenis mesin A2, A3, 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 memastikan bahwa hardware tersedia di zona yang ditentukan, sehingga mengurangi risiko kegagalan pembuatan node pool yang disebabkan oleh hardware yang tidak memadai.
Buat pemesanan yang menentukan kebijakan penempatan rapat:
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 ditetapkan dengan 4 vCPU, tentukanc2-standard-4
.POLICY_NAME
: Nama kebijakan resource Anda.ZONE
: Zona tempat membuat reservasi.
Buat node pool dengan menentukan kebijakan penempatan rapat dan pemesanan 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.
Menggunakan penempatan rapat untuk penyediaan otomatis node
Dengan penyediaan otomatis node, GKE secara otomatis menyediakan node pool berdasarkan permintaan resource cluster. Untuk informasi selengkapnya, lihat Menggunakan penyediaan otomatis node.
Untuk mengaktifkan penempatan rapat untuk penyediaan otomatis node, tambahkan nodeSelector
ke
spesifikasi Pod seperti dalam contoh berikut:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
# lines omitted for clarity
Ganti kode berikut:
PLACEMENT_GROUP_IDENTIFIER
: ID yang Anda tetapkan untuk grup Pod yang harus berjalan bersama, dalam grup penempatan rapat yang sama.MACHINE_FAMILY
: 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.PLACEMENT_POLICY_NAME
: secara opsional, nama kebijakan penempatan ringkas Compute Engine yang ada. GKE menggunakan kebijakan penempatan rapat yang ditentukan saat penyediaan otomatis node membuat node pool baru untuk mengelompokkan Pod Anda. Anda hanya dapat menentukan kebijakan penempatan rapat kustom di GKE versi 1.31.1-gke.2010000 dan yang lebih baru.Untuk mengetahui petunjuknya, lihat bagian Membuat kebijakan penempatan yang ringkas di halaman ini.
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 berikutnya
- Pelajari cara Menentukan kebijakan penempatan instance di Compute Engine.