Memakai resource zona yang direservasi

Halaman ini menunjukkan cara menggunakan resource zona Compute Engine yang dipesan di workload GKE tertentu. Pemesanan kapasitas ini memberi Anda tingkat jaminan yang tinggi bahwa hardware tertentu tersedia untuk workload Anda.

Pastikan Anda sudah memahami konsep reservasi Compute Engine, seperti jenis konsumsi, jenis berbagi, dan jenis penyediaan. Untuk mengetahui detailnya, lihat Pemesanan resource zona Compute Engine.

Halaman ini ditujukan untuk orang-orang berikut:

  • Operator aplikasi yang men-deploy workload yang harus dijalankan sesegera mungkin, biasanya dengan hardware khusus seperti GPU.
  • Administrator platform yang ingin mendapatkan tingkat jaminan tinggi bahwa workload berjalan di hardware yang dioptimalkan yang memenuhi persyaratan aplikasi dan organisasi.

Tentang pemakaian reservasi di GKE

Pemesanan kapasitas Compute Engine memungkinkan Anda menyediakan konfigurasi hardware tertentu di zona Google Cloud , baik secara langsung maupun pada waktu mendatang yang ditentukan. Kemudian, Anda dapat menggunakan kapasitas yang dicadangkan ini di GKE.

Bergantung pada mode operasi GKE, Anda dapat menggunakan jenis reservasi berikut:

  • Mode Autopilot: reservasi tertentu, atau reservasi yang cocok menggunakan ComputeClass kustom.
  • Mode standar: reservasi tertentu atau reservasi yang cocok.

Untuk reservasi pencocokan any, Anda dapat memilih antara dua perilaku:

  • Reservasi yang cocok dengan penggantian: mencoba memakai reservasi yang cocok. Jika tidak ada yang tersedia, fungsi ini akan kembali ke penyediaan kapasitas sesuai permintaan standar.
  • Reservasi yang cocok tanpa penggantian: mencoba memakai reservasi yang cocok. Jika tidak ada yang tersedia, penyediaan akan gagal tanpa melakukan failover ke kapasitas sesuai permintaan.

Untuk mengaktifkan penggunaan reservasi guna membuat resource, Anda harus menentukan afinitas reservasi, seperti any, any-reservation-then-fail, atau specific.

Opsi pemakaian reservasi di GKE

GKE memungkinkan Anda menggunakan reservasi secara langsung di setiap workload dengan menggunakan nodeSelector Kubernetes dalam manifes workload atau dengan membuat node pool mode Standar yang menggunakan reservasi. Halaman ini menjelaskan pendekatan untuk memilih pemesanan secara langsung di setiap resource.

Anda juga dapat mengonfigurasi GKE untuk menggunakan reservasi selama operasi penskalaan yang membuat node baru menggunakan kelas komputasi kustom. Class komputasi kustom memungkinkan administrator platform menentukan hierarki konfigurasi node untuk diprioritaskan GKE selama penskalaan node sehingga workload berjalan di hardware yang Anda pilih.

Anda dapat menentukan reservasi dalam konfigurasi class komputasi kustom sehingga setiap workload GKE yang menggunakan ComputeClass kustom tersebut akan menunjukkan kepada GKE untuk menggunakan reservasi yang ditentukan untuk ComputeClass tersebut.

Untuk mempelajari lebih lanjut, di halaman "Tentang class komputasi kustom", lihat Menggunakan reservasi Compute Engine.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Menggunakan reservasi kapasitas di cluster Autopilot

Cluster Autopilot mendukung penggunaan resource dari pemesanan kapasitas Compute Engine dalam project yang sama atau dalam project bersama. Anda dapat menyetel properti jenis penggunaan reservasi target ke specific, dan memilih reservasi tersebut secara eksplisit dalam manifes Anda. Atau, Anda dapat menggunakan reservasi yang cocok dengan AnyBestEffort afinitas reservasi ComputeClass kustom. Jika Anda tidak secara eksplisit menentukan reservasi atau mengonfigurasi ComputeClass kustom untuk menggunakannya, cluster Autopilot tidak akan menggunakan reservasi. Untuk mempelajari lebih lanjut jenis penggunaan pemesanan, lihat Cara kerja pemesanan.

Pemesanan ini memenuhi syarat untuk mendapatkan diskon abonemen fleksibel Compute. Anda harus menggunakan class komputasi Accelerator atau class komputasi Performance untuk menggunakan pemesanan kapasitas.

  • Sebelum memulai, buat cluster Autopilot yang menjalankan versi berikut:

    • Untuk menggunakan akselerator yang dicadangkan, seperti GPU: 1.28.6-gke.1095000 atau yang lebih baru
    • Untuk menjalankan Pod pada seri mesin tertentu dan dengan setiap Pod di nodenya sendiri: 1.28.6-gke.1369000 dan yang lebih baru atau versi 1.29.1-gke.1575000 dan yang lebih baru.
    • Untuk menggunakan reservasi yang tersedia tanpa melakukan penggantian ke kapasitas on-demand: 1.36.0-gke.3204000 atau yang lebih baru.

Membuat reservasi kapasitas untuk Autopilot

Pod Autopilot dapat menggunakan pemesanan yang memiliki properti jenis penggunaan khusus di project yang sama dengan cluster atau di pemesanan bersama dari project yang berbeda. Anda dapat menggunakan hardware yang dicadangkan dengan secara eksplisit mereferensikan reservasi tersebut dalam manifes, atau Anda dapat menggunakan reservasi yang cocok menggunakan ComputeClass kustom. Anda dapat menggunakan reservasi di Autopilot untuk jenis hardware berikut:

  • Salah satu jenis GPU berikut:

    • nvidia-gb200: NVIDIA GB200 (Pratinjau)
    • nvidia-b200: NVIDIA B200 (180GB)
    • nvidia-h200-141gb: NVIDIA H200 (141GB)
    • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
    • nvidia-h100-80gb: NVIDIA H100 (80GB)
    • nvidia-a100-80gb: NVIDIA A100 (80GB)
    • nvidia-tesla-a100: NVIDIA A100 (40GB)
    • nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000
    • nvidia-l4: NVIDIA L4
    • nvidia-tesla-t4: NVIDIA T4

  • Salah satu jenis TPU berikut:

    • tpu7x: Ironwood (TPU7x)
    • tpu-v6e-slice: Slice TPU v6e
    • tpu-v5p-slice: Slice TPU v5p
    • tpu-v5-lite-podslice: Podslice TPU v5 lite
    • tpu-v4-lite-device: Perangkat TPU v4 Lite
    • tpu-v4-podslice: Podslice TPU v4
    • tpu-v3-device: Perangkat TPU v3
    • tpu-v3-slice: Podslice TPU v3

Untuk membuat reservasi kapasitas, lihat referensi berikut. Pemesanan harus memenuhi persyaratan berikut:

  • Jenis mesin, jenis akselerator, dan jumlah akselerator cocok dengan yang akan digunakan oleh beban kerja Anda.
  • Reservasi menggunakan jenis pemakaian khusus, kecuali jika Anda menggunakan ComputeClass kustom untuk memakai reservasi yang cocok. Misalnya, di gcloud CLI, Anda harus menentukan flag --require-specific-reservation saat membuat reservasi tertentu.

  • Membuat pemesanan untuk satu project

  • Membuat pemesanan bersama

GKE secara otomatis melampirkan SSD Lokal dari reservasi spesifik yang dipilih ke node Anda. Anda tidak perlu memilih SSD Lokal satu per satu dalam manifes workload. Misalnya, jika reservasi yang Anda pilih mencakup dua SSD Lokal, node yang dibuat GKE dari reservasi tersebut akan memiliki dua SSD Lokal yang terpasang.

Memakai reservasi yang cocok dengan penggantian otomatis di Autopilot

Bagian ini menunjukkan cara mengonfigurasi workload Autopilot untuk menggunakan reservasi yang cocok dengan penggantian ke kapasitas sesuai permintaan. Anda dapat melakukannya dengan membuat ComputeClass kustom yang menentukan afinitas reservasi AnyBestEffort.

  1. Simpan manifes ComputeClass kustom berikut sebagai any-reservation-cc.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: any-reservation
    spec:
      priorities:
      - reservations:
          affinity: AnyBestEffort
    
  2. Buat ComputeClass kustom:

    kubectl apply -f any-reservation-cc.yaml
    
  3. Simpan manifes Pod berikut sebagai any-reservation-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: any-reservation-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: any-reservation
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 2
            memory: "4Gi"
    
  4. Deploy Pod:

    kubectl apply -f any-reservation-pod.yaml
    

Memakai reservasi yang cocok tanpa penggantian di Autopilot

Bagian ini menunjukkan cara mengonfigurasi workload Autopilot untuk menggunakan reservasi yang cocok tanpa melakukan penggantian ke kapasitas sesuai permintaan jika reservasi habis. Anda melakukannya dengan membuat ComputeClass kustom yang menentukan afinitas reservasi AnyThenFail dan menetapkan nilai kolom whenUnsatisfiable ke DoNotScaleUp. Afinitas reservasi ini memerlukan GKE versi 1.36.0-gke.3204000 atau yang lebih baru.

  1. Simpan manifes ComputeClass kustom berikut sebagai any-then-fail-cc.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: any-then-fail
    spec:
      priorities:
      - reservations:
          affinity: AnyThenFail
        whenUnsatisfiable: DoNotScaleUp
    
  2. Buat ComputeClass kustom:

    kubectl apply -f any-then-fail-cc.yaml
    
  3. Simpan manifes Pod berikut sebagai any-then-fail-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: any-then-fail-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: any-then-fail
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 2
            memory: "4Gi"
    
  4. Deploy Pod:

    kubectl apply -f any-then-fail-pod.yaml
    

Memakai reservasi tertentu dalam project yang sama di Autopilot

Bagian ini menunjukkan cara menggunakan reservasi kapasitas tertentu yang berada dalam project yang sama dengan cluster Anda. Anda dapat menggunakan kubectl atau Terraform.

kubectl

  1. Simpan manifes berikut sebagai specific-autopilot.yaml. Manifes ini memiliki pemilih node yang menggunakan reservasi tertentu. Anda dapat menggunakan instance VM atau akselerator.

    VM instances

      apiVersion: v1
      kind: Pod
      metadata:
        name: specific-same-project-pod
      spec:
        nodeSelector:
          cloud.google.com/compute-class: Performance
          cloud.google.com/machine-family: MACHINE_SERIES
          cloud.google.com/reservation-name: RESERVATION_NAME
          cloud.google.com/reservation-affinity: "specific"
        containers:
        - name: my-container
          image: "k8s.gcr.io/pause"
          resources:
            requests:
              cpu: 2
              memory: "4Gi"
    

    Ganti kode berikut:

    • MACHINE_SERIES: seri mesin yang berisi jenis mesin VM dalam reservasi kapasitas tertentu Anda. Misalnya, jika pemesanan Anda adalah untuk jenis mesin c3-standard-4, tentukan c3 di kolom MACHINE_SERIES.
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.

    Akselerator GPU

      apiVersion: v1
      kind: Pod
      metadata:
        name: specific-same-project-pod
      spec:
        nodeSelector:
          cloud.google.com/gke-accelerator: ACCELERATOR
          cloud.google.com/reservation-name: RESERVATION_NAME
          cloud.google.com/reservation-affinity: "specific"
        containers:
        - name: my-container
          image: "k8s.gcr.io/pause"
          resources:
            requests:
              cpu: 12
              memory: "50Gi"
              ephemeral-storage: "200Gi"
            limits:
              nvidia.com/gpu: QUANTITY
    

    Ganti kode berikut:

    • ACCELERATOR: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Harus berupa salah satu nilai berikut:
      • nvidia-gb200: NVIDIA GB200 (Pratinjau)
      • nvidia-b200: NVIDIA B200 (180GB)
      • nvidia-h200-141gb: NVIDIA H200 (141GB)
      • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
      • nvidia-h100-80gb: NVIDIA H100 (80GB)
      • nvidia-a100-80gb: NVIDIA A100 (80GB)
      • nvidia-tesla-a100: NVIDIA A100 (40GB)
      • nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000
      • nvidia-l4: NVIDIA L4
      • nvidia-tesla-t4: NVIDIA T4
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • QUANTITY: jumlah GPU yang akan dipasang ke container. Harus berupa jumlah yang didukung untuk GPU yang ditentukan, seperti yang dijelaskan dalam Jumlah GPU yang didukung.

    Akselerator TPU

      apiVersion: v1
      kind: Pod
      metadata:
        name: specific-same-project-pod
      spec:
        nodeSelector:
          cloud.google.com/gke-tpu-accelerator: ACCELERATOR
          cloud.google.com/gke-tpu-topology: TOPOLOGY
          cloud.google.com/reservation-name: RESERVATION_NAME
          cloud.google.com/reservation-affinity: "specific"
        containers:
        - name: my-container
          image: "k8s.gcr.io/pause"
          resources:
            requests:
              cpu: 12
              memory: "50Gi"
              ephemeral-storage: "200Gi"
            limits:
              google.com/tpu: QUANTITY
    

    Ganti kode berikut:

    • ACCELERATOR: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Harus berupa salah satu nilai berikut:
      • tpu7x: Ironwood (TPU7x)
      • tpu-v6e-slice: Slice TPU v6e
      • tpu-v5p-slice: Slice TPU v5p
      • tpu-v5-lite-podslice: Podslice TPU v5 lite
      • tpu-v4-lite-device: Perangkat TPU v4 Lite
      • tpu-v4-podslice: Podslice TPU v4
      • tpu-v3-device: Perangkat TPU v3
      • tpu-v3-slice: Podslice TPU v3
    • TOPOLOGY: topologi TPU.
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • QUANTITY: jumlah TPU yang akan dilampirkan ke container. Harus selaras dengan topologi TPU.
  2. Deploy Pod:

    kubectl apply -f specific-autopilot.yaml
    

Autopilot menggunakan kapasitas yang dipesan dalam reservasi yang ditentukan untuk menyediakan node baru guna menempatkan Pod.

Terraform

Untuk menggunakan reservasi tertentu dalam project yang sama dengan instance VM menggunakan Terraform, lihat contoh berikut:

resource "kubernetes_pod_v1" "default_pod" {
  metadata {
    name = "specific-same-project-pod"
  }

  spec {
    node_selector = {
      "cloud.google.com/compute-class"        = "Performance"
      "cloud.google.com/machine-family"       = "c3"
      "cloud.google.com/reservation-name"     = google_compute_reservation.specific_pod.name
      "cloud.google.com/reservation-affinity" = "specific"
    }

    container {
      name  = "my-container"
      image = "registry.k8s.io/pause"

      resources {
        requests = {
          cpu               = 2
          memory            = "8Gi"
          ephemeral-storage = "1Gi"
        }
      }

      security_context {
        allow_privilege_escalation = false
        run_as_non_root            = false

        capabilities {
          add  = []
          drop = ["NET_RAW"]
        }
      }
    }

    security_context {
      run_as_non_root     = false
      supplemental_groups = []

      seccomp_profile {
        type = "RuntimeDefault"
      }
    }
  }

  depends_on = [
    google_compute_reservation.specific_pod
  ]
}

Untuk menggunakan reservasi tertentu dalam project yang sama dengan kelas komputasi Accelerator menggunakan Terraform, lihat contoh berikut:

resource "kubernetes_pod_v1" "default_accelerator" {
  metadata {
    name = "specific-same-project-accelerator"
  }

  spec {
    node_selector = {
      "cloud.google.com/compute-class"        = "Accelerator"
      "cloud.google.com/gke-accelerator"      = "nvidia-l4"
      "cloud.google.com/reservation-name"     = google_compute_reservation.specific_accelerator.name
      "cloud.google.com/reservation-affinity" = "specific"
    }

    container {
      name  = "my-container"
      image = "registry.k8s.io/pause"

      resources {
        requests = {
          cpu               = 2
          memory            = "7Gi"
          ephemeral-storage = "1Gi"
          "nvidia.com/gpu"  = 1

        }
        limits = {
          "nvidia.com/gpu" = 1
        }
      }

      security_context {
        allow_privilege_escalation = false
        run_as_non_root            = false

        capabilities {
          add  = []
          drop = ["NET_RAW"]
        }
      }
    }

    security_context {
      run_as_non_root     = false
      supplemental_groups = []

      seccomp_profile {
        type = "RuntimeDefault"
      }
    }
  }

  depends_on = [
    google_compute_reservation.specific_accelerator
  ]
}

Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Memakai reservasi bersama tertentu di Autopilot

Bagian ini menggunakan istilah berikut:

  • Project pemilik: project yang memiliki pemesanan dan membagikannya ke project lain.
  • Project konsumen: project yang menjalankan workload yang menggunakan pemesanan bersama.

Untuk menggunakan reservasi bersama tertentu, konfigurasi izin Identity and Access Management (IAM) untuk mengizinkan agen layanan GKE dari project konsumen mengakses reservasi di project pemilik.

Selesaikan langkah-langkah berikut di project yang memiliki reservasi bersama:

  1. Buat peran IAM kustom yang berisi izin compute.reservations.list di project pemilik:

    gcloud iam roles create ROLE_NAME \
        --project=OWNER_PROJECT_ID \
        --permissions='compute.reservations.list'
    

    Ganti kode berikut:

    • ROLE_NAME: nama untuk peran baru Anda.
    • OWNER_PROJECT_ID: project ID project yang memiliki reservasi kapasitas.
  2. Memberi agen layanan GKE di project konsumen akses untuk mencantumkan pemesanan bersama di project pemilik:

    gcloud projects add-iam-policy-binding OWNER_PROJECT_ID \
        --project=OWNER_PROJECT_ID \
        --member=serviceAccount:service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role='projects/OWNER_PROJECT_ID/roles/ROLE_NAME'
    

    Ganti CONSUMER_PROJECT_NUMBER dengan nomor project numerik project konsumen Anda. Untuk menemukan nomor ini, lihat Mengidentifikasi project dalam dokumentasi Resource Manager.

  3. Simpan manifes berikut sebagai shared-autopilot.yaml. Manifes ini memiliki nodeSelector yang memberi tahu GKE untuk menggunakan reservasi bersama tertentu.

    Instance VM

    apiVersion: v1
    kind: Pod
    metadata:
      name: performance-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Performance
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/reservation-name: RESERVATION_NAME
        cloud.google.com/reservation-project: OWNER_PROJECT_ID
        cloud.google.com/reservation-affinity: "specific"
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 2
            memory: "4Gi"
    

    Ganti kode berikut:

    • MACHINE_SERIES: seri mesin yang berisi jenis mesin VM dalam reservasi kapasitas tertentu Anda. Misalnya, jika pemesanan Anda adalah untuk jenis mesin c3-standard-4, tentukan c3 di kolom MACHINE_SERIES.
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • OWNER_PROJECT_ID: project ID project yang memiliki reservasi kapasitas.

    Akselerator GPU

    apiVersion: v1
    kind: Pod
    metadata:
      name: specific-same-project-pod
    spec:
      nodeSelector:
        cloud.google.com/gke-accelerator: ACCELERATOR
        cloud.google.com/reservation-name: RESERVATION_NAME
        cloud.google.com/reservation-project: OWNER_PROJECT_ID
        cloud.google.com/reservation-affinity: "specific"
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral-storage: "200Gi"
          limits:
            nvidia.com/gpu: QUANTITY
    

    Ganti kode berikut:

    • ACCELERATOR: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Harus berupa salah satu nilai berikut:
      • nvidia-gb200: NVIDIA GB200 (Pratinjau)
      • nvidia-b200: NVIDIA B200 (180GB)
      • nvidia-h200-141gb: NVIDIA H200 (141GB)
      • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
      • nvidia-h100-80gb: NVIDIA H100 (80GB)
      • nvidia-a100-80gb: NVIDIA A100 (80GB)
      • nvidia-tesla-a100: NVIDIA A100 (40GB)
      • nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000
      • nvidia-l4: NVIDIA L4
      • nvidia-tesla-t4: NVIDIA T4
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • OWNER_PROJECT_ID: project ID project yang memiliki reservasi kapasitas.
    • QUANTITY: jumlah GPU yang akan dipasang ke container. Harus berupa jumlah yang didukung untuk GPU yang ditentukan, sebagaimana dijelaskan dalam Jumlah GPU yang didukung.

    Akselerator TPU

    apiVersion: v1
    kind: Pod
    metadata:
      name: specific-shared-project-pod
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-accelerator: ACCELERATOR
        cloud.google.com/gke-tpu-topology: TOPOLOGY
        cloud.google.com/reservation-name: RESERVATION_NAME
        cloud.google.com/reservation-project: OWNER_PROJECT_ID
        cloud.google.com/reservation-affinity: "specific"
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral-storage: "200Gi"
          limits:
            google.com/tpu: QUANTITY
    

    Ganti kode berikut:

    • ACCELERATOR: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Harus berupa salah satu nilai berikut:
      • tpu7x: Ironwood (TPU7x)
      • tpu-v6e-slice: Slice TPU v6e
      • tpu-v5p-slice: Slice TPU v5p
      • tpu-v5-lite-podslice: Podslice TPU v5 lite
      • tpu-v4-lite-device: Perangkat TPU v4 Lite
      • tpu-v4-podslice: Podslice TPU v4
      • tpu-v3-device: Perangkat TPU v3
      • tpu-v3-slice: Podslice TPU v3
    • TOPOLOGY: topologi TPU.
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • OWNER_PROJECT_ID: project ID project yang memiliki reservasi kapasitas.
    • QUANTITY: jumlah TPU yang akan dilampirkan ke container. Harus selaras dengan topologi TPU.
  4. Deploy Pod:

    kubectl apply -f shared-autopilot.yaml
    

Autopilot menggunakan kapasitas yang dipesan dalam reservasi yang ditentukan untuk menyediakan node baru guna menempatkan Pod.

Memakai blok reservasi tertentu di Autopilot

Bagian ini menunjukkan cara menggunakan blok reservasi kapasitas tertentu yang berada dalam project yang sama dengan cluster Anda atau dalam project bersama. Fitur ini hanya tersedia untuk akselerator tertentu. Anda dapat menggunakan kubectl untuk mengonfigurasi Pod agar menggunakan blok reservasi.

  1. Simpan manifes berikut sebagai reservation-block-autopilot.yaml. Manifes ini memiliki pemilih node yang menggunakan reservasi tertentu.

    Project Lokal

    apiVersion: v1
    kind: Pod
    metadata:
      name: specific-same-project-pod
    spec:
      nodeSelector:
        cloud.google.com/gke-accelerator: ACCELERATOR
        cloud.google.com/reservation-name: RESERVATION_NAME
        cloud.google.com/reservation-affinity: "specific"
        cloud.google.com/reservation-blocks: RESERVATION_BLOCKS_NAME
      
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral-storage: "200Gi"
          limits:
            nvidia.com/gpu: QUANTITY
    

    Ganti kode berikut:

    • ACCELERATOR: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Harus berupa salah satu nilai berikut:
      • nvidia-b200: NVIDIA B200 (180GB)
      • nvidia-h200-141gb: NVIDIA H200 (141GB)
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • RESERVATION_BLOCKS_NAME: nama blok reservasi kapasitas Compute Engine.
    • QUANTITY: jumlah GPU yang akan dipasang ke container. Harus berupa jumlah yang didukung untuk GPU yang ditentukan, seperti yang dijelaskan dalam Jumlah GPU yang didukung.

    Untuk reservasi yang dimiliki oleh project lain, tambahkan cloud.google.com/reservation-project: OWNER_PROJECT_ID ke kolom spec.nodeSelector. Ganti OWNER_PROJECT_ID dengan project ID project yang memiliki reservasi kapasitas.

  2. Deploy Pod:

    kubectl apply -f reservation-block-autopilot.yaml
    

    Autopilot menggunakan kapasitas yang dicadangkan dalam blok reservasi yang ditentukan untuk menyediakan node baru untuk menempatkan Pod.

Memakai sub-blok reservasi tertentu di Autopilot

Bagian ini menunjukkan cara menggunakan sub-blok reservasi kapasitas tertentu yang berada dalam project yang sama dengan cluster Anda atau dalam project bersama.

  1. Simpan manifes ComputeClass berikut sebagai reservation-sub-block-computeclass.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: specific-reservation-subblock
    spec:
      nodePoolAutoCreation:
        enabled: true
      priorities:
      - gpu:
          type: ACCELERATOR_TYPE
          count: ACCELERATOR_COUNT
        reservations:
          affinity: Specific
          specific:
          - name: RESERVATION_NAME
            project: RESERVATION_PROJECT_ID
            reservationBlock:
              name: RESERVATION_BLOCK_NAME
              reservationSubBlock:
                name: RESERVATION_SUB_BLOCK_NAME
    

    Ganti kode berikut:

    • ACCELERATOR_TYPE: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Nilai ini harus nvidia-gb200.
    • ACCELERATOR_COUNT: jumlah akselerator yang akan dipasang ke setiap node. Nilai ini harus berupa jumlah yang didukung untuk jenis akselerator yang ditentukan. Untuk mengetahui informasi selengkapnya, lihat Jumlah GPU yang didukung.
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.
    • RESERVATION_PROJECT_ID: project ID dari project yang memiliki reservasi kapasitas.
    • RESERVATION_BLOCK_NAME: nama blok reservasi kapasitas Compute Engine.
    • RESERVATION_SUB_BLOCK_NAME: nama sub-blok reservasi kapasitas Compute Engine.
  2. Simpan manifes Pod berikut sebagai reservation-sub-block-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: reservation-sub-block-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: specific-reservation-subblock
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral-storage: "200Gi"
          limits:
            nvidia.com/gpu: CONTAINER_GPU_COUNT
    

    Ganti CONTAINER_GPU_COUNT dengan jumlah GPU yang akan dialokasikan ke container. Nilai ini harus kurang dari atau sama dengan jumlah akselerator yang dilampirkan class komputasi ke setiap node.

  3. Deploy Pod:

    kubectl apply -f reservation-sub-block-pod.yaml
    

    Autopilot menggunakan kapasitas yang dicadangkan dalam sub-blok pemesanan yang ditentukan untuk menyediakan node baru guna menjalankan Pod.

Memecahkan masalah pemakaian reservasi di Autopilot

  • Pastikan jenis mesin, jenis akselerator, konfigurasi SSD lokal, dan jumlah akselerator sesuai dengan yang akan digunakan oleh beban kerja Anda. Untuk mengetahui daftar lengkap properti yang harus cocok, lihat Properti reservasi kapasitas Compute Engine.
  • Pastikan reservasi dibuat dengan afinitas tertentu, kecuali jika Anda menggunakan ComputeClass kustom untuk memakai reservasi apa pun yang cocok.
  • Jika Anda menggunakan afinitas reservasi AnyBestEffort dan reservasi Anda tidak digunakan, GKE mungkin telah menyediakan kapasitas on-demand di zona lain dalam region. Untuk membantu memastikan penggunaan kapasitas yang dipesan, gunakan reservasi tertentu.
  • Saat menggunakan reservasi bersama, pastikan agen layanan GKE di project konsumen memiliki izin untuk mencantumkan reservasi bersama di project pemilik.

Memakai reserved instance di GKE Standard

Saat membuat cluster atau node pool, Anda dapat menunjukkan mode pemakaian reservasi dengan menentukan flag --reservation-affinity.

Memakai reservasi yang cocok dengan penggantian

Anda dapat membuat pemesanan dan instance untuk menggunakan pemesanan apa pun dengan penggantian ke kapasitas sesuai permintaan menggunakan gcloud CLI atau Terraform.

gcloud

Untuk memakai reservasi yang cocok secara otomatis, tetapkan flag afinitas reservasi ke --reservation-affinity=any. Karena any adalah nilai default yang ditentukan di Compute Engine, Anda dapat menghilangkan flag afinitas reservasi sepenuhnya.

Dalam mode pemakaian reservasi any, node terlebih dahulu mengambil kapasitas dari semua reservasi satu project sebelum reservasi bersama, karena reservasi bersama lebih tersedia untuk project lain. Untuk informasi selengkapnya tentang cara instance dipakai secara otomatis, lihat Urutan pemakaian.

  1. Buat reservasi tiga instance VM:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3
    

    Ganti kode berikut:

    • RESERVATION_NAME: nama pemesanan yang akan dibuat.
    • MACHINE_TYPE: jenis mesin (hanya nama) yang akan digunakan untuk reservasi. Misalnya, n1-standard-2.
  2. Pastikan bahwa reservasi berhasil dibuat:

    gcloud compute reservations describe RESERVATION_NAME
    
  3. Buat cluster yang memiliki satu node untuk memakai reservasi apa pun yang cocok:

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=any
    

    Ganti CLUSTER_NAME dengan nama cluster yang akan dibuat.

  4. Buat node pool dengan tiga node untuk memakai reservasi yang cocok:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=3 \
        --machine-type=MACHINE_TYPE --reservation-affinity=any
    

    Ganti NODEPOOL_NAME dengan nama node pool yang akan dibuat.

Total jumlah node adalah empat, yang melebihi kapasitas reservasi. Tiga node memakai reservasi, sementara node terakhir mengambil kapasitas dari kumpulan resource Compute Engine umum.

Terraform

Untuk membuat reservasi tiga instance VM menggunakan Terraform, lihat contoh berikut:

resource "google_compute_reservation" "any_reservation" {
  name = "any-reservation"
  zone = "us-central1-a"

  specific_reservation {
    count = 3

    instance_properties {
      machine_type = "e2-medium"
    }
  }
}

Untuk membuat cluster yang memiliki satu node untuk memakai reservasi apa pun yang cocok menggunakan Terraform, lihat contoh berikut:

resource "google_container_cluster" "default" {
  name     = "gke-standard-zonal-cluster"
  location = "us-central1-a"

  initial_node_count = 1

  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "ANY_RESERVATION"
    }
  }

  depends_on = [
    google_compute_reservation.any_reservation
  ]
}

Untuk membuat node pool dengan tiga node untuk memakai reservasi yang cocok menggunakan Terraform, lihat contoh berikut:

resource "google_container_node_pool" "any_node_pool" {
  name     = "gke-standard-zonal-any-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  initial_node_count = 3
  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "ANY_RESERVATION"
    }
  }
}

Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Memakai reservasi yang cocok tanpa penggantian

Untuk memakai reservasi yang cocok tanpa melakukan failover ke kapasitas on-demand saat reservasi habis, tetapkan flag afinitas reservasi ke --reservation-affinity=any-reservation-then-fail. Afinitas reservasi ini memerlukan GKE versi 1.36.0-gke.3204000 atau yang lebih baru.*

  1. Buat reservasi tiga instance VM:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3
    

    Ganti kode berikut:

    • RESERVATION_NAME: nama pemesanan yang akan dibuat.
    • MACHINE_TYPE: jenis mesin (hanya nama) yang akan digunakan untuk reservasi, misalnya, n1-standard-2.
  2. Pastikan bahwa reservasi berhasil dibuat:

    gcloud compute reservations describe RESERVATION_NAME
    
  3. Buat cluster yang memiliki satu node, dan konfigurasi node untuk menggunakan reservasi yang cocok tanpa penggantian:

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=any-reservation-then-fail
    

    Ganti CLUSTER_NAME dengan nama cluster yang akan dibuat.

  4. Buat node pool yang memiliki tiga node, dan konfigurasi node tersebut untuk memakai reservasi yang cocok tanpa penggantian:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=3 \
        --machine-type=MACHINE_TYPE \
        --reservation-affinity=any-reservation-then-fail
    

    Ganti NODEPOOL_NAME dengan nama node pool yang akan dibuat.

Total jumlah node adalah empat, yang melebihi kapasitas reservasi. Tiga node memakai reservasi, sementara node terakhir gagal melakukan penyediaan. GKE akan menyelaraskan node pool untuk menyediakan node terakhir hingga kapasitas yang dicadangkan baru muncul atau kapasitas yang ada dibebaskan.

Memakai reservasi satu project khusus

Untuk memakai reservasi khusus, tetapkan flag afinitas reservasi ke --reservation-affinity=specific dan berikan nama khusus untuk reservasi. Dalam mode ini, instance harus mengambil kapasitas dari reservasi yang ditentukan di zona. Permintaan gagal jika reservasi tidak memiliki kapasitas yang memadai.

Agar reservasi dan instance dapat memakai reservasi khusus, lakukan langkah-langkah berikut: Anda dapat menggunakan gcloud CLI atau Terraform.

gcloud

  1. Buat reservasi khusus untuk tiga instance VM:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3 \
        --require-specific-reservation
    

    Ganti kode berikut:

    • RESERVATION_NAME: nama pemesanan yang akan dibuat.
    • MACHINE_TYPE: jenis mesin (hanya nama) yang akan digunakan untuk reservasi. Misalnya, n1-standard-2.
  2. Buat node pool dengan satu node untuk memakai reservasi satu project tertentu:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=specific --reservation=RESERVATION_NAME
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama node pool yang akan dibuat.
    • CLUSTER_NAME: nama cluster yang Anda buat.

Terraform

Untuk membuat reservasi tertentu menggunakan Terraform, lihat contoh berikut:

resource "google_compute_reservation" "specific_reservation" {
  name = "specific-reservation"
  zone = "us-central1-a"

  specific_reservation {
    count = 1

    instance_properties {
      machine_type = "e2-medium"
    }
  }

  specific_reservation_required = true
}

Untuk membuat node pool dengan satu node untuk memakai reservasi satu project khusus menggunakan Terraform, lihat contoh berikut:

resource "google_container_node_pool" "specific_node_pool" {
  name     = "gke-standard-zonal-specific-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  initial_node_count = 1
  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "SPECIFIC_RESERVATION"
      key                      = "compute.googleapis.com/reservation-name"
      values                   = [google_compute_reservation.specific_reservation.name]
    }
  }

  depends_on = [
    google_compute_reservation.specific_reservation
  ]
}

Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Memakai reservasi bersama khusus

Untuk menggunakan reservasi bersama tertentu, konfigurasi izin Identity and Access Management (IAM) untuk mengizinkan agen layanan GKE dari project konsumen mengakses reservasi di project pemilik.

Selesaikan langkah-langkah berikut di project yang memiliki reservasi bersama:

  1. Buat peran IAM kustom yang berisi izin compute.reservations.list di project pemilik:

    gcloud iam roles create ROLE_NAME \
        --project=OWNER_PROJECT_ID \
        --permissions='compute.reservations.list'
    

    Ganti kode berikut:

    • ROLE_NAME: nama untuk peran baru Anda.
    • OWNER_PROJECT_ID: project ID project yang memiliki reservasi kapasitas.
  2. Memberi agen layanan GKE di project konsumen akses untuk mencantumkan pemesanan bersama di project pemilik:

    gcloud projects add-iam-policy-binding OWNER_PROJECT_ID \
        --project=OWNER_PROJECT_ID \
        --member=serviceAccount:service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role='projects/OWNER_PROJECT_ID/roles/ROLE_NAME'
    

    Ganti CONSUMER_PROJECT_NUMBER dengan nomor project numerik project konsumen Anda. Untuk menemukan nomor ini, lihat Mengidentifikasi project.

Untuk membuat reservasi bersama khusus dan memakai reservasi bersama, lakukan langkah-langkah berikut. Anda dapat menggunakan gcloud CLI atau Terraform.

  1. Ikuti langkah-langkah di bagian Mengelola pembuatan reservasi bersama.

gcloud

  1. Membuat reservasi bersama khusus:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3 \
        --zone=ZONE \
        --require-specific-reservation \
        --project=OWNER_PROJECT_ID \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS
    

    Ganti kode berikut:

    • RESERVATION_NAME: nama reservasi yang akan dibuat.
    • MACHINE_TYPE: nama jenis mesin yang akan digunakan untuk reservasi. Misalnya, n1-standard-2.
    • OWNER_PROJECT_ID: Project ID dari project yang diinginkan untuk membuat reservasi bersama ini. Jika Anda menghapus flag --project, secara default GKE akan menggunakan project saat ini sebagai project pemilik.
    • CONSUMER_PROJECT_IDS: daftar yang dipisahkan koma untuk project ID dari project yang ingin Anda bagikan reservasi ini. Contohnya, project-1,project-2. Anda dapat menyertakan 1 hingga 100 project konsumen. Project ini harus berada dalam organisasi yang sama dengan project pemilik. Jangan sertakan OWNER_PROJECT_ID, karena dapat memakai reservasi ini secara default.
  2. Menggunakan reservasi bersama:

      gcloud container node-pools create NODEPOOL_NAME \
          --cluster CLUSTER_NAME \
          --machine-type=MACHINE_TYPE --num-nodes=1 \
          --reservation-affinity=specific \
          --reservation=projects/OWNER_PROJECT_ID/reservations/RESERVATION_NAME
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama node pool yang akan dibuat.
    • CLUSTER_NAME: nama cluster yang Anda buat.

Terraform

Untuk membuat reservasi bersama tertentu menggunakan Terraform, lihat contoh berikut:

resource "google_compute_reservation" "specific_reservation" {
  name = "specific-reservation"
  zone = "us-central1-a"

  specific_reservation {
    count = 1

    instance_properties {
      machine_type = "e2-medium"
    }
  }

  specific_reservation_required = true
}

Untuk memakai reservasi bersama tertentu menggunakan Terraform, lihat contoh berikut:

resource "google_container_node_pool" "specific_node_pool" {
  name     = "gke-standard-zonal-specific-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  initial_node_count = 1
  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "SPECIFIC_RESERVATION"
      key                      = "compute.googleapis.com/reservation-name"
      values                   = [google_compute_reservation.specific_reservation.name]
    }
  }

  depends_on = [
    google_compute_reservation.specific_reservation
  ]
}

Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Pertimbangan tambahan untuk memakai reservasi khusus

Saat node pool dibuat dengan afinitas reservasi khusus, termasuk node pool default selama pembuatan cluster, ukurannya dibatasi pada kapasitas reservasi khusus selama masa aktif node pool. Hal ini memengaruhi fitur GKE berikut:

  • Cluster dengan beberapa zona: Di cluster regional atau multi-zona, node dari node pool dapat mencakup beberapa zona. Karena reservasi bersifat satu zona, beberapa reservasi diperlukan. Agar node pool dapat menggunakan reservasi khusus di cluster ini, Anda harus membuat reservasi khusus dengan nama dan properti mesin yang sama persis di setiap zona node pool.
  • Penskalaan otomatis cluster dan upgrade node pool: Jika Anda tidak memiliki kapasitas ekstra di reservasi khusus, upgrade node pool atau penskalaan otomatis node pool mungkin akan gagal karena kedua operasi memerlukan pembuatan instance tambahan. Untuk mengatasi hal ini, Anda dapat mengubah ukuran reservasi, atau mengosongkan beberapa resource terbatasnya.

Menggunakan reservasi GPU

Untuk membuat node pool Standard yang menggunakan reservasi GPU, atau yang menggunakan reservasi apa pun dengan kapasitas di satu zona, Anda harus menentukan tanda --node-locations saat menambahkan node pool. Saat Anda membuat cluster Standard regional atau cluster Standard multi-zona, menentukan lokasi node akan membantu memastikan GKE membuat node hanya di zona tempat Anda telah mencadangkan kapasitas GPU.

Untuk mengetahui petunjuk mendetail tentang cara membuat node pool yang menggunakan GPU, lihat Membuat node pool GPU.

Menggunakan pemesanan TPU

Untuk membuat node pool Standar yang menggunakan reservasi TPU, Anda harus menentukan tanda --node-locations saat menambahkan node pool. Saat Anda membuat cluster Standard regional atau cluster Standard multi-zona, menentukan lokasi node akan membantu memastikan bahwa GKE membuat node hanya di zona tempat Anda telah memesan kapasitas TPU.

Pemesanan TPU berbeda dengan jenis mesin lainnya. Berikut adalah aspek khusus TPU yang harus Anda pertimbangkan saat membuat pemesanan TPU:

  • Saat menggunakan TPU di GKE, SPECIFIC adalah satu-satunya nilai yang didukung untuk flag --reservation-affinity.

Untuk mengetahui petunjuk mendetail tentang cara membuat node pool yang menggunakan TPU, lihat Membuat node pool TPU.

Membuat node tanpa memakai reservasi

Agar tidak memakai resource secara eksplisit dari reservasi apa pun, tetapkan afinitas ke --reservation-affinity=none.

  1. Buat cluster yang tidak akan memakai reservasi apa pun:

    gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
    

    Ganti CLUSTER_NAME dengan nama cluster yang akan dibuat.

  2. Buat node pool yang tidak akan menggunakan reservasi apa pun:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME \
        --reservation-affinity=none
    

    Ganti NODEPOOL_NAME dengan nama node pool yang akan dibuat.

Mengikuti reservasi yang tersedia antar-zona

Saat menggunakan node pool yang berjalan di beberapa zona dengan reservasi yang tidak sama antar-zona, Anda dapat menggunakan flag --location_policy=ANY. Pendekatan ini membantu memastikan bahwa saat node baru ditambahkan ke cluster, node tersebut dibuat di zona yang masih memiliki reservasi yang tidak digunakan.

Pembersihan

Agar resource yang digunakan di halaman ini tidak ditagihkan ke akun Penagihan Cloud Anda:

  1. Hapus cluster yang Anda buat dengan menjalankan perintah berikut untuk setiap cluster:

    gcloud container clusters delete CLUSTER_NAME
    
  2. Hapus reservasi yang Anda buat dengan menjalankan perintah berikut untuk setiap reservasi:

    gcloud compute reservations delete RESERVATION_NAME
    

Langkah berikutnya