Mengonfigurasi penskalaan otomatis pod horizontal

Dokumen ini menjelaskan cara menyiapkan penskalaan otomatis pod horizontal untuk workload stateless yang ada yang berjalan di cluster Anda. Penskalaan otomatis pod horizontal secara otomatis menyesuaikan jumlah Pod (replika) yang berjalan untuk aplikasi berdasarkan permintaan real-time, menghapus Pod saat beban berkurang dan menambahkan Pod saat beban meningkat. Penskalaan ini sangat penting untuk memastikan ketersediaan aplikasi, penggunaan resource yang efisien, dan penghematan biaya dengan mencocokkan kapasitas secara tepat dengan traffic pengguna tanpa intervensi manual. Seiring berkembangnya persyaratan beban kerja container Anda, penskalaan otomatis pod menghilangkan kebutuhan operator untuk terus memantau performa dan menyesuaikan jumlah pod secara manual.

Halaman ini ditujukan bagi Admin, arsitek, dan Operator yang mengelola siklus proses infrastruktur teknologi dasar. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE Enterprise umum. Google Cloud

Menskalakan deployment

Gunakan fungsi penskalaan Kubernetes untuk menskalakan jumlah pod yang berjalan dalam deployment Anda dengan tepat.

Menskalakan pod deployment secara otomatis

Kubernetes menawarkan penskalaan otomatis untuk menghilangkan kebutuhan memperbarui deployment secara manual saat permintaan berubah. Selesaikan langkah-langkah berikut untuk menskalakan pod deployment Anda secara otomatis:

  1. Untuk memastikan penskalaan otomatis pod horizontal dapat mengukur persentase CPU dengan tepat, tetapkan permintaan resource CPU pada deployment Anda.

  2. Tetapkan penskalaan otomatis pod horizontal di deployment Anda:

    kubectl --kubeconfig CLUSTER_KUBECONFIG \
        -n NAMESPACE \
        autoscale deployment DEPLOYMENT_NAME \
        --cpu-percent=CPU_PERCENT \
        --min=MIN_NUMBER_REPLICAS \
        --max=MAX_NUMBER_REPLICAS
    

    Ganti kode berikut:

    • CLUSTER_KUBECONFIG: file kubeconfig untuk cluster.

    • NAMESPACE: namespace. Untuk cluster bersama, ini harus berupa namespace project. Untuk cluster standar, namespace-nya dapat berupa namespace apa pun.

    • DEPLOYMENT_NAME: nama deployment yang akan disesuaikan skalanya secara otomatis.

    • CPU_PERCENT: target pemakaian CPU rata-rata yang akan diminta, dinyatakan sebagai persentase, di semua pod.

    • MIN_NUMBER_REPLICAS: batas bawah untuk jumlah pod yang dapat disediakan oleh autoscaler.

    • MAX_NUMBER_REPLICAS: batas atas untuk jumlah pod yang dapat disediakan oleh autoscaler.

  3. Periksa status terkini horizontal pod autoscaler:

    kubectl get hpa
    

    Outputnya mirip dengan hal berikut ini:

    NAME              REFERENCE                          TARGET    MINPODS   MAXPODS   REPLICAS   AGE
    DEPLOYMENT_NAME   Deployment/DEPLOYMENT_NAME/scale   0% / 50%  1         10        1          18s
    

Menskalakan pod deployment secara manual

Jika Anda lebih suka menskalakan deployment secara manual, jalankan:

kubectl --kubeconfig CLUSTER_KUBECONFIG \
    -n NAMESPACE \
    scale deployment DEPLOYMENT_NAME \
    --replicas NUMBER_OF_REPLICAS

Ganti kode berikut:

  • CLUSTER_KUBECONFIG: file kubeconfig untuk cluster.

  • NAMESPACE: namespace. Untuk cluster bersama, ini harus berupa namespace project. Untuk cluster standar, namespace-nya dapat berupa namespace apa pun.

  • DEPLOYMENT_NAME: nama deployment yang akan di-autoscaling.

  • DEPLOYMENT_NAME: jumlah objek Pod yang direplikasi dalam deployment.

Menggunakan metrik kustom dari Prometheus untuk penskalaan otomatis

Penskalaan otomatis pod horizontal menggunakan metrik resource standar seperti pemakaian CPU dan memori secara default. Metrik standar berfungsi untuk penskalaan umum, tetapi tidak berguna untuk beban aplikasi khusus.

Saat menggunakan penskalaan otomatis pod horizontal dengan metrik kustom dari Prometheus, Anda dapat menskalakan workload berdasarkan metrik khusus aplikasi, seperti kecepatan permintaan HTTP, kedalaman antrean, dan latensi pemrosesan. Cluster Anda dapat merespons permintaan dunia nyata dengan lebih akurat dengan memanfaatkan data lengkap yang telah dikumpulkan oleh stack pemantauan Prometheus Anda.

Prasyarat untuk menggunakan Prometheus dengan penskalaan otomatis pod horizontal

Sebelum mengaktifkan fitur ini, kondisi berikut harus dipenuhi:

  • Server Prometheus yang ada: Server Prometheus harus sudah di-deploy dan dapat diakses melalui jaringan dari dalam cluster (pengontrol HPA tidak mengelola instance Prometheus itu sendiri). Untuk mengetahui informasi selengkapnya, lihat Cara men-deploy dan mengonfigurasi Prometheus Operator di Kubernetes.

  • Izin administratif: Anda harus memiliki izin yang diperlukan untuk mengubah resource kustom Cluster.

  • Tidak ada konflik API: Pemeriksaan pra-penerbangan memverifikasi bahwa tidak ada komponen lain yang telah mendaftarkan APIService untuk custom.metrics.k8s.io. Jika ada konflik, adaptor tidak dapat diaktifkan.

Mengaktifkan dan mengonfigurasi Prometheus

Proses ini melibatkan penentuan aturan metrik dan memperbarui konfigurasi cluster:

  1. Buat satu atau beberapa ConfigMap aturan metrik.

    Tentukan aturan berbasis PromQL untuk metrik kustom Anda dalam satu atau beberapa ConfigMap dalam namespace cluster target. Pengontrol memantau ConfigMap ini, menggabungkannya, dan menerapkannya secara otomatis ke adapter.

    Untuk mengetahui informasi selengkapnya tentang cara menentukan aturan, lihat Konfigurasi Penemuan dan Presentasi Metrik di kubernetes-sigs/prometheus-adapter.

    Contoh berikut menunjukkan ConfigMap dengan aturan yang ditentukan untuk http_requests_per_second di kolom data:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-app-rules
      namespace: <cluster-namespace>
    data:
      config.yaml: |
        rules:
        - seriesQuery: 'http_requests_total'
          resources:
            overrides:
              namespace_name: {resource: "namespace"}
              pod_name: {resource: "pod"}
          name:
            matches: "^(.*)_total$"
            as: "${1}_per_second"
          metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[5m])) by (<<.GroupBy>>)'
    
  2. Jika server Prometheus Anda memerlukan autentikasi, seperti mutual transport layer security (mTLS), buat Secret Kubernetes dalam format kubeconfig yang berisi kredensial yang diperlukan.

    Contoh berikut menunjukkan Secret yang mendukung autentikasi dasar:

    apiVersion: v1
    kind: Secret
    metadata:
      name: prometheus-auth-secret
      namespace: <cluster-namespace>
      annotations:
        baremetal.cluster.gke.io/mark-source: "true"
    type: Opaque
    stringData:
      config: authentication-credentials
    
  3. Perbarui resource kustom Cluster:

    1. Tambahkan anotasi preview.baremetal.cluster.gke.io/metrics-adapter: "true" ke metadata untuk resource kustom Cluster.

    2. Tambahkan bagian spec.metricsAdapter untuk menentukan URL Prometheus dan merujuk ConfigMap aturan Anda.

      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: <cluster-name>
        namespace: <cluster-namespace>
        annotations:
          preview.baremetal.cluster.gke.io/metrics-adapter: "true"
      spec:
        # ... other existing cluster configurations ...
        metricsAdapter:
          prometheus:
            url: "http://prometheus-k8s.monitoring.svc.cluster.local:9090"
            orgID: "production-environment"
            auth:
              configSecretRef:
                name: prometheus-auth-secret
                key: config # This is the key within the Secret's 'data' field
          rules:
            configMapKeyRefs:
              - name: my-app-rules
                key: config.yaml # This is the key within the ConfigMap's 'data' field
              # - name: base-system-rules
              #   key: config.yaml
      

      Jika instance Prometheus Anda tidak memerlukan autentikasi, Anda dapat menghapus bagian metricsAdapter.prometheus.auth dari spesifikasi Cluster.

  4. Terapkan resource kustom Cluster yang telah diupdate.

    Pengontrol akan otomatis men-deploy Prometheus Adapter ke dalam namespace kube-system.

  5. Gunakan metrik kustom untuk penskalaan otomatis Pod horizontal dengan membuat resource HorizontalPodAutoscaler yang menargetkan metrik kustom yang ditentukan di kolom ConfigMap rules.

    Contoh ConfigMap dari langkah sebelumnya menentukan metrik kustom http_requests_per_second. Untuk menggunakan metrik ini, resource HorizontalPodAutoscaler akan terlihat seperti contoh berikut:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: <workload-name>
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Pods
        pods:
          metric:
            name: http_requests_per_second
          target:
            type: AverageValue
            averageValue: 10
    

Menonaktifkan Prometheus

Untuk menonaktifkan penggunaan Prometheus dengan penskalaan otomatis pod horizontal, hapus bagian spec.metricsAdapter dari resource kustom Cluster.