Menentukan penempatan rapat untuk node GKE


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:

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 memastikan bahwa hardware tersedia di zona yang ditentukan, sehingga mengurangi risiko kegagalan pembuatan node pool yang disebabkan oleh hardware yang tidak memadai.

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

  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.

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