全部产品
Search
文档中心

:Gunakan HPA untuk mencapai penskalaan aplikasi otomatis berdasarkan QPS

更新时间:Jul 02, 2025

Untuk menyesuaikan jumlah total sumber daya komputasi secara dinamis berdasarkan jumlah permintaan per satuan waktu, Anda dapat menggunakan data queries per second (QPS) yang dikumpulkan oleh instance Application Load Balancer (ALB) untuk mengatur penskalaan otomatis pod aplikasi.

Sebelum Anda mulai

Topik ini mengasumsikan pemahaman dasar tentang fitur ALB ingress.

Cara kerjanya

QPS adalah jumlah permintaan yang diterima per detik. Instance ALB mencatat data akses klien melalui Simple Log Service (SLS). Horizontal Pod Autoscaler (HPA) memantau data QPS berdasarkan data yang direkam dan menskalakan beban kerja yang sesuai (seperti Deployment dan StatefulSet).

Prasyarat

Langkah 1: Buat AlbConfig dan asosiasikan Proyek SLS

  1. Periksa Proyek SLS yang diasosiasikan dengan kluster.

    1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

    2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, klik Cluster Information.

    3. Di tab Basic Information, temukan sumber daya Log Service Project dan catat nama Proyek SLS di sebelah kanan.

  2. Buat AlbConfig.

    1. Buat dan salin konten berikut ke alb-qps.yaml, lalu isi informasi Proyek SLS di bidang accessLogConfig.

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-qps
      spec:
        config:
          name: alb-qps
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # ID dari virtual switch
          - vSwitchId: vsw-uf6nun9tql5t8nh15****
          accessLogConfig:
            logProject: <LOG_PROJECT> # Nama proyek log yang diasosiasikan dengan kluster
            logStore: <LOG_STORE> # Nama penyimpanan log kustom, harus dimulai dengan "alb_"
        listeners:
          - port: 80
            protocol: HTTP

      Tabel berikut menjelaskan bidang dalam blok kode di atas:

      Bidang

      Tipe

      Deskripsi

      logProject

      string

      Nama proyek Simple Log Service.

      Nilai default: "".

      logStore

      string

      Nama Simple Log Service Logstore, yang harus dimulai dengan alb_. Penyimpanan log SLS akan dibuat secara otomatis jika tidak ada. Untuk informasi lebih lanjut, lihat Aktifkan Simple Log Service untuk mengumpulkan log akses.

      Nilai default: "alb_****".

    2. Jalankan perintah berikut untuk membuat AlbConfig:

       kubectl apply -f alb-qps.yaml

      Keluaran yang Diharapkan:

      albconfig.alibabacloud.com/alb-qps created

Langkah 2: Buat sumber daya contoh

Selain AlbConfig, ALB Ingress memerlukan empat jenis sumber daya untuk berfungsi dengan baik: Deployment, Service, IngressClass, dan Ingress. Gunakan langkah-langkah berikut untuk membuat sumber daya ini:

  1. Buat file qps-quickstart.yaml dengan konten berikut:

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: qps-ingressclass
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-qps # Sama dengan nama AlbConfig
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: qps-ingress
    spec:
      ingressClassName: qps-ingressclass # Sama dengan nama Ingress Class
      rules:
       - host: demo.alb.ingress.top # Ganti dengan nama domain Anda
         http:
          paths:
          - path: /qps
            pathType: Prefix
            backend:
              service:
                name: qps-svc
                port:
                  number: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: qps-svc
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: qps-deploy
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qps-deploy
      labels:
        app: qps-deploy
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: qps-deploy
      template:
        metadata:
          labels:
            app: qps-deploy
        spec:
          containers:
          - name: qps-container
            image: nginx:1.7.9
            ports:
            - containerPort: 80
  2. Jalankan perintah berikut untuk membuat sumber daya contoh:

    kubectl apply -f qps-quickstart.yaml

Langkah 3: Buat HPA

  1. Buat file qps-hpa.yaml, salin konten berikut ke dalamnya, lalu simpan:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: qps-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: qps-deploy # Nama beban kerja yang dikendalikan oleh HPA
      minReplicas: 2     # Jumlah minimum pod
      maxReplicas: 10    # Jumlah maksimum pod
      metrics:
        - type: External # Metrik eksternal (non-metrik Kubernetes asli)
          external:
            metric:
              name: sls_alb_ingress_qps # Nama metrik (ALB Ingress QPS). Jangan ubah.
              selector:
                matchLabels:
                  sls.project: <LOG_PROJECT> # Nama proyek Layanan Log (ganti dengan nama proyek aktual)
                  sls.logstore: <LOG_STORE>  # Nama Logstore (ganti dengan nama Logstore aktual)
                  sls.ingress.route: default-qps-svc-80 # Format jalur layanan: <namespace>-<svc>-<port>
            target:
              type: AverageType  # Tipe metrik target (nilai rata-rata)
              averageValue: 2    # Nilai target yang diharapkan. Dalam contoh ini, rata-rata QPS per pod adalah 2.

    Tabel berikut menjelaskan bidang dalam blok kode di atas:

    Bidang

    Deskripsi

    scaleTargetRef

    Beban kerja yang digunakan oleh aplikasi. Contoh ini menggunakan Deployment bernama qps-deployment yang dibuat di Langkah 1.

    minReplicas

    Jumlah minimum kontainer yang dapat diskalakan oleh Deployment. Nilai ini perlu diatur ke bilangan bulat lebih besar dari atau sama dengan 1.

    maxReplicas

    Jumlah maksimum kontainer yang dapat diskalakan oleh Deployment. Nilai ini perlu lebih besar dari jumlah minimum replika.

    external.metric.name

    Metrik berbasis QPS untuk HPA. Jangan ubah nilainya.

    sls.project

    Proyek SLS untuk metrik. Atur nilai ke proyek SLS yang ditentukan di AlbConfig.

    sls.logstore

    Logstore untuk metrik. Atur nilai ke Logstore yang ditentukan di AlbConfig.

    sls.ingress.route

    Jalur Layanan. Tentukan nilai dalam format <namespace>-<svc>-<port>. Contoh ini menggunakan Layanan qps-svc yang dibuat di Langkah 1.

    external.target

    Nilai target untuk metrik. Dalam contoh ini, rata-rata QPS untuk semua pod adalah 2. HPA akan menyesuaikan jumlah pod agar QPS sedekat mungkin dengan nilai target.

  2. Jalankan perintah berikut untuk membuat HPA:

    kubectl apply -f qps-hpa.yaml
  3. Jalankan perintah berikut untuk memeriksa status penyebaran HPA:

    kubectl get hpa

    Keluaran yang Diharapkan:

    NAME      REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    qps-hpa   Deployment/qps-deploy   0/2 (avg)   2         10        2          5m41s
  4. Jalankan perintah berikut untuk melihat informasi konfigurasi HPA:

    kubectl describe hpa qps-hpa

    Keluaran yang Diharapkan:

    Name:                                            qps-hpa
    Namespace:                                       default
    Labels:                                          <none>
    Annotations:                                     <none>
    CreationTimestamp:                               ******** # Timestamp HPA, bisa diabaikan
    Reference:                                       Deployment/qps-deployment
    Metrics:                                         ( current / target )
      "sls_alb_ingress_qps" (target average value):  0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

(Opsional) Langkah 4: Verifikasi penskalaan otomatis

  1. Verifikasi Peningkatan Skala Aplikasi.

    1. Jalankan perintah berikut untuk melihat informasi Ingress:

      kubectl get ingress

      Keluaran yang Diharapkan:

      NAME            CLASS                HOSTS                  ADDRESS                         PORTS     AGE
      qps-ingress     qps-ingressclass     demo.alb.ingress.top   alb-********.alb.aliyuncs.com   80        10m31s

      Catat nilai HOSTS dan ADDRESS untuk digunakan pada langkah selanjutnya.

    2. Jalankan perintah berikut untuk melakukan uji stres pada aplikasi:

      Ganti demo.alb.ingress.top dan alb-********.alb.aliyuncs.com dengan nilai yang dicatat pada langkah sebelumnya.

      ab -r -c 5 -n 10000 -H Host:demo.alb.ingress.top http://alb-********.alb.aliyuncs.com/qps
    3. Jalankan perintah berikut untuk memeriksa status penskalaan aplikasi:

      kubectl get hpa

      Keluaran yang Diharapkan:

      NAME      REFERENCE               TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
      qps-hpa   Deployment/qps-deploy   14375m/2 (avg)   2         10        10         15m

      Hasil menunjukkan bahwa REPLICAS adalah 10, yang berarti saat data QPS meningkat, aplikasi meningkatkan skalanya ke nilai MAXPODS (10 pod).

  2. Verifikasi Penurunan Skala Aplikasi.

    Setelah uji stres selesai, jalankan perintah berikut untuk memeriksa status penskalaan aplikasi:

    kubectl get hpa

    Keluaran yang Diharapkan:

    NAME      REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    qps-hpa   Deployment/qps-deploy   0/2 (avg)   2         10        2          28m

    Hasil menunjukkan bahwa REPLICAS adalah 2, yang berarti setelah data QPS turun menjadi 0, aplikasi menurunkan skalanya ke nilai MINPODS (2 pod).

Referensi