All Products
Search
Document Center

Container Service for Kubernetes:Isi awal data OSS sesuai permintaan ke volume berkinerja tinggi

Last Updated:Aug 30, 2026

Sebelum menjalankan tugas pelatihan AI atau analitik data, pra-ambil data OSS dingin dalam jumlah besar sesuai permintaan ke volume berkinerja tinggi seperti CPFS for Lingjun atau cloud disk sehingga workload dapat membaca dengan kecepatan tinggi. Volume tersebut secara otomatis diklaim setelah tugas selesai, menyeimbangkan percepatan komputasi dan optimalisasi biaya.

Cara kerja

Implementasi fitur

Fitur ini menggunakan Volume Populators Kubernetes, yang dikelola oleh storage-operator ACK. Saat Anda membuat PVC yang mereferensikan resource kustom OSSVolumePopulator (OSSVP), storage-operator mencegat permintaan tersebut dan mengisi data.

Mode pengisian bergantung pada tipe volume target:

Mode

Jenis penyimpanan yang didukung

Deskripsi

bmcpfs-dataflow
Mode aliran data native

CPFS for Lingjun

storage-operator memanfaatkan aliran data native CPFS untuk mengisi data.

Mode ini tidak menggunakan resource komputasi kluster dan lebih efisien.

generic
Mode pengisian pod generik

Jenis penyimpanan lainnya, seperti cloud disk atau edisi umum CPFS

storage-operator membuat pod sementara di namespace ack-volume-populator untuk memasang volume baru dan mengunduh data OSS yang ditentukan. Pod tersebut dihapus setelah pengisian selesai.

Mode ini mengonsumsi resource komputasi kluster.

Setelah pengisian berhasil, status PVC berubah dari Pending menjadi Bound. Pod aplikasi kemudian dapat memasang PVC tersebut dan mengakses data yang telah diisi sebelumnya.

Skenario khas

Fitur ini mendukung dua kasus penggunaan utama.

Dimensi

Skenario 1: Isi awal data ke volume bersama CPFS for Lingjun

Skenario 2: Isi awal data ke volume cloud disk terisolasi

Skenario yang berlaku

Workload intensif-baca ber-throughput tinggi seperti pelatihan dan inferensi model AI untuk mengatasi bottleneck akses OSS.

Tugas batch paralel atau pipa data yang membutuhkan ruang kerja baca-tulis terisolasi untuk menghindari konflik konkurensi dan memastikan isolasi data.

Implementasi teknis

Gunakan CPFS for Lingjun dengan mode bmcpfs-dataflow untuk pengisian data native.

Gunakan penyimpanan yang disediakan secara dinamis seperti cloud disk dengan mode generic dan pod sementara untuk pengisian data.

Karakteristik utama

  • Optimalisasi biaya: Menggunakan akselerasi native tanpa resource komputasi. Penyimpanan dilepas segera setelah digunakan.

  • Berbagi data: Akses banyak-ke-satu memungkinkan beberapa tugas GPU berbagi dataset yang sama yang telah diisi sebelumnya.

  • Isolasi data: Setiap tugas mendapatkan volume khusus, menghindari gangguan. Mendukung berbagai jenis penyimpanan dinamis.

  • Skalabilitas elastis: Akses satu-ke-satu mengaitkan siklus hidup penyimpanan dengan siklus hidup tugas untuk kontrol biaya yang tepat.

Alur kerja

Langkah inti VolumePopulator serupa di kedua mode.

  1. Aktifkan Feature Gate VolumePopulator di storage-operator.

    Setelah Anda mengaktifkan VolumePopulator, namespace ack-volume-populator dibuat secara default untuk PVC dan pod sementara selama pengisian awal data.
  2. Berikan izin akses OSS untuk tugas pengisian. Mode bmcpfs-dataflow memerlukan tag tertentu pada bucket OSS. Mode generic memerlukan konfigurasi RRSA atau AccessKey.

  3. Buat objek OSSVolumePopulator yang menentukan path bucket OSS dan mode pengisian.

  4. Buat PVC, tentukan StorageClass, dan referensikan OSSVP dengan dataSourceRef untuk memulai pengisian awal data (waktu tergantung pada volumeBindingMode StorageClass).

  5. Setelah PVC berstatus Bound, buat workload (pod, deployment, dll.) yang memasangnya untuk akses data berkecepatan tinggi.

    Pengisian awal data dilakukan satu kali saat pembuatan volume. Perubahan selanjutnya pada data sumber OSS tidak disinkronkan ke volume yang telah dibuat.
  6. Setelah tugas selesai, hapus PVC. Jika reclaimPolicy StorageClass adalah Delete, penyimpanan berkinerja-tinggi terkait (seperti FileSet CPFS atau cloud disk) dihapus secara otomatis dan penagihan berhenti. Data sumber OSS tidak terpengaruh.

Prasyarat

  • Kluster menjalankan Kubernetes 1.26 atau lebih baru dengan plugin CSI. Fitur ini memerlukan penyimpanan yang disediakan secara dinamis.

    Untuk meningkatkan kluster Anda, lihat Tingkatkan kluster secara manual. Untuk migrasi dari FlexVolume ke CSI, lihat Migrasi FlexVolume ke CSI menggunakan csi-compatible-controller.
  • Tingkatkan storage-operator ke v1.35.1 atau lebih baru dan aktifkan Feature Gate VolumePopulator.

    Jika feature gate lain sudah diaktifkan, gunakan format: xxxxxx=true,yyyyyy=false,VolumePopulator=true

Skenario 1: Isi awal data ke volume bersama CPFS for Lingjun

Untuk pelatihan dan inferensi model ber-throughput tinggi yang read-only, gunakan aliran data CPFS for Lingjun untuk pra-ambil model dari OSS sesuai permintaan sehingga beberapa tugas GPU dapat membaca dengan kecepatan tinggi.

Prasyarat

1. Tetapkan tag tertentu pada bucket OSS

Dalam Operasi penandaan objek, tambahkan tag ke bucket OSS Anda dengan key cpfs-dataflow dan value true.

Jangan hapus atau ubah tag ini selama penggunaan—pembuatan volume mungkin gagal.

2. Buat OSSVolumePopulator (OSSVP)

Buat OSSVolumePopulator di namespace yang sama dengan aplikasi dan PVC Anda untuk menentukan sumber data OSS.

apiVersion: storage.alibabacloud.com/v1beta1
kind: OSSVolumePopulator
metadata:
  name: qwen3-32b
  # Harus berada di namespace yang sama dengan aplikasi dan PVC
  namespace: bmcpfs-dataflow-demo 
spec:
  bucket: <your-bucket-name>
  region: cn-hangzhou
  endpoint: oss-cn-hangzhou-internal.aliyuncs.com
  path: /Qwen3-32B/
  # Khusus untuk volume CPFS for Lingjun, memanfaatkan kemampuan aliran datanya
  mode: bmcpfs-dataflow
  
  # Konfigurasi lanjutan opsional untuk mode bmcpfs-dataflow
  # Contoh ini merekomendasikan pengaturan default. Abaikan jika tidak ada kebutuhan khusus.
  # bmcpfsDataflow:
    # Throughput aliran data maksimum (MB/s). Opsi: 600, 1200, 1500. Default: 600
    # throughput: 1200
    # Aktifkan transfer terenkripsi. Default: kosong (dinonaktifkan)
    # sourceSecurityType: SSL
    # Mode pengisian awal data. Default: metadataAndData untuk pengisian penuh.
    # Atur ke metadata untuk pengisian metadata saja.
    # dataType: metadataAndData

Parameter:

Nama

Deskripsi

Opsional

Default

namespace

OSSVolumePopulator harus berada di namespace yang sama dengan aplikasi dan PVC.

Tidak

N/A

bucket

Nama bucket OSS.

Tidak

N/A

region

Wilayah OSS.

Tidak

N/A

endpoint

Titik akhir layanan OSS.

Tidak

N/A

path

Awalan path dalam bucket OSS, seperti /data/.

Ya

/

mode

Mode operasi. Opsi:

  • generic (default): Pengisian generik untuk volume dinamis backend apa pun (misalnya, cloud disk, edisi umum CPFS). Membuat pod sementara di namespace ack-volume-populator untuk mengunduh data, mengonsumsi resource komputasi kluster.

  • bmcpfs-dataflow: Mode berkinerja-tinggi hanya untuk volume CPFS for Lingjun. Menggunakan aliran data native untuk efisiensi lebih tinggi tanpa resource komputasi kluster.

  • auto: Memilih mode terbaik berdasarkan jenis penyimpanan target, tetapi biasanya kembali ke mode generic. Tentukan bmcpfs-dataflow secara manual jika diperlukan.

Ya

auto

bmcpfsDataflow.throughput

Throughput aliran data CPFS for Lingjun maksimum (MB/s). Nilai valid: 600, 1200, 1500.

Ya

Sama dengan default aliran data CPFS for Lingjun

bmcpfsDataflow.sourceSecurityType

Protokol keamanan transfer data, seperti "SSL" untuk transfer terenkripsi.

Ya

Enkripsi dinonaktifkan

bmcpfsDataflow.dataType

Jenis data yang disinkronkan:

  • metadata: Sinkronkan hanya metadata file.

    Dengan sinkronisasi metadata saja, data ditarik dari OSS saat pembacaan pertama, yang dapat memengaruhi kinerja akses awal.

  • metadataAndData: Sinkronkan metadata dan konten file.

Ya

metadataAndData

3. Siapkan StorageClass dan PVC

Buat StorageClass untuk CPFS for Lingjun, lalu buat PVC yang mereferensikan OSSVP dengan dataSourceRef.

Buat StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: bmcpfs-dataflow-demo
parameters:
  bmcpfsId: bmcpfs-29000z8xz3xxxxxxxxxxx
  vpcMountTarget: cpfs-29000z8xz3xxxxxxxxxxx-vpc-xxxxxx.cn-wulanchabu.cpfs.aliyuncs.com
  mountpointAutoSwitch: "true"
provisioner: bmcpfsplugin.csi.alibabacloud.com
# Penting: Pastikan FileSet CPFS dan data secara otomatis dibersihkan setelah penghapusan PVC
reclaimPolicy: Delete
# Direkomendasikan: Atur ke Immediate untuk memulai pengisian awal data segera setelah pembuatan PVC
volumeBindingMode: Immediate

Setiap volume dinamis dari StorageClass ini membuat Fileset di backend CPFS for Lingjun. Buat resource OSSVP berbeda untuk mengisi dataset OSS berbeda ke volume berbeda dengan StorageClass yang sama.

Buat PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: qwen3-32b
  namespace: bmcpfs-dataflow-demo
spec:
  accessModes:
    - ReadOnlyMany
  dataSourceRef:
    apiGroup: storage.alibabacloud.com
    kind: OSSVolumePopulator
    # Referensikan nama OSSVP yang dibuat di atas
    name: qwen3-32b
  resources:
    requests:
      # Harus setidaknya sebesar ukuran sumber data OSS yang direferensikan oleh OSSVP
      storage: 80Gi
  storageClassName: bmcpfs-dataflow-demo
  volumeMode: Filesystem

Karena StorageClass mengatur volumeBindingMode: Immediate, storage-operator segera memulai aliran data dari OSS ke CPFS for Lingjun setelah pembuatan PVC.

4. Verifikasi status pengisian awal data

Selama pengisian, status PVC tetap Pending dan berubah menjadi Bound setelah selesai.

Untuk mode bmcpfs-dataflow, periksa progres aliran data CPFS for Lingjun secara real-time dengan perintah ini:

kubectl -n bmcpfs-dataflow-demo describe ossvp qwen3-32b
  • status selama pengisian:

      Bmcpfs Dataflow:
        62a4e7ec-fae1-4f11-848f-b57cxxxxxxxx:
          Data Flow Id:       df-29d3ad9e9xxxxxxx
          Data Flow Task Id:  task-2993179xxxxxxxxx
          File Set Id:        fset-2997498xxxxxxxxx
          File System Id:     bmcpfs-29000z8xz3lf5xxxxxxxx
          Progress:           59%
  • status setelah selesai:

    Message:  Populated successfully

5. Buat workload dan gunakan data

Setelah PVC berstatus Bound, buat workload yang memasangnya.

Contoh ini menggunakan resource GPU. Untuk verifikasi saja, buat pod CPU dan gunakan kubectl exec untuk memeriksa data.

Perluas untuk melihat contoh kode

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: demo-apply-qwen3-32b
  namespace: bmcpfs-dataflow-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-apply-qwen3-32b
  template:
    metadata:
      labels:
        app: demo-apply-qwen3-32b
      # Gunakan tipe instans ACS HPN untuk memasang volume CPFS
      # alibabacloud.com/compute-class: "gpu-hpn"
    spec:
      # Gunakan tipe instans ACS HPN untuk memasang volume CPFS
      # nodeSelector: 
      #   alibabacloud.com/node-type: reserved
      # tolerations:
      # - key: "virtual-kubelet.io/provider" 
      #   operator: "Exists"
      #   effect: "NoSchedule"
      volumes:
        - name: model-storage
          persistentVolumeClaim:
            # Tentukan PVC yang dibuat
            claimName: qwen3-32b
        - name: dshm
          emptyDir:
            medium: Memory
            sizeLimit: 15Gi
      containers:
        - command: ["sh", "-c", "python3 -m sglang.launch_server --model-path /models/Qwen3-32B --tp 2"]
          image: registry.cn-beijing.aliyuncs.com/tool-sys/ossfs-public:demo-env-python3.12.7-sglang0.5.5
          name: sglang
          ports:
            - containerPort: 8000
              name: http
          resources:
            limits:
              nvidia.com/gpu: "2"
            requests:
              nvidia.com/gpu: "2"
          volumeMounts:
            - mountPath: /models/Qwen3-32B
              name: model-storage
            - mountPath: /dev/shm
              name: dshm

Panduan pembersihan resource

Setelah tugas pelatihan atau inferensi AI selesai, lepas volume bersama CPFS for Lingjun dan workload terkait.

Resource yang perlu dilepas:

  • Workload yang menggunakan volume bersama (dalam contoh ini, StatefulSet)

  • PVC yang digunakan untuk pengisian awal data

  • Resource penyimpanan backend (FileSet CPFS for Lingjun) yang dibuat secara otomatis oleh PVC

Langkah pembersihan:

  1. Hapus workload

    Hapus StatefulSet yang menggunakan volume untuk melepas PVC.

    kubectl delete statefulset demo-apply-qwen3-32b -n bmcpfs-dataflow-demo
  2. Hapus PVC

    Dengan reclaimPolicy: Delete pada StorageClass, penghapusan PVC juga menghapus FileSet CPFS backend, melepas penyimpanan, dan menghentikan penagihan.

    kubectl delete pvc qwen3-32b -n bmcpfs-dataflow-demo
  3. Verifikasi pembersihan resource:

    • Di Konsol NAS, pilih File System > File System List dan pastikan FileSet untuk PVC ini telah dihapus serta kapasitas yang digunakan berkurang.

    • Data sumber OSS tidak terpengaruh. Di Konsol OSS, pastikan dataset tetap utuh.

Skenario 2: Isi awal data ke volume cloud disk terisolasi

Untuk alur kerja pemrosesan batch, gunakan Argo Workflows untuk membuat dan memanaskan cloud disk independen secara dinamis per tugas guna isolasi data dan elastisitas.

Prasyarat

  • Aktifkan VolumePopulatorPodHandler di storage-operator.

    Setelah diaktifkan, sistem memberikan izin RBAC yang diperlukan ke komponen terkait dan pod sementara. Evaluasi risiko keamanan sebelum mengaktifkan.

    Izin RBAC yang dikonfigurasi secara otomatis

    • Memberikan izin operasi pod ke pod storage-operator di namespace ack-volume-populator

      - apiGroups: [""]
        resources: [pods]
        verbs: [get, list, watch, create, delete]
    • Memberikan izin akses tingkat kluster ke pod tugas sementara

      - apiGroups: [""]
        resources: [events]
        verbs: [create, patch, get, list]
      - apiGroups: [volumepopulators.storage.alibabacloud.com]
        resources: [ossvolumepopulators]
        verbs: [get, list, watch]
  • Argo Workflows telah diinstal.

    Langkah-langkah detail

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

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, pilih Operations > Add-ons.

    3. Di halaman Add-ons, temukan Argo Workflows dan instal sesuai petunjuk.

  • Contoh ini menggunakan komputasi arsitektur tanpa server (ECI) untuk tugas pengisian awal data dan alur kerja. Instal add-on ack-virtual-node . Untuk verifikasi non-arsitektur tanpa server, hapus alibabacloud.com/eci: "true" dari resource.

1. Berikan otorisasi tugas pengisian awal data untuk mengakses OSS

Dalam mode generic, tugas pengisian awal data dijalankan sebagai pod sementara di namespace ack-volume-populator. Berikan pod tersebut akses ke bucket OSS dengan data sumber.

  • Metode RRSA: Menetapkan peran RAM sementara yang berotasi otomatis ke pod untuk isolasi izin detail halus dengan keamanan lebih tinggi.

  • Metode AccessKey: Menyimpan kredensial statis jangka panjang di Secret. Mudah dikonfigurasi tetapi kurang aman.

Metode RRSA

1. Aktifkan RRSA di kluster

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters. Di halaman Kluster, klik nama kluster target.

  2. Di tab Basic Information, di bagian Security and Auditing, klik Enable di samping RRSA OIDC, dan ikuti petunjuk di layar untuk mengaktifkan RRSA selama jam sepi.

    Saat status kluster berubah dari Updating menjadi Running, RRSA telah diaktifkan.

    Penting

    Setelah RRSA diaktifkan, periode validitas maksimum token ServiceAccount yang baru dibuat di kluster dibatasi hingga 12 jam.

2. Buat peran RAM dan berikan izin

Buat peran RAM agar pod dapat mengasumsikan untuk akses OSS melalui otentikasi RRSA.

Lihat langkah-langkah

  1. Buat peran RAM.

    1. Buka halaman Konsol RAM - Buat Peran, pilih Principal Type sebagai Identity Provider, lalu klik Switch to Policy Editor untuk masuk ke halaman Visual Editor.

    2. Pilih Principal sebagai Identity Provider, klik Edit, dan ikuti petunjuk di bawah untuk menyelesaikan konfigurasi.

      Konfigurasi utama sebagai berikut. Biarkan parameter lain tetap default. Lihat Buat peran RAM untuk penyedia identitas OIDC untuk detailnya.

      Konfigurasi

      Deskripsi

      Identity Provider Type

      OIDC.

      Identity Provider

      Pilih ack-rrsa-<cluster_id>. Ganti <cluster_id> dengan ID kluster Anda.

      Condition

      Tambahkan secara manual oidc:sub.

      • Kunci: Pilih oidc:sub.

      • Operator: Pilih StringEquals.

      • Value: Masukkan system:serviceaccount:ack-volume-populator:plugin-account.

      Role Name

      Contoh ini menggunakan demo-role-for-rrsa.

  2. Buat kebijakan izin.

    Mengikuti prinsip hak istimewa minimal, buat kebijakan kustom yang memberikan akses ke bucket OSS target (izin baca-saja atau baca-tulis OSS).

    Buka halaman Konsol RAM - Buat Kebijakan, beralih ke JSON Editor, dan konfigurasikan skrip kebijakan sesuai petunjuk.

    Jika Anda sudah memiliki peran RAM dengan izin OSS, modifikasi kebijakan kepercayaannya untuk digunakan kembali. Lihat Gunakan peran RAM yang ada dan berikan izin.

    Kebijakan baca-saja OSS

    Ganti <myBucketName> dengan nama bucket aktual Anda.
    {
        "Statement": [
            {
                "Action": [
                    "oss:Get*",
                    "oss:List*"
                ],
                "Effect": "Allow",
                "Resource": [
                    "acs:oss:*:*:<myBucketName>",
                    "acs:oss:*:*:<myBucketName>/*"
                ]
            }
        ],
        "Version": "1"
    }
    1. Buka halaman Konsol RAM - Pengguna, klik pengguna target di daftar Pengguna RAM, lalu di tab AccessKey, klik Create AccessKey.

    2. Ikuti petunjuk untuk membuat AccessKey di kotak dialog dan simpan dengan aman ID AccessKey dan Secret AccessKey.

Metode AccessKey

  1. Buat Pengguna RAM. Lewati langkah ini jika Pengguna RAM sudah ada. Buka halaman Konsol RAM - Buat Pengguna dan buat Pengguna RAM sesuai petunjuk, misalnya atur nama login dan kata sandi.

  2. Buat kebijakan izin.

    Mengikuti prinsip hak istimewa minimal, buat kebijakan kustom yang memberikan akses ke bucket OSS target (izin baca-saja atau baca-tulis OSS).

    Buka halaman Konsol RAM - Buat Kebijakan, beralih ke JSON Editor, dan konfigurasikan skrip kebijakan sesuai petunjuk.

    Kebijakan baca-saja OSS

    Ganti <myBucketName> dengan nama bucket aktual Anda.
    {
        "Statement": [
            {
                "Action": [
                    "oss:Get*",
                    "oss:List*"
                ],
                "Effect": "Allow",
                "Resource": [
                    "acs:oss:*:*:<myBucketName>",
                    "acs:oss:*:*:<myBucketName>/*"
                ]
            }
        ],
        "Version": "1"
    }
  3. Lampirkan kebijakan ke Pengguna RAM.

    1. Buka halaman Konsol RAM - Pengguna. Di daftar pengguna, temukan pengguna target dan klik Add Permissions di kolom Actions.

    2. Di bagian Policies, cari dan pilih kebijakan yang dibuat pada langkah sebelumnya, lalu selesaikan otorisasi.

  4. Buat AccessKey untuk Pengguna RAM untuk disimpan sebagai Secret untuk pengisian awal data.

    1. Buka halaman Konsol RAM - Pengguna, klik pengguna target di daftar Pengguna RAM, lalu di tab AccessKey, klik Create AccessKey.

    2. Ikuti petunjuk untuk membuat AccessKey di kotak dialog dan simpan dengan aman ID AccessKey dan Secret AccessKey.

  5. Buat Secret di kluster.

    Gunakan YAML berikut untuk membuat Secret di namespace ack-volume-populator untuk menyimpan AccessKey.

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      # Namespace harus diatur ke ack-volume-populator
      namespace: ack-volume-populator
    stringData:
      # Ganti dengan ID AccessKey yang diperoleh sebelumnya
      accessKeyId: <your-AccessKey-ID>
      # Ganti dengan Secret AccessKey yang diperoleh sebelumnya
      accessKeySecret: <your-AccessKey-Secret>

2. Buat OSSVolumePopulator (OSSVP)

Buat OSSVolumePopulator di namespace yang sama dengan aplikasi dan PVC Anda. Atur mode ke generic dan konfigurasikan otorisasi.

apiVersion: storage.alibabacloud.com/v1beta1
kind: OSSVolumePopulator
metadata:
  name: generic-demo
  # Harus berada di namespace yang sama dengan aplikasi dan PVC
  namespace: argo 
spec:
  bucket: my-test-bucket
  region: cn-hangzhou
  endpoint: oss-cn-hangzhou-internal.aliyuncs.com
  path: /many-files/
  # Mode generik untuk volume penyimpanan backend apa pun
  mode: generic
  generic:
    # Tambahkan label ke pod tugas pengisian data untuk penjadwalan ke pod ECI
    labels:
      alibabacloud.com/eci: "true"
    # Tambahkan anotasi ke pod tugas pengisian data untuk mengonfigurasi spesifikasi ECI
    annotations:
      k8s.aliyun.com/eci-use-specs: "2-4Gi"
    # Pilih salah satu antara secretRef atau rrsaConfigs
    # secretRef: oss-secret
    rrsaConfigs:
      # ARN peran RAM yang digunakan untuk otorisasi RRSA
      roleArn: "acs:ram::1234567*****:role/oss-populator"
      # ARN Penyedia OIDC kluster
      oidcProviderArn: "acs:ram::1234567*****:oidc-provider/my-oidc-provider"
    # Konfigurasikan afinitas untuk pod tugas pengisian data agar dijadwalkan ke node tertentu
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
            - matchExpressions:
                - key: "disktype"
                  operator: NotIn
                  values:
                    - "hdd"
    # Konfigurasikan toleransi untuk pod tugas pengisian data
    tolerations:
      - key: "virtual-kubelet.io/provider"
        operator: Equal
        value: "alibabacloud"
        effect: NoSchedule
    # Throughput maksimum (MB/s)
    # throughput: 1000

Parameter:

Nama

Deskripsi

Opsional

Default

namespace

OSSVolumePopulator harus berada di namespace yang sama dengan aplikasi dan PVC.

Tidak

N/A

bucket

Nama bucket OSS.

Tidak

N/A

region

Wilayah OSS.

Tidak

N/A

endpoint

Titik akhir layanan OSS.

Tidak

N/A

path

Awalan path dalam bucket OSS, seperti /data/.

Ya

/

mode

Mode operasi. Opsi:

  • generic (default): Pengisian generik untuk volume dinamis backend apa pun (misalnya, cloud disk, edisi umum CPFS). Membuat pod sementara di namespace ack-volume-populator untuk mengunduh data, mengonsumsi resource komputasi kluster.

  • bmcpfs-dataflow: Mode berkinerja-tinggi hanya untuk volume CPFS for Lingjun. Menggunakan aliran data native untuk efisiensi lebih tinggi tanpa resource komputasi kluster.

  • auto: Memilih mode terbaik berdasarkan jenis penyimpanan target, tetapi biasanya kembali ke mode generic. Tentukan bmcpfs-dataflow secara manual jika diperlukan.

Ya

auto

generic.labels

Label untuk pod tugas pengisian data agar dijadwalkan ke ECI.

Ya

N/A

generic.annotations

Anotasi untuk pod tugas pengisian data agar mengonfigurasi spesifikasi ECI.

Ya

N/A

generic.secretRef

Nama Secret yang menyimpan AccessKey. Gunakan ini atau generic.rrsaConfigs.

Ya

N/A

generic.rrsaConfigs.roleArn

ARN peran RAM yang digunakan untuk otorisasi RRSA.

Buka halaman Konsol RAM - Peran, klik nama peran RAM, dan dapatkan dari halaman detail.

Diperlukan saat menggunakan RRSA

N/A

generic.rrsaConfigs.oidcProviderArn

ARN Penyedia OIDC kluster.

Buka halaman Kluster ACK, klik nama kluster target, pilih Cluster Information, lalu temukan informasi tersebut pada tab Basic Information di bawah bagian RRSA OIDC.

Diperlukan saat menggunakan RRSA

N/A

generic.affinity

Afinitas untuk pod tugas pengisian data agar dijadwalkan ke node tertentu.

Ya

N/A

generic.tolerations

Toleransi untuk pod tugas pengisian data.

Ya

N/A

generic.throughput

Throughput maksimum (MB/s) untuk pod tugas pengisian data.

Berbeda dengan bmcpfs-dataflow, kinerja generic bergantung pada resource node (jaringan, CPU) dan kemampuan tulis penyimpanan. Pengaturan ini membatasi kecepatan unduh untuk mencegah tugas pengisian awal mengonsumsi resource kluster secara berlebihan.

Ya

Tanpa Batas (laju aktual bergantung pada jaringan node, CPU, dan kinerja tulis penyimpanan)

3. Siapkan StorageClass

Skenario ini memerlukan StorageClass untuk menyediakan cloud disk secara dinamis. ACK menyediakan StorageClass default dan mendukung pembuatan StorageClass secara manual.

  • Contoh ini menggunakan alicloud-disk-essd dengan reclaimPolicy diatur ke Delete dan volumeBindingMode diatur ke Immediate, cocok untuk komputasi arsitektur tanpa server tanpa kesadaran zona.

  • Untuk alur kerja non-arsitektur tanpa server, gunakan StorageClass dengan volumeBindingMode diatur ke WaitForFirstConsumer (seperti alicloud-disk-topology-alltype) sehingga cloud disk dan pod aplikasi dibuat di zona yang sama.

4. Buat Argo Workflow

Contoh Workflow ini menggunakan volumeClaimTemplate ephemeral untuk membuat cloud disk independen dengan data yang telah diisi sebelumnya untuk setiap tugas paralel.

Perluas untuk melihat contoh kode

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: parallel-data-process-with-ossvp-
  namespace: argo
spec:
  # Definisikan parameter input
  arguments:
    parameters:
      - name: number
        value: 2

  entrypoint: main
  # Definisikan templat klaim volume untuk setiap replika konkuren di Workflow
  volumes:
    - name: scratch-volume
      # Deklarasikan sebagai volume sementara, dihapus secara otomatis setelah Workflow selesai
      ephemeral:
        volumeClaimTemplate:
          metadata:
            labels:
              diskType: scratch-volume
          spec:
            accessModes: [ "ReadWriteOnce" ]
            # Untuk komputasi non-arsitektur tanpa server, ganti dengan alicloud-disk-topology-alltype
            storageClassName: "alicloud-disk-essd"
            resources:
              requests:
                # Harus setidaknya sebesar ukuran sumber data OSS yang direferensikan oleh OSSVP
                storage: 20Gi
            # Referensikan OSSVP sebagai sumber data
            dataSourceRef:
              apiGroup: storage.alibabacloud.com
              kind: OSSVolumePopulator
              name: generic-demo

  templates:
    - name: main
      dag:
        tasks:
          # Jalankan beberapa tugas echo secara paralel
          - name: echo-task
            template: echo-template
            arguments:
              parameters:
                - name: index
                  value: "{{item}}"
            withSequence:
              count: "{{workflow.parameters.number}}"

    - name: echo-template
      metadata:
        labels:
          # Jalankan tugas di ECI
          alibabacloud.com/eci: "true" 
      container:
        image: mirrors-ssl.aliyuncs.com/busybox:latest
        command:
          - sh
          - -c
        args:
          - |
            echo "Subtask dimulai, ID: {{inputs.parameters.index}}"
            echo "Membuat file log baru..."
            touch /scratch-volume/"{{inputs.parameters.index}}-logs"
            echo "Menampilkan isi dari disk yang diisi oleh OSSVP:"
            ls /scratch-volume
            echo "Subtask selesai, ID: {{inputs.parameters.index}}"
        volumeMounts:
        - name: scratch-volume
          mountPath: /scratch-volume
        resources:
          limits:
            cpu: '4'
            memory: 16Gi
          requests:
            cpu: '4'
            memory: 16Gi
      inputs:
        parameters:
          - name: index

Setelah membuat Workflow, periksa log dari pod tugas apa pun untuk memastikan pembacaan data yang telah diisi sebelumnya berhasil.

Di produksi, gunakan Artifact Argo Workflows untuk menyimpan hasil komputasi akhir di OSS.
# Ganti <your-workflow-pod-name> dengan nama pod aktual
kubectl -n argo logs <your-workflow-pod-name>

Output yang diharapkan:

Subtask dimulai, ID: 1
Membuat file log baru...
Menampilkan isi dari disk yang diisi oleh OSSVP:
1-logs
lost+found
results-2025-04-16T07:48:00Z
...
Subtask selesai, ID: 1

Analisis hasil:

  • 1-logs: File yang ditulis oleh tugas, mengonfirmasi akses baca-tulis dan penyimpanan terisolasi antar tugas paralel.

  • results-2025-04-16T07:48:00Z dan file serupa: Data yang telah diisi sebelumnya dari OSS ke cloud disk.

  • lost+found: Direktori yang dibuat saat pemformatan sistem file. Abaikan.

Panduan pembersihan resource

Setelah tugas pemrosesan batch selesai, lepas volume cloud disk terisolasi dan instance Argo Workflow.

Resource yang perlu dilepas:

  • Instance Argo Workflow

  • PVC sementara yang dibuat secara otomatis oleh Workflow

  • Resource penyimpanan backend (cloud disk) yang dibuat secara otomatis oleh PVC.

Langkah pelepasan:

  1. Hapus Argo Workflow:

    Hapus resource Workflow. Dengan klaim volume ephemeral, penghapusan akan berjenjang ke semua PVC. StorageClass dengan reclaimPolicy: Delete kemudian menghapus cloud disk backend, melepas resource, dan menghentikan penagihan.

    # Ganti <workflow-name> dengan nama Workflow aktual
    kubectl -n argo delete workflow <workflow-name>
  2. Verifikasi pembersihan resource:

    • Jalankan kubectl -n argo get pvc untuk memastikan semua PVC terkait workflow telah dihapus.

    • Verifikasi resource cloud disk: Buka Konsol ECS - Penyimpanan Blok - Disk dan pastikan tidak ada resource cloud disk yang tersisa dari workflow ini.

    • Data sumber OSS tidak terpengaruh. Di Konsol OSS, pastikan dataset tetap utuh.

Terapkan di produksi

  • Manajemen biaya dan resource:

    • Atur reclaimPolicy: Delete pada StorageClass untuk volume yang dibuat secara dinamis sehingga penyimpanan berkinerja tinggi dibersihkan secara otomatis setelah tugas selesai.

    • Dalam mode generic, konfigurasikan affinity dan tolerations di OSSVolumePopulator untuk menjadwalkan pod tugas sementara di komputasi arsitektur tanpa server berbiaya lebih rendah (termasuk ACS, ECI) atau spot instans.

    • Minta storage PVC lebih besar dari ukuran data sumber, atau pengisian akan gagal karena ruang tidak mencukupi.

  • Kinerja dan stabilitas:

    • Atur volumeBindingMode StorageClass ke WaitForFirstConsumer pada node ECS sehingga cloud disk dan pod aplikasi dibuat di zona yang sama.

    • Untuk CPFS for Lingjun, pilih dataType: metadata untuk kesiapan PV lebih cepat jika latensi baca pertama dapat diterima, atau dataType: metadataAndData untuk pengisian penuh dan kinerja baca pertama yang tinggi.

    • Monitor status pengisian dengan kubectl describe ossvp <name> untuk troubleshooting cepat.

  • Keamanan dan izin:

    • Dalam mode generic, lebih baik gunakan RRSA daripada AccessKey saat memberikan akses OSS ke pod tugas pengisian data.

Penagihan

Fitur ini menimbulkan biaya berikut:

  • Biaya penyimpanan berkinerja tinggi berdasarkan jenis volume yang dibuat (seperti CPFS for Lingjun atau cloud disk) dan siklus hidupnya.

  • Biaya penyimpanan OSS untuk data sumber.

  • Biaya transfer data: Konfigurasikan titik akhir internal OSS di OSSVP untuk menghindari biaya trafik. Titik akhir publik menimbulkan biaya trafik.

  • Biaya resource komputasi (hanya untuk mode generic): Pod sementara mengonsumsi resource komputasi kluster (CPU, memori, bandwidth) dan ditagih berdasarkan spesifikasi dan durasi.

  • Untuk CPFS for Lingjun dalam mode bmcpfs-dataflow, tugas aliran data gratis digunakan karena fitur aliran data sedang dalam pratinjau publik.

FAQ

Setelah pengisian awal selesai, jika saya memperbarui file sumber di OSS, apakah data di volume akan disinkronkan secara otomatis?

Tidak. Pengisian awal data dilakukan satu kali saat pembuatan volume. Setelah pengisian, isi volume terpisah dari data sumber OSS, dan perubahan OSS selanjutnya tidak disinkronkan.

Mengapa PVC saya tetap dalam status Pending?

Pending adalah normal selama pengisian awal data. Jika berlangsung lama, troubleshooting sebagai berikut:

  1. kubectl describe pvc <pvc-name> -n <namespace>: Periksa event PVC untuk error populator.

  2. kubectl describe ossvp <ossvp-name> -n <namespace>: Periksa status dan event OSSVP untuk progres atau kegagalan pengisian.

  3. Dalam mode generic, periksa pod yang gagal di namespace ack-volume-populator dan tinjau log. Penyebab umum termasuk izin OSS tidak mencukupi, masalah jaringan, atau ruang penyimpanan tidak mencukupi.