All Products
Search
Document Center

Container Service for Kubernetes:Skalakan pod berdasarkan metrik Nginx Ingress

Last Updated:Apr 21, 2026

Skalakan pod berdasarkan sinyal lalu lintas aktual—bukan hanya CPU—dengan menghubungkan metrik Ingress dari Simple Log Service (SLS) ke Penyesuaian Otomatis Pod Horizontal (HPA) Kubernetes melalui External Metrics API. Panduan ini menjelaskan contoh lengkap: terapkan aplikasi Nginx, ekspos melalui Ingress, lalu konfigurasikan HPA untuk menskalakan berdasarkan permintaan per detik (QPS) dan latensi persentil ke-99,99.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK dengan kubectl yang telah dikonfigurasi

  • Kontroler Ingress dengan pengumpulan log SLS yang diaktifkan (diaktifkan secara default saat Anda membuat kluster)

  • Izin untuk menginstal Helm chart dan membuat resource HPA

Cara kerja

Komponen ack-alibaba-cloud-metrics-adapter menjembatani layanan pemantauan Alibaba Cloud dan External Metrics API Kubernetes. Setelah diinstal, HPA dapat mengkueri metrik Ingress SLS—seperti sls_ingress_qps dan sls_ingress_latency_p9999—dan menyesuaikan jumlah replika Deployment Anda sesuai kebutuhan.

Langkah 1: Instal 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 External Metrics API.

Penting

Komponen ini tidak mendukung peningkatan in-place. Untuk melakukan upgrade, uninstal versi saat ini terlebih dahulu, lalu instal versi terbaru. Selama proses uninstall dan reinstall, HPA terkait akan menjeda penskalaan karena pengambilan data pemantauan berhenti.

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

  2. Klik nama kluster Anda. Di panel navigasi kiri, pilih Applications > Helm.

  3. Di halaman Helm, klik Create. Lengkapi konfigurasi Basic Information, pilih ack-alibaba-cloud-metrics-adapter, lalu klik Next.

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

Langkah 2: Terapkan aplikasi uji coba

  1. Buat file nginx-test.yaml dengan konten berikut:

    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. Terapkan konfigurasi tersebut:

    kubectl apply -f nginx-test.yaml

Langkah 3: Buat Ingress

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

  2. Isi kolom yang diperlukan lalu klik OK. Konsol akan mengarahkan Anda ke halaman Ingress.

  3. Di kolom Name, klik nama Ingress untuk melihat aturan routing-nya. Untuk detail selengkapnya, lihat Manage Ingress.

Langkah 4: Konfigurasi HPA

HPA mendukung dua metrik Ingress SLS dengan semantik penskalaan yang berbeda:

MetricTarget typeScaling behavior
sls_ingress_qpsAverageValueQPS dibagi dengan jumlah pod saat ini sebelum dibandingkan
sls_ingress_latency_p9999ValueNilai latensi mentah dibandingkan secara langsung
  1. Buat file ingress-hpa.yaml dengan konten berikut:

    ParameterWajibDeskripsi
    sls.ingress.routeYaFormat: <namespace>-<svc>-<port>. Contoh: default-nginx-80
    sls.logstoreYaLogstore di Simple Log Service. Default: nginx-ingress
    sls.projectYaProject di Simple Log Service. Default: k8s-log-<cluster-id>
    sls.internal.endpointTidakApakah mengakses SLS melalui jaringan internal. Default: true. Atur ke false untuk menggunakan jaringan publik.
    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: "<your-sls-project>"      # Default: k8s-log-<cluster-id>
                  sls.logstore: "nginx-ingress"           # Logstore SLS default untuk log Nginx Ingress
                  sls.ingress.route: "default-nginx-80"  # Format: <namespace>-<svc>-<port>
            target:
              type: AverageValue
              averageValue: 10   # Lakukan scale up ketika QPS rata-rata per pod melebihi 10
        - type: External
          external:
            metric:
              name: sls_ingress_latency_p9999
              selector:
                matchLabels:
                  sls.project: "<your-sls-project>"
                  sls.logstore: "nginx-ingress"
                  sls.ingress.route: "default-nginx-80"
                  # sls.internal.endpoint: "true"         # true = jaringan internal (default); false = jaringan publik
            target:
              type: Value
              value: 10   # Lakukan scale up ketika latensi persentil ke-99,99 melebihi 10 ms

    Tabel berikut menjelaskan parameter yang digunakan dalam konfigurasi HPA.

  2. Terapkan konfigurasi tersebut:

    kubectl apply -f ingress-hpa.yaml

Verifikasi penskalaan

Jalankan uji beban selama 5 menit terhadap domain Ingress Anda untuk memicu scale-up:

# Kirim 10 permintaan konkuren selama 300 detik
ab -t 300 -c 10 <domain-name-configured-for-the-ingress>

Pantau status HPA secara real time:

kubectl get hpa ingress-hpa --watch

Output yang diharapkan saat scale-up berhasil (REPLICAS mencapai MAXPODS):

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

Saat lalu lintas turun di bawah ambang batas, nilai REPLICAS akan kembali ke nilai minimum.

Troubleshooting

Mulai troubleshooting dengan menjalankan kubectl describe hpa ingress-hpa dan periksa bidang Conditions. Gunakan kolom Type dan Status untuk mengidentifikasi masalah, lalu ikuti langkah-langkah berikut.

Kolom `target` menampilkan `unknown`

  1. Jalankan kubectl describe hpa <hpa-name> dan periksa bidang Conditions:

    • Jika AbleToScale bernilai False: pastikan Deployment dalam kondisi sehat.

    • Jika ScalingActive bernilai False: lanjutkan ke langkah berikutnya.

  2. Jalankan perintah berikut untuk memeriksa apakah External Metrics API tersedia:

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/"

    Jika responsnya adalah Error from server (NotFound), periksa status startup alibaba-cloud-metrics-adapter. Jika adapter berjalan normal dan metrik HPA terkait Ingress, deploy komponen SLS terlebih dahulu. Untuk detail selengkapnya, lihat Collect and analyze Nginx Ingress access logs.

  3. Verifikasi format sls.ingress.route. Nilainya harus berupa <namespace>-<svc>-<port>, dengan ketentuan:

    • namespace: namespace tempat Ingress berada

    • svc: nama Service yang terkait dengan Ingress

    • port: nama port dari Service tersebut

Gagal menarik gambar ack-alibaba-cloud-metrics-adapter (versi 1.3.7)

Saat melakukan upgrade ke versi 1.3.7, Anda mungkin melihat:

Failed to pull image "registry-<region-id>-vpc.ack.aliyuncs.com/acs/alibaba-cloud-metrics-adapter-amd64:v0.2.9-ba634de-aliyun".

Hal ini terjadi karena komponen tidak mendukung pembaruan langsung. Untuk mengatasinya:

  1. Cadangkan konfigurasi komponen saat ini.

  2. Uninstal versi lama.

  3. Instal versi terbaru menggunakan konfigurasi cadangan tersebut.

FAQ

Bagaimana cara mengkueri sls_ingress_qps dari command line?

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

Ganti {{SLS_Project}} dengan nama Project SLS Anda. Jika Anda tidak menetapkan nama kustom saat membuat kluster, nilai default-nya adalah k8s-log-{{ClusterId}}.

Respons yang berhasil akan mengembalikan ExternalMetricValueList dengan nilai QPS saat ini di bidang value. Jika Anda mendapatkan error ParameterInvalid, artinya metrik tidak memiliki data—biasanya karena ALB Ingress belum dikonfigurasi tetapi sls_alb_ingress_qps dikueri alih-alih sls_ingress_qps.

Metrik apa saja yang didukung HPA?

Untuk daftar lengkapnya, lihat Alibaba Cloud HPA Metrics. Metrik Ingress SLS umum:

MetricDescriptionRequired parameter
sls_ingress_qpsQPS untuk rute Ingress tertentusls.ingress.route
sls_alb_ingress_qpsQPS untuk rute ALB Ingresssls.ingress.route
sls_ingress_latency_avgLatensi rata-rata untuk semua permintaansls.ingress.route
sls_ingress_latency_p50Latensi pada persentil ke-50sls.ingress.route
sls_ingress_latency_p95Latensi pada persentil ke-95sls.ingress.route
sls_ingress_latency_p99Latensi pada persentil ke-99sls.ingress.route
sls_ingress_latency_p9999Latensi pada persentil ke-99,99sls.ingress.route
sls_ingress_inflowBandwidth masuk untuk Ingresssls.ingress.route

Bagaimana cara menyesuaikan HPA setelah menyesuaikan format log Nginx Ingress?

Pengumpulan log SLS bergantung pada Definisi Sumber Daya Kustom (CRD) AliyunLogConfig yang diterapkan saat SLS pertama kali diaktifkan. CRD ini disesuaikan untuk format log default kontroler Ingress ACK. Jika Anda mengubah format log akses kontroler Ingress, perbarui bagian processor_regex dalam konfigurasi CRD agar sesuai dengan format kustom Anda. Untuk detail selengkapnya, lihat Collect container logs using a DaemonSet and a CRD.

Jika SLS dinonaktifkan saat Anda membuat kluster dan Anda memerlukan metrik Ingress untuk HPA, aktifkan atau konfigurasikan ulang SLS terlebih dahulu. Untuk detail selengkapnya, lihat Collect and analyze Nginx Ingress access logs.

Langkah selanjutnya