Mengumpulkan log peristiwa penskalaan otomatis Pod horizontal

Halaman ini memberikan informasi tentang peristiwa keputusan yang dikeluarkan oleh horizontal Pod autoscaler di Google Kubernetes Engine (GKE). Dengan menganalisis peristiwa ini, Anda dapat memperoleh insight tentang cara pengontrol penskalaan otomatis Pod horizontal mengelola penskalaan beban kerja dan memahami proses pengambilan keputusan di balik tindakannya.

Penskala otomatis Pod horizontal menghasilkan peristiwa keputusan, yang disimpan sebagai entri log di Cloud Logging.

Sebelum memulai

Pastikan untuk menyelesaikan prasyarat berikut:

Pilih atau buat project

Anda dapat menggunakan project yang ada, atau membuat project baru untuk tutorial ini.

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

Mengaktifkan API

Aktifkan GKE dan Cloud Logging API.

Peran yang diperlukan untuk mengaktifkan API

Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

Aktifkan API

Menyiapkan Cloud Shell

Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk menjalankan perintah gcloud dan kubectl. Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Cloud de Confiance by S3NS. Cloud Shell telah diinstal lebih dulu dengan alat command line Google Cloud CLI dan kubectl.

Di konsol Cloud de Confiance , aktifkan Cloud Shell.

Aktifkan Cloud Shell

Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah di konsol.

Sebelum menjalankan perintah dalam tutorial ini, pastikan project default Anda ditetapkan ke project ID tempat Anda ingin men-deploy aplikasi contoh. Jika belum ditetapkan, jalankan perintah berikut di Cloud Shell:

gcloud config set project PROJECT_ID

Ganti PROJECT_ID dengan project ID Anda.

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengaktifkan pembuatan log, serta mengakses dan memproses log, minta administrator untuk memberi Anda peran IAM berikut pada project:

  • Untuk mengaktifkan logging peristiwa penskalaan otomatis Pod horizontal di cluster Anda: Admin Cluster Kubernetes Engine (roles/container.clusterAdmin)
  • Untuk mengakses log dan menggunakan Logs Explorer serta Observability Analytics: Logs Viewer (roles/logging.viewer)

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Persyaratan

  • Cluster GKE Anda harus menjalankan versi 1.31.5-gke.1090000 atau yang lebih baru, atau 1.32.1-gke.1260000 atau yang lebih baru.
  • Aktifkan Cloud Logging di cluster GKE Anda. Harga Cloud Logging berlaku.
  • Pastikan Anda memiliki penskalaan otomatis Pod horizontal yang ingin dipantau. Pastikan kolom penskalaan otomatis Pod horizontal tidak menyertakan data sensitif.

Biaya

Harga Cloud Logging berlaku saat Anda mengaktifkan Cloud Logging dan mengumpulkan log keputusan penskalaan otomatis Pod horizontal.

Mengaktifkan peristiwa keputusan penskalaan otomatis Pod horizontal

Untuk membuat cluster baru dengan log keputusan KCP_HPA yang diaktifkan, jalankan perintah berikut:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM,KCP_HPA

Untuk mengaktifkan log keputusan KCP_HPA di cluster yang ada, jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM,KCP_HPA

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster yang ingin Anda buat atau perbarui.
  • PROJECT_ID: ID project Cloud de Confiance Anda.
  • LOCATION: Region atau zona komputasi untuk cluster Anda.

Perintah ini memungkinkan ekspor log yang dihasilkan oleh KCP_HPA dan menyimpannya di tujuan logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" dalam Cloud Logging.

Ambil konfigurasi logging cluster yang diperbarui dan tinjau daftar log untuk memastikan log KCP_HPA diaktifkan:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=loggingConfig \
    --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'

Outputnya mirip dengan hal berikut ini:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA

Melihat log penskalaan otomatis Pod horizontal di konsol Cloud de Confiance

Anda dapat memantau perilaku penskalaan otomatis Pod horizontal di konsolCloud de Confiance . Tampilan ini memberikan cara mudah untuk melihat log rekomendasi atomik dan akhir yang sama yang tersedia di Cloud Logging, tanpa keluar dari konteks beban kerja Anda.

Untuk melihat log penskala otomatis Pod horizontal di konsol Cloud de Confiance , selesaikan langkah-langkah berikut:

  1. Di konsol Cloud de Confiance , buka halaman Workloads:

    Buka Workloads

  2. Pilih workload yang dikelola oleh penskalaan otomatis Pod horizontal.

  3. Klik tab Penskalaan.

Di tab ini, Anda dapat menemukan informasi terkait penskalaan, termasuk penggunaan resource, data efisiensi, dan log. Data di tab ini dapat membantu Anda mengidentifikasi konfigurasi yang paling efektif untuk menskalakan otomatis workload Anda. Di bagian Log, Anda dapat menemukan informasi yang sama dari Log dan memfilter log ini menurut jenisnya, termasuk "Peristiwa", "Rekomendasi akhir", dan "Rekomendasi atomik". Untuk mengetahui detail selengkapnya tentang berbagai log, lihat Jenis Log.

Menonaktifkan peristiwa keputusan penskalaan otomatis Pod horizontal

Perbarui cluster untuk menghapus komponen KCP_HPA dari flag --logging:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster yang ingin Anda buat atau perbarui.
  • PROJECT_ID: ID project Cloud de Confiance Anda.
  • LOCATION: Region atau zona komputasi untuk cluster Anda.

Perintah ini menonaktifkan ekspor log yang dihasilkan oleh KCP_HPA. Anda tidak dapat mengambilnya menggunakan filter logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" dalam Cloud Logging.

Ambil konfigurasi logging cluster yang telah diupdate dan tinjau daftar log untuk memastikan log KCP_HPA dinonaktifkan:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=loggingConfig \
    --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'

Outputnya mirip dengan hal berikut ini:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER

Jenis Log

Peristiwa keputusan untuk horizontal Pod autoscaler disimpan di Cloud Logging, di lokasi logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" yang ada di bucket _Default dalam project yang sama dengan cluster GKE Anda. Semua peristiwa yang dicatat ke dalam log memiliki format JSON dan dapat ditemukan di kolom jsonPayload pada entri log.

Pastikan Anda memahami kebutuhan penyimpanan potensi volume log, selain implikasi performa atau biaya. Contoh berikut menjelaskan seberapa sering autoscaler Pod horizontal menghasilkan setiap jenis peristiwa keputusan:

  • Rekomendasi atomik: Horizontal Pod Autoscaler menghasilkan satu peristiwa rekomendasi atomik setiap 15 detik untuk setiap metrik yang dipantau oleh setiap objek HPA di cluster Anda. Misalnya, jika Anda memiliki dua objek HPA di cluster dan setiap objek HPA memantau tiga metrik, maka enam rekomendasi atomik akan dicatat setiap 15 detik.

  • Rekomendasi akhir: Horizontal Pod Autoscaler menghasilkan satu peristiwa rekomendasi akhir setiap 15 detik untuk setiap objek HPA di cluster Anda. Misalnya, jika Anda memiliki dua objek HPA di cluster, maka dua rekomendasi akhir akan dicatat setiap 15 detik.

Secara total, dengan dua objek HPA yang masing-masing memantau tiga metrik, log KCP_HPA Anda akan menerima total delapan entri peristiwa keputusan setiap 15 detik.

Rekomendasi atomik

Log rekomendasi atomik menjelaskan rekomendasi berdasarkan metrik individual yang ditentukan di penskalaan otomatis Pod horizontal Anda.

Log atomik mencakup kolom berikut:

Kolom Deskripsi
start_time Menunjukkan kapan HPA mulai menghitung rekomendasi.
hpa Nama objek HPA yang terkait dengan rekomendasi.
pod_count Menunjukkan jumlah total Pod yang terkait dengan HPA saat membuat rekomendasi. Jumlah ini juga mencakup Pod yang siap, belum siap, dan diabaikan.
metric Memberikan informasi tentang spesifikasi dan status metrik yang digunakan untuk rekomendasi. Kolom metric berisi sub-kolom berikut:
  • index: indeks metrik dalam array Spec metrics.
  • type: jenis metrik dengan nilai dari MetricSourceType (misalnya, Resource, External).
  • spec: nama metrik dan target yang ditetapkan pada metrik tersebut.
  • status: Kondisi status terkait skalabilitas dan batasan penskalaan.
  • newest_sample_time: stempel waktu sampel metrik terbaru.
  • newest_sample_age_seconds: usia sampel terbaru, diukur dalam detik, sejak komputasi rekomendasi dimulai. Nilai negatif menandakan bahwa sampel metrik mendahului awal komputasi.
summary Kolom ringkasan berisi informasi mengenai hasil rekomendasi, termasuk jumlah replika yang disarankan. Jika rekomendasi tidak dapat diusulkan, pesan error akan ditampilkan. Kolom summary berisi sub-kolom berikut:
  • dampening: HPA menerapkan peredaman pada rekomendasi dan arahnya untuk mencoba mengurangi besarnya skala yang mungkin terjadi. Peredaman dapat terjadi dengan cara berikut:
    • up: arah peredaman berarti HPA mengasumsikan Pod dengan metrik yang tidak ada memiliki penggunaan metrik sebesar 100%.
    • down: arah peredaman berarti HPA mengasumsikan Pod dengan metrik yang tidak ada atau Pod yang belum siap yang menggunakan 0% metrik.
    • none: tidak ada peredaman yang diterapkan.
  • override: pesan yang memberikan alasan saat rekomendasi yang diusulkan oleh HPA tidak diterapkan (misalnya, karena toleransi); atau none jika tidak ada penggantian.
  • result: hasil rekomendasi. Fitur ini mengusulkan jumlah replika yang direkomendasikan atau menampilkan pesan error jika rekomendasi tidak dapat dihitung.

Contoh log rekomendasi atomik:

{
  "insertId": "xiu4bty9k5b279wu",
  "jsonPayload": {
    "instance": {
      "vm_name": "my-unique-vm-identifier",
      "zone": "us-central1-a"
    },
    "atomicRecommendation": {
      "startTime": "2025-02-06T20:07:00.573419526Z",
      "hpa": "gke-managed-cim/kube-state-metrics",
      "metric": {
        "newestSampleAgeSeconds": -39.573419526,
        "status": {
          "averageValue": "25849856"
        },
        "newestSampleTime": "2025-02-06T20:06:21Z",
        "type": "Resource",
        "spec": {
          "target": {
            "averageValue": "400Mi"
          },
          "name": "memory"
        }
      },
      "podCount": {
        "ready": 1,
        "total": 1
      },
      "summary": {
        "override": "none",
        "replicas": 1,
        "dampening": "none"
      }
    }
  },
  "resource": {
    "type": "k8s_control_plane_component",
    "labels": {
      "project_id": "my-project-id",
      "cluster_name": "my-cluster",
      "location": "us-central1-a",
      "component_location": "us-central1-a",
      "component_name": "hpa-controller"
    }
  },
  "timestamp": "2025-02-06T20:07:00.593777835Z",
  "severity": "INFO",
  "labels": {
    "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
  },
  "logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
  "sourceLocation": {
    "file": "event_logger.go",
    "line": "61"
  },
  "receiveTimestamp": "2025-02-06T20:07:05.284753647Z"
}

Rekomendasi akhir

Log rekomendasi akhir menjelaskan rekomendasi gabungan yang diusulkan oleh penskalaan otomatis Pod horizontal. Penskalaan otomatis Pod horizontal menggabungkan semua rekomendasi atomik dari berbagai metrik untuk membuat rekomendasi akhir dan mengaktifkan rekomendasi akhir. Aktuasi berarti HPA menginstruksikan Deployment untuk menyesuaikan jumlah replika agar sesuai dengan nilai yang direkomendasikan. Jika rekomendasi akhir menyarankan jumlah Pod yang berbeda dengan jumlah Pod yang berjalan, penskalaan otomatis Pod horizontal akan memicu peristiwa penskalaan atau penurunan skala untuk menyesuaikan Deployment sebagaimana mestinya.

Log rekomendasi akhir mencakup kolom berikut:

Kolom Deskripsi
start_time Menunjukkan kapan HPA mulai menghitung rekomendasi.
hpa Nama objek HPA yang terkait dengan rekomendasi.
target_ref Menunjukkan objek ScaleTargetRef HPA yang terkait dengan rekomendasi.
configured_size Jumlah replika terakhir yang tercatat sebelum HPA menghitung dan menerapkan rekomendasi ini.
top_level_override Memberikan alasan jika rekomendasi yang diusulkan oleh HPA tidak diterapkan (misalnya, karena toleransi); atau none jika tidak ada penggantian.
top_level_limit Memberikan alasan jika rekomendasi yang diusulkan oleh HPA perlu disesuaikan (misalnya, karena jumlah replika yang ditentukan oleh kolom MinReplicas atau MaxReplicas dalam spesifikasi HPA).
leading_metric_index Indeks metrik utama dalam array Spec metrics adalah metrik yang rekomendasi atomiknya digunakan sebagai rekomendasi akhir.
normalization Memberikan ringkasan stabilisasi dan batasan sebagai berikut, jika ada:

stabilization: menjelaskan status stabilisasi jika diterapkan. Stabilisasi digunakan untuk membatasi perubahan jumlah replika yang tidak stabil saat metrik yang digunakan untuk penskalaan terus berfluktuasi. Kolom stabilization terdiri dari sub-kolom berikut:

  • replicas: jumlah replika setelah stabilisasi.
  • reason: jenis stabilisasi yang diterapkan — scaleUp atau scaleDown.
  • stabilization_window: jangka waktu stabilisasi terkait, dalam detik.
  • replicas_before_stabilization: jumlah replika yang direkomendasikan sebelum stabilisasi.

limitation: menjelaskan cara penanganan batasan penskalaan jika diterapkan. Perilaku ini mengubah rekomendasi yang diusulkan oleh HPA berdasarkan batasan yang ada. Kolom limitation terdiri dari sub-kolom berikut:

  • replicas: jumlah replika setelah batasan.
  • reason: alasan tidak melakukan penskalaan di luar jumlah replika minimum atau maksimum.
  • scaling_policy: kebijakan penskalaan yang diterapkan.
  • selectPolicy: menentukan cara kebijakan dipilih saat melakukan penskalaan ke arah tertentu. MaxChange sesuai dengan MaxChangePolicySelect; MinChange sesuai dengan MinChangePolicySelect. Jika penskalaan dinonaktifkan, kolom selectPolicy tidak akan ada.
  • replicas_before_limitation: jumlah replika yang direkomendasikan sebelum batasan.
replicas Jumlah replika yang direkomendasikan.
actuation_error Pesan error yang terkait dengan kegagalan, jika aktuasi gagal.
actuation_time Stempel waktu pengaktifan saat berhasil.
actuation_latency_seconds Waktu yang berlalu, dalam detik, dari awal komputasi rekomendasi hingga aktivasi berhasil.

Contoh log rekomendasi akhir:

{
  "insertId": "qzyv7alfv1sm19ns",
  "jsonPayload": {
    "finalRecommendation": {
      "actuationTime": "2025-02-06T20:06:57.487786873Z",
      "targetRef": {
        "name": "kube-state-metrics",
        "kind": "StatefulSet",
        "apiVersion": "apps/v1"
      },
      "topLevelLimit": "none",
      "hpa": "gke-managed-cim/kube-state-metrics",
      "topLevelOverride": "noRecommendation",
      "replicas": 1,
      "configuredSize": 1,
      "actuationLatencySeconds": 0.003722451,
      "startTime": "2025-02-06T20:06:57.484064422Z"
    },
    "instance": {
      "vm_name": "my-unique-vm-identifier",
      "zone": "us-central1-a"
    }
  },
  "resource": {
    "type": "k8s_control_plane_component",
    "labels": {
      "cluster_name": "my-cluster",
      "component_location": "us-central1-a",
      "component_name": "hpa-controller",
      "location": "us-central1-a",
      "project_id": "my-project-id"
    }
  },
  "timestamp": "2025-02-06T20:06:57.488193527Z",
  "severity": "INFO",
  "labels": {
    "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
  },
  "logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
  "sourceLocation": {
    "file": "event_logger.go",
    "line": "61"
  },
  "receiveTimestamp": "2025-02-06T20:06:57.844898727Z"
}

Pemecahan masalah

Bagian ini menjelaskan masalah dan langkah-langkah penyelesaian terkait peristiwa Pod Autoscaler horizontal.

Tidak ada peristiwa

Jika Anda tidak melihat peristiwa keputusan penskalaan otomatis Pod horizontal, pastikan Anda telah melakukan semua hal berikut:

  • Anda telah mengaktifkan Cloud Logging untuk cluster.
  • Anda telah mengaktifkan log KCP_HPA untuk cluster.
  • Anda telah men-deploy setidaknya satu objek hpa yang dikonfigurasi dengan benar ke cluster Anda.

Untuk melihat konfigurasi objek hpa, jalankan perintah berikut:

  kubectl describe hpa $HPA_NAME

Jika Anda masih tidak melihat log KCP_HPA, hubungi Cloud de Confiance Dukungan.

Langkah berikutnya