Mengontrol atribut node yang diskalakan otomatis dengan ComputeClass kustom

Halaman ini menunjukkan cara mengontrol infrastruktur komputasi dan perilaku penskalaan otomatis cluster Google Kubernetes Engine (GKE) berdasarkan kebutuhan spesifik workload Anda menggunakan ComputeClass kustom. Anda seharusnya sudah memahami konsep ComputeClass kustom. Untuk mengetahui detailnya, lihat Tentang ComputeClass kustom.

Halaman ini ditujukan bagi administrator platform yang ingin menentukan profil penskalaan otomatis untuk node secara deklaratif, dan bagi operator cluster yang ingin menjalankan workload mereka di ComputeClass tertentu.

Tentang ComputeClass kustom

ComputeClass Kustom adalah Resource Kustom Kubernetes yang memungkinkan Anda menentukan prioritas yang harus diikuti GKE saat menyediakan node untuk menjalankan workload Anda. Anda dapat menggunakan ComputeClass kustom untuk melakukan hal berikut:

  • Memberi GKE serangkaian prioritas untuk diikuti secara berurutan saat menyediakan node, masing-masing dengan parameter tertentu seperti seri mesin Compute Engine atau kapasitas resource minimum
  • Tentukan nilai minimum dan parameter penskalaan otomatis untuk menghapus node yang kurang dimanfaatkan dan menggabungkan workload secara efisien pada kapasitas komputasi yang ada
  • Memberi tahu GKE untuk mengganti konfigurasi node yang kurang disukai secara otomatis dengan konfigurasi node yang lebih disukai untuk performa workload yang optimal

Untuk memahami semua opsi konfigurasi dan cara interaksinya satu sama lain serta dengan mode GKE Autopilot dan mode GKE Standard, lihat Tentang ComputeClass kustom.

Harga

Resource kustom ComputeClass disediakan tanpa biaya tambahan di GKE. Pertimbangan harga berikut berlaku:

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin 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 gcloud components update.
  • Pastikan Anda memiliki cluster GKE yang sudah ada yang menjalankan versi 1.30.3-gke.1451000 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Membuat cluster Autopilot.
  • Jika Anda menggunakan cluster mode Standar, pastikan Anda memiliki setidaknya satu node pool dengan penskalaan otomatis diaktifkan atau cluster Anda menggunakan penyediaan otomatis node.

Contoh skenario untuk ComputeClasses

Halaman ini menyajikan contoh skenario yang menentukan class komputasi kustom. Dalam praktiknya, Anda harus mempertimbangkan persyaratan workload dan organisasi tertentu, serta menentukan ComputeClass yang memenuhi persyaratan tersebut. Untuk deskripsi lengkap semua opsi ComputeClass, dan untuk pertimbangan khusus, lihat Tentang ComputeClass kustom.

Pertimbangkan skenario contoh berikut:

  • Tujuan Anda adalah mengoptimalkan biaya operasional untuk workload Anda
  • Workload Anda fault-tolerant dan tidak memerlukan penonaktifan yang tuntas atau runtime yang diperpanjang
  • Workload Anda memerlukan minimal 64 vCPU agar dapat berjalan secara optimal
  • Anda dibatasi untuk menggunakan seri mesin Compute Engine N4

Berdasarkan contoh skenario, Anda memutuskan bahwa Anda menginginkan ComputeClass yang melakukan hal berikut:

  • Memprioritaskan node Spot N4 yang memiliki minimal 64 vCPU
  • Memungkinkan GKE melakukan failover ke node Spot N4 mana pun, terlepas dari kapasitas komputasi
  • Jika tidak ada node Spot N4 yang tersedia, izinkan GKE menggunakan node N4 on-demand
  • Memberi tahu GKE untuk memindahkan beban kerja Anda ke node Spot setiap kali node tersebut tersedia kembali

Mengonfigurasi ComputeClass dalam mode Autopilot

Di GKE Autopilot, Anda menentukan ComputeClass, men-deploy-nya ke cluster, dan meminta ComputeClass tersebut dalam workload Anda. GKE melakukan langkah-langkah konfigurasi node, seperti menerapkan label dan taint, untuk Anda.

Simpan manifes berikut sebagai compute-class.yaml:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: cost-optimized
spec:
  priorities:
  - machineFamily: n4
    spot: true
    minCores: 64
  - machineFamily: n4
    spot: true
  - machineFamily: n4
    spot: false
  activeMigration:
    optimizeRulePriority: true
  nodePoolAutoCreation:
    enabled: true

Mengonfigurasi ComputeClass dalam mode Standard

Di cluster mode GKE Standard, Anda menentukan class komputasi, setelah itu Anda mungkin harus melakukan konfigurasi manual untuk memastikan Pod ComputeClass Anda dijadwalkan seperti yang diharapkan. Konfigurasi manual bergantung pada apakah node pool Anda disediakan secara otomatis atau tidak, sebagai berikut:

Menggunakan ComputeClass dengan node pool yang dibuat secara manual

Bagian ini menunjukkan cara menentukan ComputeClass dalam cluster yang hanya menggunakan node pool yang dibuat secara manual.

  1. Simpan manifes berikut sebagai compute-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: cost-optimized
    spec:
      priorities:
      - machineFamily: n4
        spot: true
        minCores: 64
      - machineFamily: n4
        spot: true
      - machineFamily: n4
        spot: false
      activeMigration:
        optimizeRulePriority: true
    
  2. Buat node pool penskalaan otomatis baru yang menggunakan Spot VM dan kaitkan dengan ComputeClass:

    gcloud container node-pools create cost-optimized-pool \
        --location=LOCATION \
        --cluster=CLUSTER_NAME \
        --machine-type=n4-standard-64 \
        --spot \
        --enable-autoscaling \
        --max-nodes=9 \
        --node-labels="cloud.google.com/compute-class=cost-optimized" \
        --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
    

    Ganti kode berikut:

    • LOCATION: lokasi cluster Anda.
    • CLUSTER_NAME: nama cluster yang ada.
  3. Buat node pool yang diskalakan otomatis baru dengan VM sesuai permintaan dan kaitkan dengan ComputeClass:

    gcloud container node-pools create on-demand-pool \
        --location=LOCATION \
        --cluster=CLUSTER_NAME \
        --machine-type=n4-standard-64 \
        --enable-autoscaling \
        --max-nodes=9 \
        --num-nodes=0 \
        --node-labels="cloud.google.com/compute-class=cost-optimized" \
        --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
    

Saat Anda men-deploy Pod yang meminta ComputeClass ini dan node baru perlu dibuat, GKE memprioritaskan pembuatan node di node pool cost-optimized-pool. Jika node baru tidak dapat dibuat, GKE akan membuat node di node pool on-demand-pool.

Untuk mengetahui detail selengkapnya tentang cara node pool yang dibuat secara manual berinteraksi dengan ComputeClass kustom, lihat Mengonfigurasi node pool yang dibuat secara manual untuk penggunaan ComputeClass.

Menggunakan ComputeClass dengan node pool yang disediakan otomatis

Bagian ini menunjukkan cara menentukan ComputeClass di cluster yang menggunakan penyediaan otomatis node.

Simpan manifes berikut sebagai compute-class.yaml:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: cost-optimized
spec:
  priorities:
  - machineFamily: n4
    spot: true
    minCores: 64
  - machineFamily: n4
    spot: true
  - machineFamily: n4
    spot: false
  activeMigration:
    optimizeRulePriority: true
  nodePoolAutoCreation:
    enabled: true

Saat Anda men-deploy Pod yang meminta ComputeClass ini dan node baru perlu dibuat, GKE akan memprioritaskan pembuatan node dalam urutan item di kolom priorities. Jika diperlukan, GKE akan membuat node pool baru yang memenuhi persyaratan hardware ComputeClass.

Anda juga dapat menentukan jenis mesin kustom yang tepat dalam prioritas Anda. Penggunaan jenis mesin kustom memerlukan GKE versi 1.33.2-gke.1111000 atau yang lebih baru. Contoh berikut mengonfigurasi ComputeClass yang memprioritaskan Spot VM untuk jenis mesin kustom n4-custom-8-20480, dan melakukan failover ke VM on-demand dengan jenis yang sama jika kapasitas Spot tidak tersedia:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: custom-machine-type
spec:
  priorities:
  - machineType: n4-custom-8-20480
    spot: true
  - machineType: n4-custom-8-20480
    spot: false
  nodePoolAutoCreation:
    enabled: true

Untuk mengetahui detail selengkapnya tentang cara kerja penyediaan otomatis node dengan class komputasi kustom, lihat Penyediaan otomatis node dan ComputeClass.

Menyesuaikan nilai minimum penskalaan otomatis untuk konsolidasi node

Secara default, GKE menghapus node yang kurang dimanfaatkan dan menjadwalkan ulang workload Anda ke node lain yang tersedia. Anda dapat menyesuaikan lebih lanjut nilai minimum dan waktu setelah node menjadi kandidat untuk dihapus dengan menggunakan kolom autoscalingPolicy dalam definisi ComputeClass, seperti dalam contoh berikut:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: cost-optimized
spec:
  priorities:
  - machineFamily: n4
    spot: true
    minCores: 64
  - machineFamily: n4
    spot: true
  - machineFamily: n4
    spot: false
  activeMigration:
    optimizeRulePriority: true
  autoscalingPolicy:
    consolidationDelayMinutes : 5
    consolidationThreshold    : 70

Contoh ini membuat node menjadi kandidat untuk dihapus jika kurang dimanfaatkan sebesar 70% dari kapasitas CPU dan memori yang tersedia selama lebih dari lima menit. Untuk mengetahui daftar parameter yang tersedia, lihat Menetapkan parameter penskalaan otomatis untuk konsolidasi node.

Men-deploy ComputeClass di cluster

Setelah Anda menentukan ComputeClass, deploy ke cluster:

kubectl apply -f compute-class.yaml

ComputeClass ini siap digunakan di cluster. Anda dapat meminta class komputasi dalam spesifikasi Pod atau, secara opsional, menetapkannya sebagai ComputeClass default di namespace tertentu.

Meminta ComputeClass dalam workload

Untuk meminta ComputeClass dalam workload, tambahkan pemilih node untuk class komputasi tersebut dalam manifes Anda.

  1. Simpan manifes berikut sebagai cc-workload.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: custom-workload
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: custom-workload
      template:
        metadata:
          labels:
            app: custom-workload
        spec:
          nodeSelector:
            cloud.google.com/compute-class: cost-optimized
          containers:
          - name: test
            image: gcr.io/google_containers/pause
            resources:
              requests:
                cpu: 1.5
                memory: "4Gi"
    
  2. Men-deploy workload:

    kubectl apply -f cc-workload.yaml
    

Saat Anda men-deploy workload ini, GKE akan otomatis menambahkan toleransi ke Pod yang sesuai dengan taint node untuk ComputeClass yang diminta. Toleransi ini memastikan bahwa hanya Pod yang meminta class komputasi yang berjalan di node ComputeClass.

Memperbarui ComputeClass yang di-deploy

Untuk memperbarui ComputeClass yang di-deploy, ubah manifes YAML untuk ComputeClass. Kemudian, deploy manifes yang telah diubah dengan menjalankan perintah berikut:

kubectl apply -f PATH_TO_FILE

Ganti PATH_TO_FILE dengan jalur ke manifes yang telah diubah. Pastikan nilai di kolom name tidak berubah.

Saat Anda men-deploy ComputeClass yang telah diupdate, GKE akan menggunakan konfigurasi yang telah diupdate untuk membuat node baru. GKE tidak mengubah node yang ada dengan konfigurasi yang telah diupdate.

Seiring waktu, GKE dapat memindahkan Pod yang ada ke node yang menggunakan konfigurasi yang diperbarui jika ComputeClass menggunakan migrasi aktif dan jika Pod yang ada memenuhi syarat untuk dimigrasikan.

Langkah berikutnya