Menentukan penempatan rapat untuk node GKE


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:

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.

  1. 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.
  2. 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.

  1. 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, tentukan c2-standard-4.
    • POLICY_NAME: Nama kebijakan resource Anda.
    • ZONE: Zona tempat untuk membuat reservasi.
  2. 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.

  1. 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
    
  2. 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