All Products
Search
Document Center

Container Service for Kubernetes:Skalakan aplikasi berdasarkan QPS ALB Ingress dengan HPA

Last Updated:Jun 24, 2026

Jika aplikasi Anda perlu menyesuaikan total sumber daya komputasi secara dinamis berdasarkan volume permintaan, gunakan metrik QPS ALB Ingress dari Log Service untuk melakukan autoscale pod aplikasi dengan Horizontal Pod Autoscaler (HPA).

Prasyarat

Pastikan Anda telah:

Cara kerja

  1. Buat Deployment dan Service untuk aplikasi Anda.

  2. Buat ALB Ingress untuk mengarahkan traffic eksternal ke Service tersebut.

  3. Buat Horizontal Pod Autoscaler (HPA) yang memantau metrik sls_alb_ingress_qps dari Log Service.

  4. Saat QPS melebihi ambang batas per pod, HPA melakukan scale-out terhadap Deployment. Saat QPS turun, HPA melakukan scale-in kembali.

Langkah 1: Buat aplikasi dan service

  1. Buat file bernama tea.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: tea
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: tea
      type: NodePort
  2. Terapkan manifes:

    kubectl apply -f tea.yaml

Langkah 2: Buat ALB Ingress

Buat objek AlbConfig

  1. Temukan proyek Log Service yang terkait dengan kluster Anda. Di Konsol ACK, buka halaman detail kluster, pilih tab Informasi Kluster, temukan Log Service Project, lalu catat nama proyeknya. Buat file bernama alb-test.yaml:

    Field Description
    zoneMappings Minimal dua ID vSwitch dari zona berbeda dalam VPC yang sama.
    logProject Nama proyek Log Service.
    logStore Nama Logstore. Harus diawali dengan alb_. Dibuat otomatis jika belum ada.
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test
        addressType: Internet        # ALB menghadap Internet
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****   # Ganti dengan ID vSwitch pertama Anda
        - vSwitchId: vsw-uf6nun9tql5t8nh15****   # Ganti dengan ID vSwitch kedua Anda (zona berbeda)
        accessLogConfig:
          logProject: "****"         # Ganti dengan nama proyek Log Service Anda
          logStore: "alb_****"       # Ganti dengan nama Logstore Anda; harus diawali dengan alb_
  2. Terapkan manifes:

    kubectl apply -f alb-test.yaml

Buat IngressClass

  1. Buat file bernama alb.yaml:

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo              # Harus sesuai dengan metadata.name AlbConfig di atas
  2. Terapkan manifes:

    kubectl apply -f alb.yaml

Buat Ingress

  1. Buat file bernama tea-ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.ingress.top
         http:
          paths:
          - path: /tea
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
  2. Terapkan manifes:

    kubectl apply -f tea-ingress.yaml
  3. Ambil alamat ALB yang ditetapkan untuk Ingress:

    kubectl get ingress

    Output yang diharapkan:

    NAME          CLASS   HOSTS              ADDRESS                                            PORTS   AGE
    tea-ingress   alb     demo.ingress.top   alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com   80      7m5s

    Catat nilai ADDRESS untuk uji beban pada Langkah 4.

Langkah 3: Buat HPA

  1. Buat file bernama hpa.yaml:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ingress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic   # Deployment yang akan diskalakan
      minReplicas: 2                   # Jumlah minimum pod
      maxReplicas: 10                  # Jumlah maksimum pod
      metrics:
        - type: External
          external:
            metric:
              name: sls_alb_ingress_qps   # Metrik QPS ALB dari Log Service
              selector:
                matchLabels:
                  sls.project: "****"              # Ganti dengan nama proyek Log Service Anda
                  sls.logstore: "alb_****"         # Ganti dengan nama Logstore Anda
                  sls.ingress.route: "default-tea-svc-80"
                  # Format: <namespace>-<service-name>-<port>
                  # Contoh: default-nginx-80
            target:
              type: AverageValue        # Skalakan berdasarkan rata-rata QPS per pod
              averageValue: 2           # Lakukan scale-out saat rata-rata QPS per pod melebihi 2

    HPA ini menskalakan nginx-deployment-basic antara 2 hingga 10 pod. HPA melakukan scale-out saat rata-rata QPS per pod melebihi 2, dan scale-in saat QPS turun.

  2. Terapkan manifes:

    kubectl apply -f hpa.yaml
  3. Verifikasi bahwa HPA telah dibuat:

    kubectl get hpa

    Output yang diharapkan:

    NAME          REFERENCE                           TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)   2         10        2          4h34m

    QPS bernilai 0 karena belum ada traffic yang mencapai aplikasi. Jumlah pod berada pada nilai minimum (2).

  4. (Opsional) Periksa detail HPA:

    kubectl describe hpa ingress-hpa

    Output yang diharapkan:

    Name:                                            ingress-hpa
    Namespace:                                       default
    Labels:                                          <none>
    Annotations:                                     <none>
    CreationTimestamp:                               Tue, 31 Jan 2023 11:35:01 +0800
    Reference:                                       Deployment/nginx-deployment-basic
    Metrics:                                         ( current / target )
    "sls_alb_ingress_qps" (target average value):    0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

Langkah 4: Verifikasi autoscaling

Verifikasi scale-out

  1. Jalankan uji beban terhadap alamat ALB dari Langkah 2. Ganti placeholder dengan alamat aktual Anda.

    ab -c 5 -n 5000 -H Host:demo.ingress.top http://alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com/tea
  2. Saat uji berlangsung, pantau status HPA secara real-time:

    kubectl get hpa ingress-hpa --watch

    Saat QPS melebihi ambang batas, jumlah replika meningkat. Tekan Ctrl+C untuk menghentikan.

  3. Setelah uji beban selesai, konfirmasi scale-out:

    kubectl get hpa

    Output yang diharapkan:

    NAME          REFERENCE                           TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   12500m/2 (avg)   2         10        10         15m

    REPLICAS bernilai 10, yang mengonfirmasi bahwa Deployment telah diskalakan ke maksimum.

Verifikasi scale-in

Setelah uji beban selesai, QPS turun menjadi 0 dan HPA menskalakan kembali Deployment ke jumlah minimum. Proses scale-in memiliki jendela stabilisasi sekitar 5 menit, jadi tunggu sebelum memeriksa.

kubectl get hpa

Output yang diharapkan:

NAME          REFERENCE                           TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)    2         10        2          60m

REPLICAS kembali ke 2, yang mengonfirmasi bahwa Deployment telah diskalakan masuk.

Langkah selanjutnya