Mengekspos metrik kustom untuk penskalaan otomatis

Dokumen ini menjelaskan cara mengirim satu atau beberapa metrik dari Pod atau workload ke autoscaler Anda.

Metrik ini berasal dari layanan atau aplikasi yang Anda jalankan. Untuk satu contoh metrik yang diekspos, lihat metrik yang diekspos oleh vLLM Engine.

Kemudian, penskala otomatis workload dapat menggunakan data ini untuk menskalakan workload secara lebih efisien. Misalnya, Anda dapat menggunakan fitur ini untuk memantau kedalaman antrean atau permintaan aktif, lalu mengizinkan penskala otomatis untuk menambah atau mengurangi jumlah Pod. Dari contoh vLLM, metrik yang dapat berguna untuk melacak pemanfaatan adalah vllm:gpu_cache_usage_perc.

Persyaratan

Persyaratan untuk Pod adalah sebagai berikut:

Persyaratan untuk metrik adalah sebagai berikut.

  • Metrik harus dapat diakses di endpoint HTTP. Jalur endpoint secara default adalah /metrics.
  • Metrik harus diformat sesuai dengan standar Prometheus.
  • Hanya metrik pengukur yang didukung.
  • Nama label dalam pemilih label Pod tidak boleh berisi karakter khusus. Hanya huruf a-z (huruf kecil atau huruf besar), angka, tanda hubung, dan garis bawah yang didukung.
  • Saat menggunakan pemfilteran berdasarkan label metrik, kunci label harus cocok dengan ekspresi reguler ^[a-zA-Z_][a-zA-Z0-9_]* (diawali dengan huruf atau garis bawah, dan hanya berisi huruf, angka, atau garis bawah).
  • Maksimal 20 metrik unik dapat diekspos per cluster.

Mengekspos metrik untuk penskalaan otomatis

  1. Pilih metrik yang akan diekspos. Anda dapat memilih metrik apa pun yang diekspos oleh workload Anda, dan yang juga memenuhi persyaratan yang tercantum di bagian sebelumnya.

    Jika beban kerja Anda mengekspos beberapa metrik dengan nama yang sama, tetapi label yang berbeda, tambahkan filter label untuk membantu memastikan hanya satu yang dipilih.

  2. Tambahkan resource kustom berikut, dengan mengganti detail yang khusus untuk metrik dan Pod Anda:

    apiVersion: autoscaling.gke.io/v1beta1
    kind: AutoscalingMetric
    metadata:
      name: NAME
      namespace: NAMESPACE
    spec:
      metrics:
      - pod:
          selector:
            matchLabels:
              APP_LABEL_NAME: APP_LABEL_VALUE
          containers:
          - endpoint:
              port: METRIC_PORT
              path: METRIC_PATH
            metrics:
            - gauge:
                name: METRIC
                prometheusMetricName: METRIC_PROMETHEUS_NAME
    

    Ganti yang berikut agar sesuai dengan workload Anda:

    • NAME: nama objek AutoscalingMetric.
    • NAMESPACE: namespace tempat Pod berada.
    • APP_LABEL_NAME dan APP_LABEL_VALUE: nama dan nilai label yang cocok dengan Pod yang memancarkan metrik.
    • METRIC_PORT: nomor port.
    • METRIC_PATH: jalur ke metrik. Verifikasi jalur yang digunakan oleh layanan atau aplikasi Anda; jalur ini sering kali /metrics.
    • METRIC: nama metrik yang Anda ekspos. Nama harus cocok dengan regular expression ^[a-z]([-a-z0-9]*[a-z0-9])?, dan memiliki panjang tidak lebih dari 63 karakter. Artinya, karakter pertama harus berupa huruf kecil, dan semua karakter berikutnya harus berupa tanda hubung, huruf kecil, atau angka, kecuali karakter terakhir yang tidak boleh berupa tanda hubung.
    • Opsional: METRIC_PROMETHEUS_NAME: nama metrik Prometheus seperti yang diekspos oleh Pod. Anda dapat menggunakan kolom ini untuk mengganti nama metrik, misalnya karena nama metrik yang diekspos oleh Pod tidak mematuhi batasan nama yang ditetapkan oleh autoscaler.

      Untuk mengetahui detail tentang batasan nama, lihat batasan untuk penskalaan otomatis Pod horizontal.

  3. Terapkan manifes menggunakan perintah berikut:

    kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yaml
    

    Ganti FILE_NAME_AUTOSCALING_METRIC dengan nama file YAML.

    Setelah menambahkan resource kustom, metrik akan dikirim ke API penskalaan otomatis. Metrik dibaca setiap beberapa detik dan dikirim ke penskalaan otomatis workload.

  4. Setelah mengekspos metrik ke autoscaler, Anda dapat mengonfigurasi autoscaler beban kerja untuk menggunakan metrik ini. Untuk melakukannya, tambahkan resource kustom berikut:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: NAME_HPA
      namespace: NAMESPACE
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: DEPLOYMENT
      minReplicas: MIN_REPLICAS
      maxReplicas: MAX_REPLICAS
      metrics:
        - type: Pods
          pods:
            metric:
              name: autoscaling.gke.io|NAME|METRIC
            target:
              type: AverageValue
              averageValue: AVERAGE_VALUE
    

    Ganti yang berikut agar sesuai dengan workload Anda:

    • NAME_HPA: nama objek HorizontalPodAutoscaler.
    • NAMESPACE: namespace tempat Pod berada.
    • DEPLOYMENT: nama deployment yang Anda targetkan.
    • MIN_REPLICAS: jumlah minimum replika yang dapat diskalakan oleh Deployment.
    • MAX_REPLICAS: jumlah maksimum replika yang dapat diskalakan oleh Deployment.
    • NAME: nama objek AutoscalingMetric.
    • METRIC: nama metrik yang Anda ekspos.
    • AVERAGE_VALUE: nilai rata-rata target untuk metrik. Autoscaler menyesuaikan jumlah replika untuk mempertahankan nilai metrik rata-rata di semua Pod.
  5. Terapkan manifes menggunakan perintah berikut:

    kubectl apply -f FILE_NAME_HPA.yaml
    

    Ganti FILE_NAME_HPA dengan nama file YAML.

Memfilter metrik menggunakan label metrik

Memfilter metrik menggunakan label metrik tersedia di GKE 1.36.0-gke.1759000 atau yang lebih baru.

Metrik sering kali menyertakan label. Label adalah pasangan nilai kunci yang memungkinkan Anda menambahkan dimensi ke nilai. Misalnya, metrik yang menghitung jumlah permintaan ke endpoint HTTP yang dikelompokkan menurut metode dan lingkungan dapat menggunakan label untuk menentukan konteks ini. Contoh ini dapat terlihat seperti berikut:

http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222

Anda dapat menggunakan filter label untuk membantu memastikan bahwa spesifikasi metrik Anda sama persis dengan satu metrik. Misalnya, untuk memilih hanya metrik pertama dalam contoh sebelumnya, gunakan spesifikasi berikut untuk metrik AutoscalingMetric gauge:

apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
  name: filter-sample
spec:
  # Several lines are omitted here.
      metrics:
      - gauge:
          name: http_requests_total
          filter:
            matchLabels:
              method: GET
              env: prod

Kunci pasangan nilai kunci matchLabels harus cocok dengan ekspresi reguler ^[a-zA-Z_][a-zA-Z0-9_]*: yaitu, diawali dengan huruf atau garis bawah, dan hanya berisi huruf, angka, atau garis bawah.

Memecahkan masalah metrik yang diekspos untuk penskalaan otomatis

Anda dapat meninjau status resource kustom AutoscalingMetric untuk mencari error konfigurasi. Untuk melakukannya:

  1. Periksa resource kustom AutoscalingMetric dengan menjalankan perintah berikut:

    kubectl describe autoscalingmetric NAME -n NAMESPACE
    
  2. Lihat kolom Status untuk mengetahui informasi tentang metrik yang dikonfigurasi, seperti peringatan tentang error konfigurasi, dan nama persis metrik sebagaimana yang akan muncul dalam objek HorizontalPodAutoscaler.

Langkah berikutnya