全部产品
Search
文档中心

Container Service for Kubernetes:Implementasikan skalabilitas elastis untuk aplikasi dengan HPA berdasarkan data QPS

更新时间:Mar 07, 2026

Jika aplikasi Anda perlu menyesuaikan sumber daya komputasinya secara dinamis berdasarkan volume permintaan, gunakan data queries per second (QPS) dari instans Application Load Balancer (ALB) untuk mengonfigurasi skalabilitas elastis bagi Pod aplikasi tersebut.

Sebelum memulai

Sebelum memulai, baca Buat dan gunakan ALB Ingress untuk mengekspos layanan guna memahami dasar-dasar penggunaan ALB Ingress.

Cara kerja

Queries per second (QPS) adalah jumlah permintaan yang diterima per detik. Instans Application Load Balancer (ALB) mencatat data akses klien menggunakan Simple Log Service (SLS). Horizontal Pod Autoscaler (HPA) memantau data QPS untuk layanan tersebut dari catatan ini dan menyesuaikan beban kerja terkait, seperti Deployment dan StatefulSet.

Prasyarat

Langkah 1: Buat AlbConfig dan asosiasikan dengan proyek Simple Log Service

  1. Lihat proyek Simple Log Service yang terkait dengan kluster.

    1. Masuk ke Container Service Management Console . Di panel navigasi sebelah kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik Cluster Information.

    3. Pada tab Basic Information, temukan resource Log Service Project dan catat nama proyek di sebelah kanannya.

  2. Buat AlbConfig.

    1. Buat file bernama alb-qps.yaml, salin konten berikut ke dalam file tersebut, lalu masukkan informasi proyek Simple Log Service pada bidang accessLogConfig.

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-qps
      spec:
        config:
          name: alb-qps
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # The ID of the vSwitch
          - vSwitchId: vsw-uf6nun9tql5t8nh15****
          accessLogConfig:
            logProject: <LOG_PROJECT> # The name of the Simple Log Service project associated with the cluster
            logStore: <LOG_STORE> # A custom Logstore name. The name must start with "alb_".
        listeners:
          - port: 80
            protocol: HTTP

      Tabel berikut menjelaskan bidang-bidang tersebut.

    2. Jalankan perintah berikut untuk membuat AlbConfig.

       kubectl apply -f alb-qps.yaml

      Output yang diharapkan:

      albconfig.alibabacloud.com/alb-qps created

Langkah 2: Buat resource contoh

Selain AlbConfig, ALB Ingress memerlukan Deployment, Service, IngressClass, dan Ingress agar dapat berfungsi. Ikuti langkah-langkah berikut untuk membuat resource tersebut dengan cepat.

  1. Buat file bernama 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 # Must be the same as the name of the AlbConfig
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: qps-ingress
    spec:
      ingressClassName: qps-ingressclass # Must be the same as the name of the IngressClass
      rules:
       - host: demo.alb.ingress.top # Replace with your domain name
         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 resource contoh.

    kubectl apply -f qps-quickstart.yaml

Langkah 3: Buat HPA

  1. Buat dan simpan file bernama qps-hpa.yaml dengan konten berikut.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: qps-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: qps-deploy # The name of the workload controlled by the HPA
      minReplicas: 2 # The minimum number of pods
      maxReplicas: 10 # The maximum number of pods
      metrics:
        - type: External   # Use external metrics (non-native Kubernetes metrics)
          external:
            metric:
              name: sls_alb_ingress_qps # The metric name (QPS of Alibaba Cloud ALB Ingress). Do not modify this value.
              selector:
                matchLabels:
                  sls.project: <LOG_PROJECT> # The name of the Simple Log Service project. Replace with your actual project name.
                  sls.logstore: <LOG_STORE> # The name of the Logstore. Replace with your actual Logstore name.
                  sls.ingress.route: default-qps-svc-80 # The path of the service. The format is <namespace>-<svc>-<port>.
            target:
              type: AverageValue  # The target metric type (average value)
              averageValue: "2"     # The target value for the metric. In this example, the average QPS for all pods is 2.

    Tabel berikut menjelaskan bidang-bidang tersebut.

    Bidang

    Deskripsi

    scaleTargetRef

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

    minReplicas

    Jumlah minimum Pod tempat Deployment dapat diskalakan masuk. Nilai ini harus berupa bilangan bulat yang lebih besar dari atau sama dengan 1.

    maxRaplicas

    Jumlah maksimum Pod tempat Deployment dapat diskalakan keluar. Nilai ini harus lebih besar dari jumlah replika minimum.

    external.metric.name

    Metrik untuk data QPS yang digunakan oleh HPA. Jangan ubah nilai ini.

    sls.project

    Proyek Simple Log Service yang menyediakan data metrik. Harus sama dengan proyek yang ditentukan dalam AlbConfig.

    sls.logstore

    Logstore yang menyediakan data metrik. Harus sama dengan Logstore yang ditentukan dalam AlbConfig.

    sls.ingress.route

    Jalur Service, diformat sebagai <namespace>-<svc>-<port>, yaitu Service qps-svc yang Anda buat di Langkah 1.

    external.target

    Nilai target untuk metrik tersebut. Pada contoh ini, rata-rata QPS untuk semua Pod adalah 2. HPA 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 melihat status deployment HPA.

    kubectl get hpa

    Output 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 detail konfigurasi HPA.

    kubectl describe hpa qps-hpa

    Output yang diharapkan:

    Name:                                            qps-hpa
    Namespace:                                       default
    Labels:                                          <none>
    Annotations:                                     <none>
    CreationTimestamp:                               ******** # The timestamp of the HPA. You can ignore this.
    Reference:                                       Deployment/qps-deploy
    Metrics:                                         ( current / target )
      "sls_alb_ingress_qps" (target average value):  0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

Opsi: Langkah 4: Verifikasi hasil

  1. Verifikasi scale-out aplikasi.

    1. Jalankan perintah berikut untuk melihat informasi Ingress.

      kubectl get ingress

      Output 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 nanti.

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

      Ganti demo.alb.ingress.top dan alb-********.alb.aliyuncs.com dengan nilai yang telah Anda catat 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 melihat status penskalaan aplikasi.

      kubectl get hpa

      Output yang diharapkan:

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

      Nilai REPLICAS pada output adalah 10. Hal ini menunjukkan bahwa seiring peningkatan QPS, aplikasi melakukan scale-out hingga mencapai batas maksimum 10 Pod yang ditentukan oleh MAXPODS.

  2. Verifikasi scale-in aplikasi.

    Setelah uji stres selesai, jalankan perintah berikut untuk melihat status penskalaan aplikasi.

    kubectl get hpa

    Output yang diharapkan:

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

    Nilai REPLICAS pada output adalah 2. Hal ini menunjukkan bahwa setelah QPS turun menjadi 0, aplikasi melakukan scale-in hingga mencapai batas minimum 2 Pod yang ditentukan oleh MINPODS.

Referensi