Mengonfigurasi penskalaan otomatis pod horizontal

Dengan penskalaan otomatis pod horizontal, Anda dapat menyesuaikan jumlah Pod yang berjalan secara otomatis untuk workload stateless yang ada di cluster berdasarkan permintaan real-time. Autoscaler menambahkan Pod saat beban meningkat dan menghapusnya saat permintaan menurun, sehingga membantu Anda mempertahankan ketersediaan aplikasi, menggunakan resource secara efisien, dan mengontrol biaya tanpa intervensi manual. Anda dapat melakukan penskalaan berdasarkan metrik resource standar, seperti pemakaian CPU, atau metrik aplikasi kustom dari Prometheus, seperti rasio permintaan HTTP.

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 untuk memperbarui deployment secara manual saat permintaan berkembang. Selesaikan langkah-langkah berikut untuk menskalakan pod deployment Anda secara otomatis:

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

  2. Tetapkan horizontal pod autoscaler 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 apa saja.

    • DEPLOYMENT_NAME: nama deployment yang akan diskalakan otomatis.

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

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

    • MAX_NUMBER_REPLICAS: batas atas 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 apa saja.

  • DEPLOYMENT_NAME: nama deployment yang akan diskalakan otomatis.

  • 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 penggunaan 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 rasio 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 jaringan dari dalam cluster (pengontrol HPA tidak mengelola instance Prometheus itu sendiri). Untuk mengetahui informasi selengkapnya, lihat Cara men-deploy dan mengonfigurasi Operator Prometheus di Kubernetes.

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

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

Mengaktifkan dan mengonfigurasi Prometheus

Proses ini melibatkan penentuan aturan metrik dan pembaruan konfigurasi cluster:

  1. Buat satu atau beberapa ConfigMap aturan metrik.

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

    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 mereferensikan 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 rules ConfigMap.

    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.