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 mengatasi masalah umum terkait konfigurasi VerticalPodAutoscaler atau rekomendasi yang tidak terduga. Mengikuti langkah-langkah pemecahan masalah ini dapat membantu aplikasi Anda menskalakan 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. Informasi ini juga membantu admin dan operator Platform memecahkan masalah terkait konfigurasi cluster yang memengaruhi workload yang diskalakan otomatis. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam Cloud de Confiance by S3NS konten, lihat Peran dan tugas pengguna GKE umum.

Mendiagnosis masalah VerticalPodAutoscaler

Untuk mendiagnosis masalah dengan VerticalPodAutoscaler, periksa status dan konfigurasi menggunakan kubectl atau Cloud de Confiance konsol.

Mendeskripsikan VerticalPodAutoscaler

Untuk melihat perhitungan 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>

Dalam output, tinjau bagian utama berikut:

  • Spec: menampilkan detail konfigurasi, termasuk kolom targetRef (workload target) dan kolom updatePolicy (cara update diterapkan).
  • Status: menampilkan bagian Conditions (kondisi operasional) dan bagian Recommendation (nilai resource CPU dan memori yang dibuat 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 manifes YAML-nya menggunakan kubectl atau Cloud de Confiance konsol:

Konsol

  1. Di Cloud de Confiance konsol, buka halaman Object Browser.

    Buka Object Browser

  2. Klik daftar filter Object Kind.

  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 Cloud de Confiance konsol

Untuk memeriksa status VerticalPodAutoscaler untuk workload Anda di Cloud de Confiance konsol:

  1. Buka halaman Workloads.

    Buka Workloads

  2. Klik nama workload Anda.

  3. Buka tab Details dan temukan bagian Autoscaler.

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

Mengumpulkan log keputusan

Untuk mendapatkan insight mendetail tentang perhitungan dan keputusan VerticalPodAutoscaler, aktifkan vertical Pod autoscaler decision logs (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 dalam manifes VerticalPodAutoscaler kosong.
  • Kondisi dalam manifes VerticalPodAutoscaler menampilkan 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 dibuat dan masih mengumpulkan data penggunaan resource historis.
  • Masalah komponenmetrics-server: VerticalPodAutoscaler bergantung pada 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 workload ada, jalankan:

    kubectl get KIND WORKLOAD_NAME \
        -n NAMESPACE_NAME
    

    Ganti kode berikut:

    • KIND: jenis workload, misalnya, deployment atau statefulset.
    • WORKLOAD_NAME: nama workload Anda.
    • NAMESPACE_NAME: namespace workload Anda.
  • Beri 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. Verifikasi bahwa Pod untuk komponen metrics-server sedang berjalan:

      kubectl get pods -n kube-system | grep metrics-server
      
    2. Jika Pod tidak berjalan atau memiliki jumlah memulai 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 dengan pengumpulan metrik.

  • Pastikan Pod berjalan: verifikasi bahwa workload 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 konsumsi resource workload yang diamati.

Penyebab:

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

Resolusi:

  • Beri waktu penyesuaian: beri waktu bagi VerticalPodAutoscaler untuk mempelajari pola penggunaan baru setelah perubahan aplikasi.
  • Evaluasi kesesuaian: nilai apakah VerticalPodAutoscaler atau Horizontal Pod Autoscaler paling sesuai untuk jenis workload.
  • Periksa 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 bertentangan sehingga hanya satu VerticalPodAutoscaler yang menargetkan workload tertentu.

Memecahkan masalah pembaruan 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 dalam manifes Pod tidak diperbarui.
  • Pod tidak dimulai ulang untuk menerapkan rekomendasi saat menggunakan mode update Auto atau Recreate.

Penyebab:

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

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 mencukupi: jika node tidak memiliki kapasitas untuk permintaan resource yang diperbarui, operasi pengubahan ukuran di tempat akan ditangguhkan.

Resolusi:

  • Verifikasi status pengubahan ukuran yang ditangguhkan dan kapasitas node:

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

    1. Periksa anotasi Pod untuk melihat apakah vpaInPlaceUpdated anotasi ditetapkan 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 pengubahan 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 (kembali ke pembuatan ulang).

Langkah berikutnya