All Products
Search
Document Center

Container Service for Kubernetes:Penyesuaian Otomatis Pod Horizontal Berdasarkan Metrik Komponen Nginx Ingress

Last Updated:Mar 08, 2026

Saat terjadi lonjakan lalu lintas, penskalaan yang tepat meningkatkan kecepatan respons dan efisiensi penggunaan resource kluster. Topik ini menjelaskan cara menggunakan Kubernetes External Metrics untuk mengintegrasikan metrik bisnis utama—seperti laju permintaan HTTP dan permintaan per detik (QPS) Ingress—serta menerapkan kebijakan penskalaan otomatis.

Topik ini memandu Anda melalui langkah-langkah berikut untuk mengonfigurasi penyesuaian otomatis pod horizontal (HPA) menggunakan metrik QPS Ingress dari Simple Log Service (SLS). Contoh ini menerapkan Deployment bernama nginx, sebuah Service, dan sebuah Ingress.

Langkah 1: Terapkan komponen ack-alibaba-cloud-metrics-adapter

Komponen ack-alibaba-cloud-metrics-adapter memungkinkan Kubernetes mengambil data pemantauan dari layanan Alibaba Cloud—termasuk ECS, SLB, dan RDS—melalui API External Metrics, sehingga meningkatkan kemampuan pemantauan dan autoscaling kluster.

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

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, pilih Applications > Helm.

  3. Pada halaman Helm, klik Create. Lengkapi konfigurasi Basic Information. Pilih ack-alibaba-cloud-metrics-adapter dan klik Next.

  4. Pada halaman Parameter Settings, pilih Chart Version dan klik OK.

Catatan

Komponen ack-alibaba-cloud-metrics-adapter tidak mendukung upgrade smooth. Untuk melakukan upgrade, uninstal versi saat ini terlebih dahulu, lalu instal versi terbaru.

Langkah 2: Buat aplikasi dan layanan

  1. Buat file bernama nginx-test.yaml.

    Expand to view the YAML example

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9 
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      type: ClusterIP
  2. Jalankan perintah berikut untuk membuat Deployment dan Service-nya.

    kubectl apply -f nginx-test.yaml

Langkah 3: Buat entri rute

  1. Di panel navigasi kiri halaman manajemen kluster, pilih Network > Ingress. Pada halaman Ingress, klik Create Ingress di pojok kiri atas.

  2. Isi kolom yang diperlukan pada panel Create dan klik OK. Setelah pembuatan selesai, sistem akan mengarahkan Anda secara otomatis ke halaman Ingress.

  3. Pada kolom Name, klik nama Ingress yang telah Anda buat untuk melihat aturan routing-nya. Untuk informasi selengkapnya, lihat Manage Ingress.

Langkah 4: Konfigurasi HPA

Anda dapat mengonfigurasi dua metrik Project SLS untuk penskalaan dalam HPA: sls_ingress_qps dan sls_ingress_latency_p9999.

  • sls_ingress_qps: Gunakan AverageValue. Nilai QPS dibagi dengan jumlah pod sebelum dibandingkan.

  • sls_ingress_latency_p9999: Gunakan Value. Nilai mentah digunakan tanpa pembagian.

  1. Buat file bernama ingress-hpa.yaml dan tempel konten berikut ke dalamnya.

    Expand to view the YAML example

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ingress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic
      minReplicas: 2
      maxReplicas: 10
      metrics:
        - type: External
          external:
            metric:
              name: sls_ingress_qps
              selector:
                matchLabels:
                  sls.project: "***" # Ganti *** dengan nama project SLS aktual Anda.
                  sls.logstore: "nginx-ingress"
                  sls.ingress.route: "default-nginx-80"
            target:
              type: AverageValue
              averageValue: 10
        - type: External
          external:
            metric:
              name: sls_ingress_latency_p9999
              selector:
                matchLabels:
                  # Project log Ingress default adalah k8s-log-clusterId
                  sls.project: "***" 
                  # Logstore Ingress default adalah nginx-ingress
                  sls.logstore: "nginx-ingress"
                  # Format: namespace-svc-port
                  sls.ingress.route: "default-nginx-80"
                  # Titik akhir VPC SLS. Default adalah true.
                  # sls.internal.endpoint:true
            target:
              type: Value
              # Jika sls_ingress_latency_p9999 > 10 ms, HPA menambah jumlah pod di nginx-deployment-basic.
              value: 10

    Tabel berikut menjelaskan parameter yang digunakan dalam konfigurasi HPA.

    Nama Parameter

    Wajib

    Deskripsi

    sls.ingress.route

    Ya

    Format: <namespace>-<svc>-<port>. <namespace> adalah namespace tempat Ingress berada. <svc> adalah nama Service yang terkait dengan Ingress. <port> adalah nama port dari Service tersebut. Contoh: default-nginx-80.

    sls.logstore

    Ya

    Nama Logstore di Simple Log Service. Secara default, sls.logstore adalah nginx-ingress.

    sls.project

    Ya

    Nama Project di Simple Log Service. Secara default, sls.project adalah k8s-log-<cluster-id>.

    sls.internal.endpoint

    Tidak

    Tentukan apakah akses ke Simple Log Service dilakukan melalui jaringan internal atau jaringan publik. Nilai default adalah true.

    • true: Akses SLS melalui jaringan internal.

    • false: Akses SLS melalui jaringan publik.

  2. Jalankan perintah berikut untuk membuat HPA.

    kubectl apply -f ingress-hpa.yaml

Langkah 5: Verifikasi hasil

  1. Setelah mengonfigurasi HPA, jalankan perintah berikut untuk melakukan uji stres.

    ab -t 300 -c 10 <nama-domain-yang-dikonfigurasi-untuk-ingress> # Gunakan Apache Benchmark untuk mengirim 10 permintaan konkuren ke layanan yang diekspos oleh Ingress selama 300 detik.
  2. Verifikasi status penskalaan.

    Jalankan perintah berikut untuk memeriksa status.

    kubectl get hpa ingress-hpa

    Output yang diharapkan:

    NAME            REFERENCE                              TARGETS           MINPODS    MAXPODS    REPLICAS   AGE
    ingress-hpa     Deployment/nginx-deployment-basic      21/10 (avg)       2          10         10         7m49s

    Jika nilai REPLICAS sama dengan nilai MAXPODS, penskalaan berhasil.

FAQ

Bagaimana cara mendapatkan metrik sls_ingress_qps menggunakan command line?

Anda dapat menjalankan perintah berikut untuk mengkueri data. Metrik permintaan sls_ingress_qps digunakan sebagai contoh.

kubectl get --raw  /apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingress

Pada perintah di atas, {{SLS_Project}} adalah nama project Simple Log Service yang sesuai dengan kluster ACK. Jika Anda tidak menentukan konfigurasi kustom, nama project default adalah k8s-log-{{ClusterId}}. {{ClusterId}} adalah ID kluster.

Jika hasil berikut dikembalikan:

Error from server: {
    "httpCode": 400,
    "errorCode": "ParameterInvalid",
    "errorMessage": "key (slb_pool_name) is not config as key value config,if symbol : is  in your log,please wrap : with quotation mark \"",
    "requestID": "xxxxxxx"
}

Hal ini menunjukkan bahwa tidak ada data yang tersedia untuk metrik ini. Ini mungkin karena ALB Ingress belum dikonfigurasi, tetapi metrik sls_alb_ingress_qps digunakan untuk kueri data.

Jika hasil yang mirip dengan berikut dikembalikan:

{
  "kind": "ExternalMetricValueList",
  "apiVersion": "external.metrics.k8s.io/v1beta1",
  "metadata": {},
  "items": [
    {
      "metricName": "sls_ingress_qps",
      "timestamp": "2025-02-26T16:45:00Z", 
      "value": "50",   # Nilai QPS
      "metricLabels": {
        "sls.project": "your-sls-project-name",
        "sls.logstore": "nginx-ingress"
      }
    }
  ]
}

Hal ini menunjukkan bahwa permintaan per detik (QPS) dari metrik eksternal Kubernetes ditemukan. value adalah nilai QPS.

Apa yang harus dilakukan jika kolom target bernilai unknown setelah menjalankan kubectl get hpa?

Anda dapat melakukan langkah-langkah berikut untuk mengatasi masalah ini.

  1. Jalankan perintah kubectl describe hpa <hpa_name> untuk mengidentifikasi penyebab HPA tidak berfungsi.

    • Jika nilai AbleToScale pada bidang Conditions adalah False, pastikan deployment berjalan normal.

    • Jika nilai ScalingActive pada bidang Conditions adalah False, lanjutkan ke langkah berikutnya.

  2. Jalankan perintah kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/". Jika dikembalikan pesan Error from server (NotFound): the server could not find the requested resource, periksa status startup alibaba-cloud-metrics-adapter.

    Jika alibaba-cloud-metrics-adapter berjalan normal, pastikan metrik HPA terkait dengan Ingress. Jika iya, Anda harus menerapkan komponen Simple Log Service terlebih dahulu. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.

  3. Pastikan metrik HPA dimasukkan dengan benar. Format nilai untuk sls.ingress.route adalah <namespace>-<svc>-<port>.

    • namespace: Namespace tempat Ingress berada.

    • svc: Nama Service yang sesuai dengan Ingress.

    • port: Nama port dari Service yang sesuai dengan Ingress.

Bagaimana cara mengetahui nama metrik yang didukung oleh HPA?

Untuk informasi selengkapnya, lihat Alibaba Cloud HPA Metrics. Tabel berikut mencantumkan metrik umum.

Nama Metrik

Deskripsi

Parameter Tambahan

sls_ingress_qps

Permintaan per detik (QPS) untuk IngressRoute tertentu

sls.ingress.route

sls_alb_ingress_qps

Permintaan per detik (QPS) untuk IngressRoute data ALB

sls.ingress.route

sls_ingress_latency_avg

Latensi untuk semua permintaan

sls.ingress.route

sls_ingress_latency_p50

Latensi untuk 50% permintaan

sls.ingress.route

sls_ingress_latency_p95

Latensi untuk 95% permintaan

sls.ingress.route

sls_ingress_latency_p99

Latensi untuk 99% permintaan

sls.ingress.route

sls_ingress_latency_p9999

Latensi untuk 99,99% permintaan

sls.ingress.route

sls_ingress_inflow

Bandwidth masuk untuk Ingress

sls.ingress.route

Bagaimana Menyesuaikan Setelah Menyesuaikan Format Log Nginx Ingress?

Untuk informasi selengkapnya tentang cara menggunakan metrik Ingress SLS untuk penyesuaian otomatis pod horizontal, lihat Horizontal pod autoscaling based on Nginx Ingress component metrics. Anda harus mengaktifkan dan mengonfigurasi log Nginx Ingress agar diingest ke Simple Log Service di kluster Anda.

  • Saat Anda membuat kluster, Simple Log Service diaktifkan secara default. Jika Anda mempertahankan pengaturan default, Anda dapat melihat laporan analisis log akses Nginx Ingress dan memantau status real-time Nginx Ingress di Simple Log Service console setelah kluster dibuat.

  • Jika Anda secara manual menonaktifkan Simple Log Service saat membuat kluster dan ingin menggunakan metrik Ingress SLS untuk penyesuaian otomatis pod horizontal setelah kluster dibuat, Anda harus mengaktifkan ulang atau mengonfigurasi Simple Log Service. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.

  • Untuk menyesuaikan format log Nginx Ingress, definisi sumber daya kustom (CRD) AliyunLogConfig yang diterapkan saat Simple Log Service pertama kali diaktifkan di kluster hanya berlaku untuk format log di Controller Ingress ACK default. Jika Anda mengubah format log akses Controller Ingress, Anda harus memodifikasi bagian processor_regex dalam ekspresi reguler konfigurasi CRD. Untuk informasi selengkapnya, lihat Collect container logs using a DaemonSet and a CRD.

Gagal menarik gambar alibaba-cloud-metrics-adapter

Gejala

Saat Anda melakukan upgrade komponen ack-alibaba-cloud-metrics-adapter ke versi 1.3.7, terjadi error saat menarik gambar. Pesan error-nya sebagai berikut:

Gagal menarik gambar "registry-<region-id>-vpc.ack.aliyuncs.com/acs/alibaba-cloud-metrics-adapter-amd64:v0.2.9-ba634de-aliyun".

Penyebab

Komponen ack-alibaba-cloud-metrics-adapter tidak mendukung pembaruan langsung.

Solusi

Anda dapat melakukan langkah-langkah berikut untuk melakukan upgrade komponen.

  1. Cadangkan konfigurasi komponen saat ini.

  2. Uninstal versi lama komponen.

  3. Instal versi terbaru komponen menggunakan konfigurasi cadangan.

Penting

Selama proses uninstall dan reinstall komponen, HPA terkait akan menjeda penskalaan karena pengambilan data pemantauan terhenti.

Referensi