Mengonfigurasi penskalaan otomatis Pod vertikal

Penskalaan otomatis Pod vertikal mengotomatiskan penetapan permintaan dan batas resource CPU dan memori untuk container dalam Pod Kubernetes. Penskalaan otomatis Pod vertikal menganalisis penggunaan resource historis dan saat ini untuk memberikan rekomendasi, yang dapat ditampilkan atau diterapkan secara otomatis dengan memperbarui Pod. Fitur ini meningkatkan stabilitas dan efisiensi biaya dengan menyesuaikan ukuran alokasi resource.

Sebelum memulai

Sebelum mengonfigurasi Penskalaan Otomatis Pod Vertikal, pastikan Anda memenuhi prasyarat berikut:

  • Anda memiliki cluster bare metal yang sedang berjalan.
  • Anda memiliki akses kubectl ke cluster.
  • Metrics Server tersedia di cluster. Cluster bare metal menyertakan Metrics Server secara default.

Mengaktifkan penskalaan otomatis Pod vertikal

Aktifkan penskalaan otomatis Pod vertikal di cluster bare metal Anda dengan menyetel anotasi pratinjau dan mengonfigurasi spesifikasi cluster:

  1. Tambahkan atau perbarui anotasi pratinjau pada resource kustom Cluster.

    Edit resource kustom Cluster secara langsung atau ubah file konfigurasi cluster dan gunakan bmctl update.

    metadata:
      annotations:
        preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
    
  2. Ubah spec resource kustom Cluster untuk menyertakan kolom verticalPodAutoscaling dan tentukan mode enableUpdater dan enableMemorySaver:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: cluster1
      namespace: cluster-cluster1
      annotations:
        preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
    spec:
      # ... other cluster spec fields
      verticalPodAutoscaling:
        enableUpdater: true       # Set to true for automated updates
        enableMemorySaver: true   # Set to true to reduce recommender memory usage
    
  3. Jika Anda mengubah file konfigurasi cluster, terapkan perubahan menggunakan perintah berikut:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.

    • KUBECONFIG: jalur file kubeconfig cluster Anda.

Membuat resource kustom VerticalPodAutoscaler

Setelah mengaktifkan penskalaan otomatis Pod vertikal di cluster Anda, tentukan resource kustom VerticalPodAutoscaler untuk menargetkan workload tertentu:

  1. Tentukan resource VerticalPodAutoscaler di namespace yang sama dengan target workload.

    Resource kustom ini menentukan Pod mana yang ditargetkan menggunakan targetRef dan kebijakan resource apa pun.

    apiVersion: "autoscaling.k8s.io/v1"
    kind: VerticalPodAutoscaler
    metadata:
      name: hamster-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind: Deployment
        name: hamster
      resourcePolicy:
        containerPolicies:
          -   containerName: '*'
            minAllowed:
              cpu: 100m
              memory: 50Mi
            maxAllowed:
              cpu: 1
              memory: 500Mi
            controlledResources: ["cpu", "memory"]
    
  2. Terapkan manifes VerticalPodAutoscaler menggunakan perintah berikut:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • VPA_MANIFEST: jalur file manifes VerticalPodAutoscaler.

    • KUBECONFIG: jalur file kubeconfig cluster.

Memahami mode penskalaan otomatis Pod vertikal

Penskalaan otomatis Pod vertikal beroperasi dalam berbagai mode yang mengontrol cara penerapan rekomendasi resource.

Mode rekomendasi

Dalam mode rekomendasi, penskalaan otomatis Pod vertikal menginstal komponen pemberi rekomendasi. Komponen ini menganalisis penggunaan resource dan memublikasikan nilai yang direkomendasikan untuk permintaan dan batas CPU serta memori di bagian status resource kustom VerticalPodAutoscaler yang Anda buat.

Untuk melihat rekomendasi permintaan dan batas resource, gunakan perintah berikut:

kubectl describe vpa VPA_NAME \
    --kubeconfig KUBECONFIG \
    -n CLUSTER_NAMESPACE
Replace the following:

*   `VPA_NAME`: the name of the `VerticalPodAutoscaler`
    that's targeting the workloads for which you are considering resource
    adjustments.

*   `KUBECONFIG`: the path of the cluster kubeconfig
    file.

*   `CLUSTER_NAMESPACE`: the name of the cluster that's
    running vertical Pod autoscaling.

Respons harus berisi bagian Status yang mirip dengan contoh berikut:

Status:
  Conditions:
    Last Transition Time:  2025-08-04T23:53:32Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     100m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi

Pod tidak diperbarui secara otomatis dalam mode ini. Gunakan rekomendasi ini untuk memperbarui konfigurasi Pod Anda secara manual. Ini adalah perilaku default jika enableUpdater tidak ditetapkan atau false.

Mode update otomatis

Saat Anda menetapkan enableUpdater enableUpdater ke true, pengontrol siklus proses bare metal akan men-deploy komponen updater dan pengontrol penerimaan penskalaan otomatis Pod vertikal selain recommender. Updater memantau Pod yang permintaan resource saat ini sangat berbeda dari rekomendasi.

Kebijakan update di resource VerticalPodAutoscaler menentukan cara updater menerapkan rekomendasi. Secara default, mode update adalah Auto, yang menentukan bahwa updater menetapkan setelan resource yang diupdate pada pembuatan Pod. Contoh VerticalPodAutoscaler berikut menunjukkan cara menyetel mode pembaruan ke Initial:

apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
  name: hamster-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: hamster
  resourcePolicy:
  updatePolicy:
    updateMode: "Initial"
    ...

Pengupdate mendukung lima mode berikut:

  • Auto: Pengupdate mengeluarkan Pod. Pengontrol penerimaan mencegat permintaan pembuatan Pod baru dan mengubahnya untuk menggunakan nilai CPU dan memori yang direkomendasikan oleh pemberi rekomendasi. Mengupdate resource memerlukan pembuatan ulang Pod, yang dapat menyebabkan gangguan. Gunakan Pod Disruption Budgets, yang dipatuhi updater, untuk mengelola proses penghapusan. Mode ini setara dengan Recreate.

  • Recreate: Updater mengeluarkan Pod dan menetapkan permintaan dan batas resource yang direkomendasikan saat Pod dibuat ulang.

  • InPlaceOrRecreate(alfa): Updater mencoba update di tempat dengan upaya terbaik, tetapi dapat melakukan penggantian Pod jika update di tempat tidak memungkinkan. Untuk mengetahui informasi selengkapnya, lihat dokumentasi pengubahan ukuran pod di tempat.

  • Initial: Updater hanya menetapkan permintaan resource saat pembuatan Pod dan tidak pernah mengubahnya nanti.

  • Off: Updater tidak otomatis mengubah persyaratan resource Pod. Rekomendasi tersebut dihitung dan dapat diperiksa di objek VerticalPodAutoscaler.

Untuk mengetahui informasi selengkapnya tentang resource kustom VerticalPodAutoscaler, gunakan kubectl untuk mengambil definisi resource kustom verticalpodautoscalercheckpoints.autoscaling.k8s.io yang diinstal pada cluster versi 1.33.0 atau yang lebih baru.

Contoh berikut menunjukkan cara rekomendasi resource dapat muncul di bagian Status untuk penampung hamster. Contoh ini juga menunjukkan contoh peristiwa penghapusan Pod, yang terjadi saat updater menghapus Pod sebelum otomatis menetapkan konfigurasi resource yang direkomendasikan ke Pod yang dibuat ulang:

Spec:
  Resource Policy:
    Container Policies:
      Container Name:  *
      Controlled Resources:
        cpu
        memory
      Max Allowed:
        Cpu:     1
        Memory:  500Mi
      Min Allowed:
        Cpu:     100m
        Memory:  50Mi
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         hamster
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2025-08-04T23:53:32Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     100m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi
Events:
  Type    Reason      Age   From         Message
  ----    ------      ----  ----         -------
  Normal  EvictedPod  49s   vpa-updater  VPA Updater evicted Pod hamster-7cb59fb657-lkrk4 to apply resource recommendation.

Mode penghemat memori

Mode penghemat memori mengurangi jejak memori komponen pemberi rekomendasi penskalaan otomatis Pod vertikal. Saat Anda menyetel enableMemorySaver ke true, pemberi rekomendasi hanya melacak dan menghitung agregasi untuk Pod yang memiliki resource kustom VerticalPodAutoscaler yang cocok.

Sebagai gantinya, saat Anda membuat resource kustom VerticalPodAutoscaler baru untuk workload yang ada, pemberi rekomendasi memerlukan waktu beberapa saat (hingga 24 jam) untuk mengumpulkan histori yang cukup guna memberikan rekomendasi yang akurat. Mode ini adalah false secara default untuk sebagian besar jenis cluster, tetapi defaultnya adalah true untuk cluster edge.

Menonaktifkan Penskalaan Otomatis Pod Vertikal

Nonaktifkan Penskalaan Otomatis Pod Vertikal dengan menghapus resource kustom dan konfigurasinya dari cluster Anda:

  1. Hapus resource kustom VerticalPodAutoscaler yang telah Anda buat.

  2. Ubah resource kustom Cluster dan hapus seluruh bagian verticalPodAutoscaling dari spec.

    Anda dapat mengedit resource kustom Cluster secara langsung atau mengubah file konfigurasi cluster dan menggunakan bmctl update.

  3. Hapus anotasi preview.baremetal.cluster.gke.io/vertical-pod-autoscaler dari resource kustom Cluster.

Batasan

Pertimbangkan batasan berikut saat menggunakan Penskalaan Otomatis Pod Vertikal:

  • Penskalaan otomatis Pod vertikal belum siap digunakan untuk workload berbasis JVM karena visibilitas yang terbatas ke penggunaan memori aktual workload.
  • Updater memerlukan minimal dua replika Pod untuk Deployment guna mengganti Pod dengan nilai resource yang direvisi.
  • Updater tidak memperbarui Pod yang mengalami loop error dengan cepat karena error Kehabisan Memori (OOM).
  • Kebijakan update InPlaceOrRecreate untuk Pod adalah fitur alfa dalam penskalaan otomatis Pod vertikal. Proses ini mencoba update di tempat dengan upaya terbaik, tetapi dapat melakukan penggantian Pod jika update di tempat tidak memungkinkan.

Langkah berikutnya