全部产品
Search
文档中心

Container Service for Kubernetes:Aktifkan Penjadwalan Elastis Berbasis Inventaris untuk Armada Multi-Kluster

更新时间:Sep 24, 2025

Dalam penerapan aplikasi lintas wilayah, mengelola alokasi sumber daya di berbagai wilayah dapat menjadi tantangan. Untuk mengatasi hal ini, ACK One menyediakan penjadwal cerdas yang berbasis inventaris untuk armada multi-kluster. Topik ini menjelaskan cara kerja penjadwalan berbasis inventaris dan bagaimana mengaktifkannya untuk armada Anda.

Ikhtisar

Saat melayani beban kerja inferensi GPU, pengguna menghadapi dua tantangan utama:

  • Ketersediaan GPU yang Dinamis: Pasokan sumber daya GPU bervariasi antar wilayah, sehingga sulit untuk menjamin ketersediaan secara real-time.

  • Biaya Tinggi GPU: Penyediaan node GPU sebelumnya untuk menangani permintaan potensial dapat menyebabkan biaya yang signifikan dan tidak perlu.

Mekanisme penjadwalan berbasis inventaris, dikombinasikan dengan skalabilitas instan, secara efektif mengatasi kedua tantangan tersebut. Saat sumber daya yang ada di kluster anggota armada tidak cukup untuk menjadwalkan aplikasi baru, penjadwal secara cerdas menempatkan beban kerja ke kluster yang memiliki inventaris GPU tersedia. Fitur skalabilitas instan kluster tersebut kemudian menyediakan node yang diperlukan sesuai permintaan.

Kemampuan ini memaksimalkan penjadwalan sukses aplikasi yang bergantung pada sumber daya langka seperti GPU, sambil secara signifikan mengurangi biaya operasional.

Penting

Fitur ini saat ini dalam versi pratinjau. Untuk menggunakannya, ajukan tiket.

Cara kerjanya

Saat aplikasi diterapkan ke armada dan kluster anggota memiliki sumber daya yang tidak mencukupi, alur kerja berikut dipicu:

  1. Aplikasi dan kebijakan propagasinya dibuat di lapisan kontrol armada.

  2. Penjadwal mendeteksi bahwa kluster anggota target kekurangan sumber daya yang diperlukan.

  3. Penjadwal meminta scaler (ACK GOATScaler) dari kluster anggota untuk memeriksa inventaris GPU yang tersedia di wilayahnya.

  4. Berdasarkan laporan inventaris, penjadwal mengevaluasi ulang keputusan penempatannya dan mengirimkan aplikasi ke kluster dengan inventaris yang tersedia.

  5. Setelah aplikasi dikirimkan ke kluster target, fitur skalabilitas instan menyediakan node baru, dan pod aplikasi dijadwalkan dan mulai berjalan.

Persyaratan

Spesifikasi instans GPU-accelerated dan perkiraan biaya

Memori GPU digunakan oleh parameter model selama fase inferensi. Penggunaannya dihitung menggunakan rumus berikut:

Ambil contoh model 7B dengan presisi default FP16: jumlah parameter model adalah 7 miliar, dan ukuran byte per parameter adalah 2 byte (bilangan floating point 16-bit default/8 bit per byte).

Selain memori yang digunakan untuk memuat model, Anda juga perlu mempertimbangkan ukuran cache key-value (KV) dan pemanfaatan GPU. Biasanya, sebagian memori dicadangkan untuk buffering. Oleh karena itu, kami merekomendasikan menggunakan tipe instans yang menyediakan 24 GiB memori, seperti ecs.gn7i-c8g1.2xlarge atau ecs.gn7i-c16g1.4xlarge. Lihat Instansi Komputasi yang Dioptimalkan dengan Percepatan GPU dan Penagihan untuk Layanan GPU Elastis.

Langkah 1: Persiapkan data model

Pada langkah ini, Anda akan menyiapkan file model Qwen-8B dan membuat Persistent Volume (PV) Object Storage Service (OSS) yang sesuai untuk setiap kluster anggota.

  1. Unduh model.

    Catatan

    Periksa apakah plugin git-lfs sudah terinstal. Jika belum, jalankan yum install git-lfs atau apt-get install git-lfs untuk menginstalnya. Untuk informasi lebih lanjut, lihat Instal git-lfs.

    git lfs install
    GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Qwen/Qwen3-8B
    cd Qwen3-8B
    git lfs pull
  2. Buat folder di OSS dan unggah model ke dalamnya.

    Catatan

    Untuk langkah-langkah detail tentang cara menginstal dan menggunakan ossutil, lihat Instal ossutil.

    ossutil mkdir oss://<your-bucket-name>/models/Qwen3-8B
    ossutil cp -r ./Qwen3-8B oss://<your-bucket-name>/models/Qwen3-8B
  3. Buat PV dan PersistentVolumeClaim (PVC) di setiap kluster anggota untuk memasang file model dari OSS. Untuk informasi lebih lanjut, lihat Gunakan Volume Statis yang Disediakan oleh ossfs 1.0.

    Templat YAML

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
    stringData:
      akId: <your-oss-ak> # AccessKey ID yang digunakan untuk mengakses OSS.
      akSecret: <your-oss-sk> # Rahasia AccessKey yang digunakan untuk mengakses OSS.
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: qwen3-8b
      namespace: default
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: qwen3-8b
      storageClassName: oss
      volumeMode: Filesystem
      volumeName: qwen3-8b
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: qwen3-8b
      name: qwen3-8b
    spec:
      accessModes:
        - ReadWriteMany
      capacity:
        storage: 20Gi
      csi:
        driver: ossplugin.csi.alibabacloud.com
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          bucket: <your-bucket-name> # Nama bucket.
          otherOpts: '-o allow_other -o umask=000'
          path: <your-model-path> # Dalam contoh ini, path adalah /models/Qwen3-8B/.
          url: <your-bucket-endpoint> # Endpoint, seperti oss-cn-hangzhou-internal.aliyuncs.com.
        volumeHandle: qwen3-8b
      persistentVolumeReclaimPolicy: Retain
      storageClassName: oss
      volumeMode: Filesystem

Langkah 2: Konfigurasikan kelompok node di kluster anggota

Di setiap kluster anggota, buat atau edit kelompok node dengan pengaturan berikut:

  • Instance Type: ecs.gn7i-c8g1.2xlarge (atau tipe instans GPU lain yang sesuai)

  • Scaling Mode: Otomatis

  • Expected Nodes: 0

Untuk operasi lebih lanjut dan konfigurasi parameter, lihat Buat dan Kelola Kelompok Node.

Saat menyesuaikan konfigurasi penskalaan node, Anda dapat menyesuaikan parameter Waktu Tunda Pemicu Penyusutan untuk mempersingkat waktu tunggu untuk langkah-langkah berikutnya.

Langkah 3: Buat aplikasi dan kebijakan propagasi di kluster armada

  1. Buat file bernama deploy.yaml untuk mendefinisikan penerapan layanan inferensi.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: qwen3-8b
      name: qwen3-8b
      namespace: default
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: qwen3-8b
      template:
        metadata:
          labels:
            app: qwen3-8b
        spec:
          volumes:
            - name: qwen3-8b
              persistentVolumeClaim:
                claimName: qwen3-8b
            - name: dshm
              emptyDir:
                medium: Memory
                sizeLimit: 20Gi
          containers:
          - command:
            - sh
            - -c
            - vllm serve /models/qwen3-8b --port 8000 --trust-remote-code --served-model-name qwen3-8b --tensor-parallel=1 --max-model-len 8192 --gpu-memory-utilization 0.95 --enforce-eager
            image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm-openai:v0.9.1
            name: vllm
            ports:
            - containerPort: 8000
            readinessProbe:
              tcpSocket:
                port: 8000
              initialDelaySeconds: 30
              periodSeconds: 30
            resources:
              limits:
                nvidia.com/gpu: "1"
            volumeMounts:
              - mountPath: /models/qwen3-8b
                name: qwen3-8b
              - mountPath: /dev/shm
                name: dshm
  2. Buat file bernama PropagationPolicy.yaml. Bidang utama autoScaling.ecsProvision: true mengaktifkan penjadwalan berbasis inventaris.

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: demo-policy
    spec:
      # Bidang ini mengaktifkan penjadwalan elastis berbasis inventaris.
      autoScaling:
        ecsProvision: true
      preserveResourcesOnDeletion: false
      conflictResolution: Overwrite
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: qwen3-8b
        namespace: default
      placement:
        replicaScheduling:
          replicaSchedulingType: Divided
          weightPreference:
            dynamicWeight: AvailableReplicas
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # Ganti dengan ID kluster anggota Anda.
          - ${cluster2-id} # Ganti dengan ID kluster anggota Anda.
  3. Gunakan file kubeconfig dari armada untuk menerapkan aplikasi dan kebijakan propagasinya.

    kubectl apply -f deploy.yaml
    kubectl apply -f PropagationPolicy.yaml

    Setelah beberapa saat, kolam node GPU di kluster anggota Anda akan mulai meningkat secara otomatis.

Langkah 4: Validasi penskalaan elastis

  1. Periksa status penjadwalan beban kerja di armada.

    kubectl get resourcebinding

    Output yang Diharapkan:

    NAME                  SCHEDULED   FULLYAPPLIED   OVERRIDDEN   ALLAVAILABLE   AGE
    qwen3-8b-deployment   True        True           True         False          7m47s

    Output menunjukkan bahwa SCHEDULED adalah TRUE, yang menunjukkan bahwa beban kerja berhasil dijadwalkan.

  2. Setelah pod berada dalam status Berjalan, periksa distribusinya di seluruh kluster anggota.

    kubectl amc get deploy qwen3-8b -M

    Output yang Diharapkan:

    NAME       CLUSTER           READY   UP-TO-DATE   AVAILABLE   AGE     ADOPTION
    qwen3-8b   cxxxxxxxxxxxxxx   2/2     2            2           3m22s   Y
    qwen3-8b   cxxxxxxxxxxxxxx   2/2     2            2           3m22s   Y

    Output menunjukkan bahwa semua replika telah dijadwalkan dan berjalan, meskipun kluster anggota awalnya tidak memiliki node GPU yang tersedia.

  3. Perbarui file deploy.yaml untuk mengurangi jumlah replika untuk qwen3-8b menjadi 2, dan terapkan ulang.

    Sebagai alternatif, hapus beban kerja untuk mensimulasikan skenario di mana jumlah replika dikurangi menjadi 0.
    kubectl apply -f deploy.yaml
  4. Setelah sekitar 10 menit, kolam node GPU di kluster anggota akan secaraotomatis menyusut untuk melepaskan node yang tidak digunakan, sehingga mengurangi biaya.

    Jika Anda menghapus beban kerja, jumlah node akan menyusut menjadi 0.