全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan HPA multi-kluster berdasarkan metrik kustom vLLM

更新时间:Dec 30, 2025

Layanan online untuk large language models (LLMs) sering menggunakan arsitektur multi-kluster untuk menangani fluktuasi lalu lintas. Solusi multi-kluster yang disediakan oleh ACK One sangat ideal untuk skenario ini. Topik ini menjelaskan cara menggunakan armada ACK One untuk menerapkan layanan inferensi vLLM di lingkungan cloud dan memanfaatkan Horizontal Pod Autoscaler (HPA) multi-kluster, atau FederatedHPA, guna mencapai skalabilitas elastis lintas kluster.

Cara kerja

Dalam skenario inferensi berskala besar, layanan online untuk LLM menghadapi tantangan fluktuasi lalu lintas yang intens dan tidak dapat diprediksi. Arsitektur multi-kluster merupakan solusi umum untuk menangani puncak lalu lintas:

  • Pengguna dengan pusat data yang dikelola sendiri biasanya menerapkan arsitektur Cloud Hibrida dan melakukan skalabilitas elastis keluar ke kluster berbasis cloud selama jam sibuk bisnis.

  • Pengguna cloud-native cenderung menerapkan beberapa kluster di wilayah berbeda untuk menghindari risiko kekurangan resource di satu wilayah.

Armada ACK One dapat mengelola resource di beberapa kluster, melakukan penjadwalan lintas kluster, serta mendukung skalabilitas elastis—memenuhi kebutuhan kedua mode penyebaran tersebut:

  • Penjadwalan prioritas multi-kluster: Anda dapat mengonfigurasi prioritas penjadwalan untuk kluster. Replika dijadwalkan terlebih dahulu ke kluster berprioritas tinggi. Jika resource tidak mencukupi, replika diskalakan keluar ke kluster berprioritas rendah. Saat melakukan scaling in, replika di kluster berprioritas rendah dihapus terlebih dahulu.

  • Penjadwalan cerdas berbasis inventaris: Kluster armada bekerja sama dengan komponen GoatScaler dari kluster anggota. Komponen ini menggunakan informasi ECS Inventory untuk menjadwalkan replika secara cerdas.

  • Skalabilitas elastis terpusat: Anda dapat membuat FederatedHPA untuk melakukan skalabilitas elastis terpusat pada beberapa kluster. Metrics Adapter dari kluster armada mengumpulkan dan mengagregasi metrik dari kluster anggota. Kluster anggota juga mendukung prometheus-adapter. Beban kerja kemudian diskalakan berdasarkan metrik yang telah diagregasi.

image.jpeg

Lingkup

Penting

Fitur HPA multi-kluster sedang dalam pratinjau undangan. Untuk menggunakan fitur ini, kirim permintaan agar ditambahkan ke daftar putih.

Prosedur

Langkah 1: Konfigurasikan pengumpulan metrik di kluster anggota

Konfigurasikan parameter komponen ack-alibaba-cloud-metrics-adapter di kedua kluster ACK.

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

  2. Pada halaman Clusters, temukan kluster yang diinginkan lalu klik namanya. Di panel navigasi sebelah kiri, pilih Applications > Helm.

  3. Temukan komponen ack-alibaba-cloud-metrics-adapter dan klik Update di kolom Actions. Pada bagian prometheus.adapter.rules, Anda dapat memodifikasi konfigurasi pengumpulan metrik. Contohnya:

    • vllm:num_requests_waiting: Jumlah permintaan yang menunggu untuk diproses.

    • vllm:num_requests_running: Jumlah permintaan yang sedang diproses.

    rules:
      - seriesQuery: 'vllm:num_requests_waiting'
        resources:
          overrides:
            kubernetes_namespace: {resource: "namespace"}
            kubernetes_pod_name: {resource: "pod"}
        name:
          matches: 'vllm:num_requests_waiting'
          as: 'num_requests_waiting'
        metricsQuery: 'sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)'
      - seriesQuery: 'vllm:num_requests_running'
        resources:
          overrides:
            kubernetes_namespace: {resource: "namespace"}
            kubernetes_pod_name: {resource: "pod"}
        name:
          matches: 'vllm:num_requests_running'
          as: 'num_requests_running'
        metricsQuery: 'sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)'
  4. Setelah mengubah konfigurasi, klik OK.

  5. Periksa apakah metrik kustom telah dikonfigurasi.

    # Lihat metrik kustom
    kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/test/pods/qwen3-xxxxx/num_requests_waiting"
    kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/test/pods/qwen3-xxxxx/num_requests_running"

    Output yang diharapkan mencakup metrik vLLM. Hal ini menunjukkan bahwa pengumpulan metrik telah dikonfigurasi dengan benar.

Langkah 2: Buat layanan inferensi vLLM di armada

Simpan templat YAML berikut sebagai deployment.yaml. Kemudian, jalankan perintah kubectl apply -f deployment.yaml untuk menerapkan layanan inferensi di armada.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: qwen3
  namespace: test
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: qwen3
  template:
    metadata:
      annotations:
        # Digunakan untuk menangkap metrik pod, mirip dengan PodMonitor.
        prometheus.io/path: /metrics
        prometheus.io/port: "8000"
        prometheus.io/scrape: "true"
      labels:
        app: qwen3
    spec:
      containers:
      # Gunakan model qwen3-0.6b, diunduh dari ModelScope.
      - command:
        - sh
        - -c
        - export VLLM_USE_MODELSCOPE=True; vllm serve Qwen/Qwen3-0.6B --served-model-name
          qwen3-0.6b --port 8000 --trust-remote-code --tensor_parallel_size=1 --max-model-len
          2048 --gpu-memory-utilization 0.8
        image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm-openai:v0.9.1
        imagePullPolicy: IfNotPresent
        name: vllm
        ports:
        - containerPort: 8000
          name: restful
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8000
          timeoutSeconds: 1
        resources:
          limits:
            nvidia.com/gpu: "1"
          requests:
            nvidia.com/gpu: "1"
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

Langkah 3: Konfigurasikan kebijakan propagasi multi-kluster di armada

Simpan templat berikut sebagai propagationpolicy.yaml. Kemudian, jalankan perintah kubectl apply -f propagationpolicy.yaml.

  • autoScaling.ecsProvision: Mengaktifkan penjadwalan cerdas berbasis inventaris. Instans ECS secara otomatis diskalakan keluar atau masuk sesuai kebutuhan.

  • clusterAffinities: Menentukan kelompok prioritas. Selama penjadwalan, afinitas diisi sesuai urutan prioritas.

apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
  name: vllm-deploy-pp
  namespace: test
spec:
  autoScaling:
    ecsProvision: true
  placement:
    clusterAffinities:
    - affinityName: high-priority
      clusterNames:
      - ${cluster1_id}
    - affinityName: low-priority
      clusterNames:
      - ${cluster2_id}
    replicaScheduling:
      replicaSchedulingType: Divided
      replicaDivisionPreference: Weighted
      weightPreference:
        dynamicWeight: AvailableReplicas
  preserveResourcesOnDeletion: false
  resourceSelectors:
  - apiVersion: apps/v1
    kind: Deployment
    namespace: test
  - apiVersion: v1
    kind: Service
    namespace: test
  schedulerName: default-scheduler

Langkah 4: Buat FederatedHPA di armada

FederatedHPA dapat memantau CPU, memori, metrik kustom, dan metrik eksternal dari pod. Contoh berikut menggunakan metrik kustom num_requests_waiting dan num_requests_running untuk skalabilitas elastis.

Simpan templat berikut sebagai federatedhpa.yaml. Kemudian, jalankan perintah kubectl apply -f federatedhpa.yaml.

apiVersion: autoscaling.one.alibabacloud.com/v1alpha1
kind: FederatedHPA
metadata:
  name: vllm-fhpa
  namespace: test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: qwen3
  minReplicas: 1
  maxReplicas: 10
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 30
    scaleUp:
      stabilizationWindowSeconds: 10
  metrics:
    - type: Pods
      pods:
        metric:
          name: num_requests_waiting
        target:
          type: AverageValue
          averageValue: ${waiting_size} # Bervariasi berdasarkan nilai optimal untuk GPU dan model.
    - type: Pods
      pods:
        metric:
          name: num_requests_running
        target:
          type: AverageValue
          averageValue: ${running_size} # Bervariasi berdasarkan nilai optimal untuk GPU dan model.

Verifikasi hasil

  1. Verifikasi penjadwalan prioritas

    Jalankan perintah kubectl scale deployment -ntest qwen3 --replicas=2 untuk melakukan scaling out workload. Karena cluster1 hanya memiliki satu instans GPU-accelerated, replika kedua dijadwalkan ke cluster2 dalam kelompok berprioritas rendah.

  2. Verifikasi FederatedHPA

    1. Ekspos layanan menggunakan Application Load Balancer (ALB) multi-kluster, lalu peroleh alamat Ingress. Untuk informasi selengkapnya, lihat Kelola lalu lintas utara-selatan.

    2. Ganti alamat ALB dalam perintah berikut. Kemudian, jalankan perintah tersebut untuk melakukan uji stres pada layanan.

      hey -n 600 -c 60 -m POST -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Run a test"}]}' http://alb-xxxxxx.cn-hangzhou.alb.aliyuncsslb.com:8000/v1/chat/completions

      Anda dapat mengharapkan peningkatan signifikan pada num_requests_running dan jumlah replika:

        Current Metrics:
          Pods:
            Current:
              Average Value:  0
            Metric:
              Name:  num_requests_waiting
          Type:      Pods
          Pods:
            Current:
              Average Value:  58
            Metric:
              Name:        num_requests_running
          Type:            Pods
        Current Replicas:  2
        Desired Replicas:  3
  3. Verifikasi penjadwalan cerdas berbasis inventaris

    Setelah aplikasi inferensi diskalakan menjadi tiga replika, replika baru berhasil dijadwalkan dan dimulai meskipun cluster1 dan cluster2 hanya memiliki total dua instans GPU-accelerated. Hal ini menunjukkan bahwa penjadwalan cerdas berbasis inventaris armada berfungsi dengan benar.

FAQ

Mengapa kolom REPLICAS kosong setelah saya menjalankan kubectl get fhpa?

Hal ini terjadi karena FederatedHPA tidak cocok dengan workload yang benar. Periksa konfigurasi nama dan namespace workload.

Mengapa muncul error setelah saya menjalankan kubectl get fhpa -o yaml?

Kondisi tersebut melaporkan error the HPA was unable to compute the replica count: unable to get metric xxx. Hal ini terjadi karena FederatedHPA gagal mengambil metrik untuk workload yang sesuai dari kluster anggota.

  1. Konfirmasi bahwa komponen ack-alibaba-cloud-metrics-adapter telah diinstal di semua kluster anggota.

  2. Konfirmasi bahwa parameter komponen ack-alibaba-cloud-metrics-adapter di kluster anggota telah dikonfigurasi dengan benar. Anda dapat mengkueri metrik di dasbor kluster anggota untuk memeriksa apakah kueri berhasil.

Mengapa metrik tidak terlihat saat saya mengkuerinya di kluster anggota?

Jalankan perintah berikut untuk memeriksa apakah metrik telah terdaftar. Jika metrik yang relevan tidak ditemukan, periksa apakah parameter komponen untuk aplikasi Helm telah dikonfigurasi dengan benar.

kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .