全部产品
Search
文档中心

Container Service for Kubernetes:Implementasikan penyesuaian otomatis pod horizontal berdasarkan metrik komponen Alibaba Cloud

更新时间:Jan 10, 2026

Auto scaling yang presisi membantu meningkatkan waktu respons dan efisiensi sumber daya di kluster Anda saat menghadapi lonjakan lalu lintas. Topik ini menjelaskan cara menggunakan Kubernetes External Metrics API untuk mengintegrasikan metrik bisnis utama, seperti laju permintaan HTTP dan kueri per detik (QPS) Ingress, guna mengimplementasikan kebijakan penskalaan otomatis.

Topik ini menunjukkan cara mengonfigurasi Horizontal Pod Autoscaler (HPA) dengan membuat deployment, layanan, dan Ingress bernama Nginx, sehingga memungkinkan penerapan penyesuaian otomatis pod horizontal berdasarkan metrik QPS Ingress dari Simple Log Service (SLS).

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

Komponen ack-alibaba-cloud-metrics-adapter memungkinkan Kubernetes memperoleh data pemantauan untuk produk Alibaba Cloud, seperti Elastic Compute Service (ECS), Server Load Balancer (SLB), dan ApsaraDB RDS (RDS), melalui External Metrics API, sehingga meningkatkan kemampuan pemantauan dan auto scaling kluster Anda.

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

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

  3. Pada halaman Helm, klik Create. Konfigurasikan parameter Basic Information, pilih ack-alibaba-cloud-metrics-adapter, lalu klik Next.

Catatan

Komponen ack-alibaba-cloud-metrics-adapter tidak mendukung upgrade langsung. Anda harus mencopot komponen tersebut terlebih dahulu, lalu menginstal versi terbarunya.

Langkah 2: Buat aplikasi dan layanan

  1. Buat file bernama nginx-test.yaml.

    View 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 aplikasi dan layanan yang sesuai.

    kubectl apply -f nginx-test.yaml

Langkah 3: Buat Ingress

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

  2. Pada panel Create, masukkan informasi yang diperlukan, lalu klik OK. Setelah Ingress dibuat, Anda akan diarahkan ke halaman Ingresses.

  3. Di kolom Name, klik nama Ingress untuk melihat informasi aturan routing-nya. Untuk informasi selengkapnya tentang Ingress, lihat Ingress management.

Langkah 4: Konfigurasi HPA

Anda dapat mengonfigurasi dua metrik dari proyek SLS dalam HPA untuk penskalaan, yaitu sls_ingress_qps dan sls_ingress_latency_p9999.

  • sls_ingress_qps: Atur ke AverageValue. Artinya, QPS dibagi dengan jumlah pod sebelum dievaluasi.

  • sls_ingress_latency_p9999: Atur ke Value. Artinya, nilai tersebut tidak dibagi dengan jumlah pod.

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

    View 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 nilai sls.project dengan nilai aktual.
                  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:
                  # Proyek log Ingress default adalah k8s-log-clusterId.
                  sls.project: "***" 
                  # Logstore Ingress default adalah nginx-ingress.
                  sls.logstore: "nginx-ingress"
                  # namespace-svc-port
                  sls.ingress.route: "default-nginx-80"
                  # Titik akhir VPC SLS. Nilai default adalah true.
                  # sls.internal.endpoint:true
            target:
              type: Value
              # Jika sls_ingress_latency_p9999>10ms, HPA secara otomatis menambah jumlah pod untuk nginx-deployment-basic.
              value: 10

    Konfigurasi Horizontal Pod Autoscaler (HPA) mencakup parameter berikut.

    Nama Parameter

    Wajib

    Deskripsi

    sls.ingress.route

    Ya

    Format parameternya adalah <namespace>-<svc>-<port>. <namespace> adalah namespace tempat Ingress berada. <svc> adalah nama layanan yang sesuai dengan Ingress. <port> adalah nama port layanan yang sesuai dengan Ingress. Contoh: default-nginx-80.

    sls.logstore

    Ya

    Nama Logstore di Simple Log Service. Di kluster, nilai default sls.logstore adalah nginx-ingress.

    sls.project

    Ya

    Nama proyek di Simple Log Service. Di kluster, nilai default sls.project adalah k8s-log-Cluster ID.

    sls.internal.endpoint

    Tidak

    Menentukan apakah akses ke Simple Log Service dilakukan melalui jaringan pribadi atau Internet. Nilai default adalah true.

    • true: Akses SLS melalui jaringan pribadi.

    • false: Akses SLS melalui Internet.

  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 <domain_name_configured_for_ingress> # Gunakan Apache Benchmark untuk melakukan uji stres pada layanan yang diekspos oleh Ingress. Atur konkurensi ke 10 dan durasi ke 300 detik.
  2. Verifikasi status penskalaan.

    1. Di panel navigasi kiri konsol, klik Clusters. Pada halaman Clusters, temukan kluster target, lalu pilih More > Manage Cluster via CloudShell di kolom Actions.

    2. Jalankan perintah berikut untuk memeriksa status penskalaan.

      kubectl get hpa ingress-hpa

      Output yang diharapkan:

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

      Penskalaan berhasil jika nilai REPLICAS sama dengan nilai MAXPODS.

FAQ

Bagaimana cara mendapatkan metrik QPS sls_ingress_qps dari command line?

Anda dapat mengkueri metrik tersebut dari command line. Contoh berikut menunjukkan cara mengkueri metrik `sls_ingress_qps`.

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

Dalam perintah tersebut, {{SLS_Project}} menentukan nama proyek SLS yang sesuai dengan kluster ACK Anda. Jika Anda belum menyesuaikan konfigurasi, nama default-nya adalah k8s-log-{{ClusterId}}, dengan {{ClusterId}} sebagai ID kluster Anda.

Jika perintah mengembalikan hasil berikut:

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"
}

Hasil ini menunjukkan bahwa tidak ada data yang tersedia untuk metrik tersebut. Hal ini mungkin karena Anda mengkueri metrik `sls_alb_ingress_qps` tetapi belum mengonfigurasi ALB Ingress.

Jika perintah mengembalikan hasil yang mirip dengan berikut:

{
  "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"
      }
    }
  ]
}

Hasil ini menunjukkan bahwa metrik eksternal Kubernetes untuk QPS ditemukan. Bidang value merepresentasikan nilai QPS.

Apa yang harus saya lakukan jika perintah kubectl get hpa mengembalikan target sebagai unknown?

Ikuti langkah-langkah berikut untuk mengatasi masalah tersebut.

  1. Jalankan perintah kubectl describe hpa <hpa_name> untuk menemukan penyebab kegagalan Horizontal Pod Autoscaler (HPA).

    • Jika bidang Conditions menunjukkan bahwa AbleToScale bernilai False, verifikasi bahwa deployment sudah benar.

    • Jika bidang Conditions menunjukkan bahwa ScalingActive bernilai False, lanjutkan ke langkah berikutnya.

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

    Jika status alibaba-cloud-metrics-adapter normal, periksa apakah metrik HPA terkait dengan Ingress. Jika metrik tersebut terkait dengan Ingress, Anda harus terlebih dahulu deploy komponen Simple Log Service. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.

  3. Verifikasi bahwa metrik HPA dimasukkan dengan benar. Nilai untuk sls.ingress.route harus menggunakan format <namespace>-<svc>-<port>.

    • namespace: Namespace Ingress.

    • svc: Nama layanan Ingress.

    • port: Nama port layanan 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

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 Ingress.

sls.ingress.route

Bagaimana cara menyesuaikan sistem setelah menyesuaikan format log Nginx Ingress?

Untuk informasi selengkapnya tentang cara menggunakan metrik Ingress Simple Log Service (SLS) untuk penyesuaian otomatis pod horizontal, lihat Use metrics from Alibaba Cloud components for horizontal pod autoscaling. Anda harus mengaktifkan dan mengonfigurasi pengumpulan log Nginx Ingress untuk SLS di kluster Anda dengan benar.

  • Saat 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.

  • Jika Anda menonaktifkan Simple Log Service saat membuat kluster, Anda harus mengaktifkan ulang atau mengonfigurasinya untuk menggunakan metrik Ingress SLS guna penyesuaian otomatis pod horizontal. Untuk informasi selengkapnya, lihat Collect and analyze Nginx Ingress access logs.

  • Untuk menyesuaikan format log Nginx Ingress, Anda harus memodifikasi bagian processor_regex dari ekspresi reguler dalam konfigurasi Custom Resource Definition (CRD). Hal ini karena CRD AliyunLogConfig, yang dideploy saat Anda mengaktifkan Simple Log Service di kluster, hanya mendukung format log default dari controller Ingress ACK. Untuk informasi selengkapnya, lihat Use a DaemonSet CRD to collect container logs.

Gagal menarik citra alibaba-cloud-metrics-adapter

Gejala

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

Gagal menarik citra "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 saat ini tidak mendukung upgrade langsung.

Solusi

Ikuti langkah-langkah berikut untuk melakukan upgrade komponen.

  1. Buat cadangan konfigurasi komponen saat ini.

  2. Uninstal versi lama komponen tersebut.

  3. Instal versi terbaru komponen menggunakan konfigurasi cadangan.

Penting

Selama proses uninstal dan instal ulang komponen, perilaku penskalaan HPA yang terkait dijeda karena pengambilan data pemantauan dihentikan.

Referensi