Memecahkan masalah penskalaan otomatis Pod vertikal

Jika penskalaan otomatis Pod vertikal tidak berfungsi seperti yang diharapkan di Google Kubernetes Engine (GKE), workload Anda mungkin tidak diskalakan dengan benar. Masalah ini dapat mencegah aplikasi menangani beban, yang dapat menyebabkan masalah performa atau gangguan. Anda mungkin melihat Pod tidak dimulai ulang dengan rekomendasi resource baru, atau rekomendasi yang tidak sesuai dengan penggunaan sebenarnya.

Gunakan dokumen ini untuk menyelesaikan masalah umum terkait konfigurasi VerticalPodAutoscaler atau rekomendasi yang tidak terduga. Mengikuti langkah-langkah pemecahan masalah ini dapat membantu aplikasi Anda melakukan penskalaan secara efisien dan andal berdasarkan permintaan.

Informasi ini penting bagi developer Aplikasi yang mengonfigurasi resource VerticalPodAutoscaler dan perlu memastikan bahwa aplikasi mereka diskalakan dengan benar. Hal ini juga membantu admin dan operator Platform memecahkan masalah konfigurasi cluster yang memengaruhi workload yang diskalakan otomatis. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE umum.

Mendiagnosis masalah VerticalPodAutoscaler

Untuk mendiagnosis masalah pada VerticalPodAutoscaler, periksa status dan konfigurasi menggunakan kubectl atau konsol Google Cloud .

Mendeskripsikan VerticalPodAutoscaler

Untuk melihat penghitungan real-time dan keputusan penskalaan terbaru, gunakan perintah kubectl describe vpa:

kubectl describe vpa VPA_NAME -n NAMESPACE_NAME

Ganti kode berikut:

  • VPA_NAME: nama VerticalPodAutoscaler Anda.
  • NAMESPACE_NAME: namespace VerticalPodAutoscaler Anda.

Outputnya mirip dengan hal berikut ini:

Name:         sample-deployment-vpa
Namespace:    default
API Version:  autoscaling.k8s.io/v1
Kind:         VerticalPodAutoscaler
# Multiple lines are omitted here
Spec:
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         sample-deployment
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2025-10-09T10:00:00Z
    Message:               VPA is fetching history in order to provide recommendation
    Reason:                FetchingHistory
    Status:                True
    Type:                  FetchingHistory
    Last Transition Time:  2025-10-09T10:05:00Z
    Message:               VPA pod metrics aren't available yet
    Reason:                NoMetrics
    Status:                True
    Type:                  LowConfidence
    Last Transition Time:  2025-10-09T10:10:00Z
    Message:               VPA is able to provide a recommendation
    Reason:                RecommendationProvided
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  sample-container
      Lower Bound:
        Cpu:     100m
        Memory:  128Mi
      Target:
        Cpu:     200m
        Memory:  256Mi
      Upper Bound:
        Cpu:     500m
        Memory:  512Mi
Events:          <none>

Pada output, tinjau bagian utama berikut:

  • Spec: menampilkan detail konfigurasi, termasuk kolom targetRef (beban kerja yang ditargetkan) dan kolom updatePolicy (cara penerapan update).
  • Status: menampilkan bagian Conditions (kesehatan operasional) dan bagian Recommendation (nilai resource CPU dan memori yang dihasilkan untuk setiap container).
  • Events: mencantumkan tindakan atau error terbaru yang terkait dengan objek VerticalPodAutoscaler.

Melihat manifes VerticalPodAutoscaler

Untuk melihat konfigurasi dan status lengkap VerticalPodAutoscaler, periksa manifest YAML-nya menggunakan kubectl atau konsol Google Cloud :

Konsol

  1. Di konsol Google Cloud , buka halaman Object Browser.

    Buka Object Browser

  2. Klik daftar filter Jenis Objek.

  3. Hapus pilihan yang ada.

  4. Pilih VerticalPodAutoscaler, lalu klik OK.

  5. Dalam daftar yang difilter, pilih grup API autoscaling.k8s.io.

  6. Pilih jenis objek VerticalPodAutoscaler.

  7. Klik nama VerticalPodAutoscaler yang ingin Anda periksa.

kubectl

kubectl get vpa VPA_NAME \
    -n NAMESPACE_NAME \
    -o yaml

Ganti kode berikut:

  • VPA_NAME: nama VerticalPodAutoscaler Anda.
  • NAMESPACE_NAME: namespace VerticalPodAutoscaler Anda.

Memeriksa status VerticalPodAutoscaler di konsol Google Cloud

Untuk memeriksa status VerticalPodAutoscaler untuk workload Anda di konsol Google Cloud :

  1. Buka halaman Workloads.

    Buka Workloads

  2. Klik nama workload Anda.

  3. Buka tab Details dan cari bagian Autoscaler.

  4. Tinjau baris Vertical Pod Autoscaler untuk mengetahui pesan status terkait pengumpulan metrik dan kondisi konfigurasi.

Mengumpulkan log keputusan

Untuk mendapatkan insight mendetail tentang perhitungan dan keputusan VerticalPodAutoscaler, aktifkan log keputusan penskalaan otomatis Pod vertikal (Pratinjau) di Cloud Logging.

Log ini mencatat peristiwa seperti UPDATE_RECOMMENDATION, EVICT_POD, APPLY_RECOMMENDATION_IN_PLACE, dan APPLY_RECOMMENDATION_ON_EVICTION.

Untuk mengaktifkan dan memeriksa log keputusan, lihat Mengumpulkan log peristiwa penskalaan otomatis Pod vertikal.

Memecahkan masalah rekomendasi VerticalPodAutoscaler

Bagian berikut membahas masalah saat VerticalPodAutoscaler gagal menghasilkan rekomendasi atau menghasilkan rekomendasi yang berbeda dari ekspektasi.

VerticalPodAutoscaler tidak memberikan rekomendasi

Gejala:

  • Kolom Status.Recommendation di manifes VerticalPodAutoscaler kosong.
  • Kondisi dalam manifes VerticalPodAutoscaler menunjukkan kondisi status NoPodsMatched, FetchingHistory, atau LowConfidence.

Penyebab:

  • Target salah: kolom spec.targetRef dalam manifes VerticalPodAutoscaler tidak mengarah ke workload yang ada di namespace yang sama.
  • Pengumpulan metrik awal: VerticalPodAutoscaler baru saja dibuat dan masih mengumpulkan data penggunaan resource historis.
  • Masalah komponen metrics-server: VerticalPodAutoscaler mengandalkan metrik dari komponen metrics-server. Jika komponen metrics-server tidak berfungsi dengan benar, VerticalPodAutoscaler tidak dapat mengambil data penggunaan.
  • Tidak ada Pod yang berjalan: workload target tidak memiliki Pod yang berjalan atau siap untuk diamati oleh VerticalPodAutoscaler.

Resolusi:

  • Verifikasi kolom targetRef: periksa nilai untuk kolom kind, name, dan apiVersion di bagian spec.targetRef. Pastikan semua nilai cocok dengan workload target. Untuk mengonfirmasi bahwa beban kerja ada, jalankan:

    kubectl get KIND WORKLOAD_NAME \
        -n NAMESPACE_NAME
    

    Ganti kode berikut:

    • KIND: jenis beban kerja, misalnya, deployment atau statefulset.
    • WORKLOAD_NAME: nama workload Anda.
    • NAMESPACE_NAME: namespace workload Anda.
  • Berikan waktu untuk pengumpulan metrik: resource VerticalPodAutoscaler baru memerlukan waktu untuk mengumpulkan data. Pantau kolom Status.Conditions untuk transisi ke kondisi status RecommendationProvided.

  • Periksa komponen metrics-server:

    1. Pastikan Pod untuk komponen metrics-server sedang berjalan:

      kubectl get pods -n kube-system | grep metrics-server
      
    2. Jika Pod tidak berjalan atau memiliki jumlah mulai ulang yang tinggi, periksa log-nya:

      kubectl logs -n kube-system -l k8s-app=metrics-server
      

      Entri log yang berisi kata-kata seperti error, failed, atau unable to fetch menunjukkan masalah pada pengumpulan metrik.

  • Pastikan Pod berjalan: verifikasi bahwa beban kerja target memiliki setidaknya satu Pod yang berjalan dan siap.

Rekomendasi VerticalPodAutoscaler tidak terduga

Gejala:

  • Nilai CPU atau memori di bagian Status.Recommendation lebih tinggi atau lebih rendah dari yang diharapkan.
  • Rekomendasi tidak sesuai dengan pemakaian resource workload yang diamati.

Penyebab:

  • Perubahan perilaku workload: Rekomendasi VerticalPodAutoscaler didasarkan pada penggunaan historis. Perubahan terbaru dalam pola konsumsi aplikasi mungkin belum terlihat.
  • Karakteristik workload: tugas atau workload yang berumur pendek dengan pola penggunaan yang sangat tidak teratur mungkin tidak menerima rekomendasi yang optimal.
  • Resource VerticalPodAutoscaler yang bertentangan: beberapa resource VerticalPodAutoscaler dapat dikonfigurasi untuk menargetkan workload yang sama.

Resolusi:

  • Berikan waktu penyesuaian: beri VerticalPodAutoscaler waktu untuk mempelajari pola penggunaan baru setelah perubahan aplikasi.
  • Mengevaluasi kesesuaian: menilai apakah VerticalPodAutoscaler atau Horizontal Pod Autoscaler paling cocok untuk jenis workload.
  • Periksa apakah ada resource VerticalPodAutoscaler yang bertentangan:

    1. Cantumkan semua resource VerticalPodAutoscaler di cluster Anda:

      kubectl get vpa --all-namespaces
      
    2. Periksa kolom spec.targetRef untuk setiap resource. Jika beberapa resource VerticalPodAutoscaler menargetkan workload yang sama, hapus atau sesuaikan resource yang berkonflik sehingga hanya ada satu VerticalPodAutoscaler yang menargetkan workload tertentu.

Memecahkan masalah update resource Pod

Bagian berikut membahas masalah saat rekomendasi ada, tetapi tidak diterapkan ke Pod target.

Permintaan resource Pod tidak diperbarui

Gejala:

  • Manifes VerticalPodAutoscaler menampilkan rekomendasi di bagian Status, tetapi kolom resources.requests di manifes Pod tidak diperbarui.
  • Pod tidak dimulai ulang untuk menerapkan rekomendasi saat menggunakan mode update Auto atau Recreate.

Penyebab:

  • Kolom updateMode adalah Off: saat kolom spec.updatePolicy.updateMode ditetapkan ke Off, VerticalPodAutoscaler akan membuat rekomendasi, tetapi tidak menerapkannya.
  • Workload hanya memiliki satu replika: dalam mode update Auto atau Recreate, VerticalPodAutoscaler menghindari penghentian paksa workload replika tunggal untuk mencegah downtime.

Resolusi:

  • Periksa kolom updateMode: ubah manifes VerticalPodAutoscaler untuk menetapkan kolom spec.updatePolicy.updateMode ke Auto, Recreate, atau InPlaceOrRecreate.
  • Tingkatkan jumlah replika: untuk workload yang menggunakan mode update Auto atau Recreate, pastikan Deployment atau StatefulSet memiliki lebih dari satu replika.

Update di tempat gagal atau tetap ditangguhkan

Gejala:

  • Pengubahan ukuran container di tempat gagal diselesaikan atau tetap ditangguhkan.

Penyebab:

  • Kapasitas node tidak memadai: jika node tidak memiliki kapasitas untuk permintaan resource yang diperbarui, operasi pengubahan ukuran di tempat akan ditangguhkan.

Resolusi:

  • Memverifikasi status pengubahan ukuran yang ditangguhkan dan kapasitas node:

    Jika pengubahan ukuran tetap ditangguhkan selama lebih dari lima menit, VerticalPodAutoscaler akan kembali ke penghapusan dan pembuatan ulang Pod untuk menerapkan rekomendasi. Untuk memeriksa status update yang ditangguhkan, lakukan hal berikut:

    1. Periksa anotasi Pod untuk memeriksa apakah anotasi vpaInPlaceUpdated disetel ke "true":

      metadata:
        annotations:
          vpaInPlaceUpdated: "true"
          vpaUpdates: 'Pod resources updated by sample-deployment-vpa: container 0: cpu request, memory request'
      
    2. Periksa status yang ditangguhkan dengan memeriksa kolom status.conditions untuk peristiwa perubahan ukuran yang ditangguhkan:

      status:
        conditions:
        - type: PodResizePending
          status: "True"
          reason: Deferred
          message: "Node didn't have enough resource: ..."
      
    3. Periksa peristiwa Kubernetes untuk Pod:

      kubectl get events -n NAMESPACE_NAME --field-selector involvedObject.kind=Pod,involvedObject.name=POD_NAME
      

      Ganti kode berikut:

      • NAMESPACE_NAME: namespace Pod Anda.
      • POD_NAME: nama Pod Anda.

      Cari peristiwa dengan salah satu alasan berikut: ResizedPod (update di tempat berhasil) atau EvictedByVPA (fallback ke pembuatan ulang).

Langkah berikutnya