Mengaktifkan metrik kustom yang ditentukan pengguna untuk penskalaan otomatis Pod Horizontal

Topik ini menjelaskan cara mengonfigurasi metrik yang ditentukan pengguna untuk penskalaan otomatis Pod Horizontal (HPA) di GKE pada VMware.

Mengaktifkan Logging dan Pemantauan untuk aplikasi pengguna

Konfigurasi untuk Logging dan Monitoring disimpan dalam objek Stackdriver bernama stackdriver.

  1. Buka objek stackdriver untuk diedit:

    kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
    

    Ganti USER_CLUSTER_KUBECONFIG dengan jalur file cluster kubeconfig pengguna Anda.

  2. Di bagian spec, tetapkan enableStackdriverForApplications dan enableCustomMetricsAdapter ke true:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
    name: stackdriver
    namespace: kube-system
    spec:
    projectID: project-id
    clusterName: cluster-name
    clusterLocation: cluster-location
    proxyConfigSecretName: secret-name
    enableStackdriverForApplications: true
    enableCustomMetricsAdapter: true
    scalableMonitoring: true
    enableVPC: stackdriver-enable-VPC
    optimizedMetrics: true
    
  3. Simpan dan tutup file yang diedit.

Setelah langkah-langkah ini selesai, semua log aplikasi pengguna dikirim ke Cloud Logging.

Langkah berikutnya adalah menganotasi aplikasi pengguna untuk pengumpulan metrik.

Menganotasi aplikasi pengguna untuk pengumpulan metrik

Untuk menganotasi aplikasi pengguna yang akan disalin dan log dikirim ke Cloud Monitoring, Anda harus menambahkan annotations yang sesuai ke metadata untuk service, Pod, dan endpoint.

  metadata:
    name: "example-monitoring"
    namespace: "default"
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/path: "" - Overriding metrics path (default "/metrics")
  

Men-deploy contoh aplikasi pengguna

Di bagian ini, Anda akan men-deploy aplikasi contoh dengan log dan metrik yang kompatibel dengan prometheus.

  1. Simpan manifes Layanan dan Deployment berikut ke file bernama my-app.yaml. Perhatikan bahwa Layanan memiliki anotasi prometheus.io/scrape: "true":
  kind: Service
  apiVersion: v1
  metadata:
    name: "example-monitoring"
    namespace: "default"
    annotations:
      prometheus.io/scrape: "true"
  spec:
    selector:
      app: "example-monitoring"
    ports:
      - name: http
        port: 9090
  ---
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: "example-monitoring"
    namespace: "default"
    labels:
      app: "example-monitoring"
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: "example-monitoring"
    template:
      metadata:
        labels:
          app: "example-monitoring"
      spec:
        containers:
        - image: gcr.io/google-samples/prometheus-example-exporter:latest
          name: prometheus-example-exporter
          imagePullPolicy: Always
          command:
          - /bin/sh
          - -c
          - ./prometheus-example-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
          resources:
            requests:
              cpu: 100m
  1. Membuat Deployment dan Service:

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Menggunakan metrik kustom di HPA

Deploy objek HPA untuk menggunakan metrik yang ditampilkan di langkah sebelumnya. Lihat Penskalaan otomatis pada beberapa metrik dan metrik kustom untuk informasi lanjutan tentang berbagai jenis metrik kustom.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: example-monitoring-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-monitoring
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Pods
    pods:
      metric:
        name: example_monitoring_up
      target:
        type: AverageValue
        averageValue: 20

Metrik jenis Pod memiliki pemilih metrik default untuk label Pod target, yang merupakan cara kerja kube-controller-maneger. Dalam contoh ini, Anda cna akan membuat kueri metrik example_monitoring_up dengan pemilih {matchLabels: {app: example-monitoring}} karena tersedia di Pod target. Pemilih lain yang ditentukan akan ditambahkan ke daftar. Untuk menghindari pemilih default, Anda dapat menghapus label apa pun di Pod target atau menggunakan metrik jenis Objek.

Memastikan metrik aplikasi buatan pengguna digunakan oleh HPA

Pastikan metrik aplikasi buatan pengguna digunakan oleh HPA:

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa

Output akan terlihat seperti ini:

Name:                             example-monitoring-hpa
Namespace:                        default
Labels:                           
Annotations:                      CreationTimestamp:  Mon, 19 Jul 2021 16:00:40 -0800
Reference:                        Deployment/example-monitoring
Metrics:                          ( current / target )
  "example_monitoring_up" on pods:  1 / 20
Min replicas:                     1
Max replicas:                     5
Deployment pods:                  1 current / 1 desired
Conditions:
  Type            Status  Reason              Message


AbleToScale True ReadyForNewScale recommended size matches current size ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric example_monitoring_up ScalingLimited False DesiredWithinRange the desired count is within the acceptable range

Biaya

Penggunaan metrik kustom untuk HPA tidak dikenai biaya tambahan. Pengguna hanya dikenai biaya untuk metrik dan log aplikasi. Lihat Harga Google Cloud Observability untuk mengetahui detailnya. Pod untuk mengaktifkan metrik kustom menggunakan CPU ekstra 15 m dan memori 20 MB.