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.
  • Tersedia dengan class komputasi Balanced, Performance, dan Accelerator.
  • Hanya tersedia pada jenis mesin C2, C2D, C3, C3D, H3, N2, dan N2D.
  • Hanya tersedia dengan GPU A100, L4, dan H100.
  • Penempatan rapat tersedia untuk Pod yang dikelompokkan pada maksimal 1.500 node.

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 1.500 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 kebijakan penempatan rapat kustom tanpa grup penempatan

Untuk menggunakan kebijakan penempatan rapat kustom tanpa grup penempatan, Anda harus menambahkan pemilih node cloud.google.com/placement-policy-name ke spesifikasi Pod.

Pendekatan ini mungkin berguna jika Anda ingin menggunakan JobSet untuk menjadwalkan setiap tugas secara terpisah, tetapi Anda juga ingin menggunakan kebijakan penempatan rapat kustom untuk menempatkan node yang menjalankan tugas yang sama lebih dekat satu sama lain.

Karena JobSet tidak mendukung penentuan pemilih node yang berbeda untuk setiap tugas, Anda tidak dapat menggunakan JobSet dengan grup penempatan dalam skenario ini. Namun, Anda dapat menggunakan dukungan bawaan JobSet untuk topologi eksklusif guna mencapai efek yang sama.

Contoh spesifikasi Pod berikut memungkinkan penempatan rapat dengan kebijakan penempatan rapat kustom untuk beban kerja JobSet:

apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
  name: my-jobset
  annotations:
    alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-nodepool
spec:
 replicatedJobs:
    - name: my-job
      template:
        spec:
          # lines omitted for clarity
          template:
            spec:
              nodeSelector:
                cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
                cloud.google.com/machine-family: "n2"
              # lines omitted for clarity

Ganti PLACEMENT_POLICY_NAME dengan nama kebijakan penempatan ringkas Compute Engine yang ada.

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, A4, C2, C2D, C3, C3D, C4, G2, H3, N2, dan N2D. Namun, untuk A3 Ultra dan A4, sebaiknya gunakan reservasi yang ditargetkan blok, bukan penempatan rapat. Untuk mengetahui detailnya, lihat Menyimpan kapasitas.
  • Mendukung hingga 1.500 instance VM Compute Engine dalam setiap kebijakan. Node pool yang melebihi batas ini kapan saja akan ditolak selama pembuatan.
  • 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 yang didukung dan tercantum dalam batasan cluster Standard.
  • --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 yang didukung dan tercantum dalam batasan cluster Standard.
  • 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 yang didukung dan tercantum dalam batasan cluster Standar.
    • 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 yang didukung dan tercantum dalam batasan cluster Standar.
    • 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 yang didukung dan tercantum dalam batasan cluster Standard.
  • 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