All Products
Search
Document Center

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

Last Updated:Mar 06, 2026

Sebelum menjalankan tugas seperti pelatihan AI atau analitik data, prefetch volume besar data dingin yang disimpan di Object Storage Service (OSS) ke volume penyimpanan berkinerja tinggi—seperti CPFS for Lingjun atau cloud disk—sesuai permintaan. Tugas komputasi kemudian dapat membaca data langsung dari volume berkinerja tinggi tersebut dengan kecepatan tinggi. Setelah tugas selesai, volume penyimpanan secara otomatis diklaim ulang, sehingga menyeimbangkan akselerasi komputasi dengan optimalisasi biaya.

Cara kerja

Implementasi fitur

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

Bergantung pada jenis volume target, pengisian dilakukan dalam salah satu mode berikut.

Mode

Jenis penyimpanan yang didukung

Deskripsi

bmcpfs-dataflow
Mode alur data native

CPFS for Lingjun

storage-operator memanggil kemampuan alur data native CPFS untuk mengisi data.

Mode ini tidak mengonsumsi resource komputasi kluster dan menawarkan efisiensi lebih tinggi.

generic
Mode pengisian pod generik

Jenis penyimpanan lain, seperti cloud disk atau edisi umum CPFS

storage-operator membuat pod sementara di namespace ack-volume-populator untuk memasang volume yang baru dibuat dan mengunduh data OSS yang ditentukan ke dalamnya. Setelah pengisian selesai, pod ini dihapus.

Mode ini mengonsumsi resource komputasi kluster.

image

Setelah pengisian data berhasil, status PVC berubah dari Pending menjadi Bound. Pada titik ini, pod aplikasi dapat memasang PVC dan mengakses data yang telah diprefill.

Skenario khas

Fitur ini mendukung dua kasus penggunaan utama.

Dimensi

Skenario 1: Prefetch data ke volume bersama CPFS for Lingjun

Skenario 2: Prefetch data ke volume cloud disk terisolasi

Skenario yang berlaku

Workload intensif-baca berthroughput tinggi seperti pelatihan dan inferensi model AI, dirancang untuk mengatasi bottleneck kinerja akses OSS.

Tugas pemrosesan batch paralel atau pipa data yang memerlukan ruang kerja baca-tulis terisolasi, dirancang untuk mengatasi konflik konkurensi dan memastikan isolasi data.

Implementasi teknis

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

Gunakan penyimpanan yang diprovisikan secara dinamis seperti cloud disk dengan mode generic, menggunakan pod sementara untuk pengisian data generik.

Karakteristik utama

  • Optimalisasi biaya: Memanfaatkan kemampuan native untuk akselerasi tanpa mengonsumsi resource komputasi. Penyimpanan dilepas segera setelah digunakan.

  • Berbagi data: Mendukung akses banyak-ke-satu. Beberapa tugas GPU dapat berbagi dataset yang sama yang telah diprefill.

  • Isolasi dan fleksibilitas data: Setiap tugas mendapatkan volume penyimpanannya sendiri, menghindari interferensi. Kompatibel dengan berbagai jenis penyimpanan dinamis.

  • Skalabilitas elastis: Mendukung akses satu-ke-satu. Siklus hidup penyimpanan terikat pada siklus hidup tugas, memungkinkan kontrol biaya yang tepat.

Alur kerja

Langkah inti untuk menggunakan VolumePopulator serupa di kedua mode.

image

  1. Persiapan lingkungan: Aktifkan Feature Gate VolumePopulator di storage-operator.

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

  3. Definisikan sumber data (OSSVP): Buat objek OSSVolumePopulator untuk menentukan path bucket OSS dan mode pengisian.

  4. Buat volume dan picu prefill (PVC): Buat PVC, tentukan StorageClass, dan gunakan bidang dataSourceRef untuk mereferensikan OSSVP yang telah dibuat sebelumnya. Ini memulai proses prefill data (waktu tergantung pada volumeBindingMode StorageClass).

  5. Validasi dan penggunaan: Setelah status PVC menjadi Bound, buat workload aplikasi (pod, deployment, dll.) yang memasang PVC ini untuk akses data berkecepatan tinggi.

    Prefill data adalah operasi satu kali selama pembuatan volume. Perubahan selanjutnya pada data sumber OSS tidak akan disinkronkan ke volume yang telah dibuat.
  6. Pengklaiman ulang resource: Setelah tugas berakhir, hapus PVC. Jika reclaimPolicy StorageClass diatur ke Delete, resource penyimpanan berkinerja tinggi terkait (seperti FileSet CPFS atau cloud disk) secara otomatis dihapus dan penagihan berhenti. Data sumber OSS tetap tidak terpengaruh.

Persiapan

  • Pastikan kluster Anda menjalankan Kubernetes versi 1.26 atau lebih baru dan menggunakan plugin CSI. Fitur ini bergantung pada volume yang diprovisikan secara dinamis dan hanya mendukung penyimpanan yang diprovisikan 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 versi 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: Pramuat data ke volume bersama CPFS for Lingjun

Solusi ini ditujukan untuk skenario read-only berthroughput tinggi seperti pelatihan dan inferensi model. Solusi ini memanfaatkan kemampuan alur data CPFS for Lingjun untuk prefetch model dari OSS ke volume CPFS for Lingjun sesuai permintaan, memungkinkan beberapa tugas GPU membaca data dengan kecepatan tinggi.

Persiapan

1. Tetapkan tag tertentu pada bucket OSS

Ikuti petunjuk di Operasi tagging objek untuk menambahkan tag ke bucket OSS Anda dengan key cpfs-dataflow dan value true.

Jangan menghapus atau mengubah tag ini selama penggunaan, karena dapat menyebabkan kegagalan pembuatan volume.

2. Buat OSSVolumePopulator (OSSVP)

Buat resource OSSVolumePopulator di namespace yang sama dengan aplikasi dan PVC Anda untuk mendefinisikan 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 alur datanya
  mode: bmcpfs-dataflow
  
  # Konfigurasi lanjutan opsional untuk mode bmcpfs-dataflow
  # Contoh ini merekomendasikan pengaturan default. Abaikan jika tidak ada kebutuhan khusus.
  # bmcpfsDataflow:
    # Throughput alur data maksimum (MB/s). Opsi: 600, 1200, 1500. Default: 600
    # throughput: 1200
    # Aktifkan transfer terenkripsi. Default: kosong (dinonaktifkan)
    # sourceSecurityType: SSL
    # Mode prefill data. Default: metadataAndData untuk prefill penuh.
    # Atur ke metadata untuk prefill metadata saja.
    # dataType: metadataAndData

Deskripsi parameter:

Nama Parameter

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

Alamat Titik akhir layanan OSS.

Tidak

N/A

path

Awalan path dalam bucket OSS, seperti /data/.

Ya

/

mode

Mode operasi. Opsi:

  • generic (default): Mode 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 khusus untuk volume CPFS for Lingjun. Menggunakan alur data native untuk efisiensi lebih tinggi tanpa mengonsumsi resource komputasi kluster.

  • auto: Secara otomatis memilih mode terbaik berdasarkan jenis penyimpanan target. Namun, biasanya kembali ke mode generic. Tentukan secara manual bmcpfs-dataflow jika diperlukan.

Ya

auto

bmcpfsDataflow.throughput

Throughput maksimum alur data CPFS for Lingjun (MB/s). Opsi: 600, 1200, 1500.

Ya

Sama dengan default alur data CPFS for Lingjun

bmcpfsDataflow.sourceSecurityType

Jenis protokol keamanan transfer data, seperti "SSL" untuk mengaktifkan transfer terenkripsi.

Ya

Enkripsi dinonaktifkan

bmcpfsDataflow.dataType

Tentukan tipe data yang disinkronkan:

  • metadata: Sinkronkan hanya metadata file.

    Dengan sinkronisasi metadata saja, data aktual 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 yang mereferensikan CPFS for Lingjun, lalu buat PVC dan referensikan OSSVP yang telah dibuat sebelumnya menggunakan 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 CPFS FileSet dan data secara otomatis dibersihkan setelah penghapusan PVC
reclaimPolicy: Delete
# Direkomendasikan: Atur ke Immediate untuk memulai prefill data segera setelah pembuatan PVC
volumeBindingMode: Immediate

Setiap volume dinamis yang dibuat melalui StorageClass ini secara otomatis membuat Fileset di backend CPFS for Lingjun. Dengan membuat resource OSSVP berbeda saat membuat OSSVolumePopulator, Anda dapat memprefill dataset OSS berbeda ke volume dinamis berbeda menggunakan 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 mengeksekusi tugas alur data dari OSS ke CPFS for Lingjun setelah pembuatan PVC.

4. Verifikasi status prefill data

Periksa progres alur data: Selama pengisian, status PVC tetap Pending dan berubah menjadi Bound setelah selesai.

Untuk mode bmcpfs-dataflow, Anda juga dapat memeriksa progres alur data CPFS for Lingjun secara real-time menggunakan perintah berikut.

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 menjadi Bound, buat workload yang memasang PVC ini.

Contoh ini menggunakan resource GPU. Untuk verifikasi saja, buat pod CPU dan gunakan kubectl exec untuk masuk ke kontainer dan 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 menyelesaikan tugas pelatihan atau inferensi AI, segera lepaskan volume bersama CPFS for Lingjun dan workload terkait yang dibuat untuknya.

Resource yang perlu dilepaskan:

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

  • PVC yang digunakan untuk prefill data

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

Prosedur pembersihan:

  1. Hapus workload

    Hapus StatefulSet yang menggunakan volume untuk melepaskan PVC.

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

    Karena StorageClass mengatur reclaimPolicy: Delete, tindakan ini secara otomatis memicu penghapusan FileSet CPFS backend, melepaskan ruang penyimpanan dan menghentikan penagihan.

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

    • Verifikasi sistem file CPFS for Lingjun: Buka Konsol NAS, pilih File System > File System List, dan pastikan FileSet yang terkait dengan PVC ini telah dihapus serta kapasitas yang digunakan sistem file telah berkurang.

    • Verifikasi data sumber OSS: Operasi ini tidak memengaruhi data sumber OSS. Untuk memverifikasi, buka Konsol OSS dan pastikan dataset tetap utuh.

Skenario 2: Prefetch data ke volume cloud disk terisolasi

Solusi ini berlaku untuk alur kerja pemrosesan batch. Menggunakan Argo Workflows, solusi ini secara dinamis membuat dan memanaskan cloud disk independen untuk setiap tugas, mencapai isolasi dan elastisitas data.

Persiapan

  • Aktifkan VolumePopulatorPodHandler di storage-operator.

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

    Tentang izin RBAC yang dikonfigurasi secara otomatis

    • Berikan izin operasi pod kepada storage-operator di namespace ack-volume-populator

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

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

    Perluas untuk melihat langkah-langkah detail

    1. Masuk ke Konsol Manajemen Layanan Kontainer . Di panel navigasi sebelah kiri, klik Clusters.

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

    3. Di halaman Component Management, temukan Argo Workflows dan ikuti petunjuk di layar untuk menginstal komponen.

      Setelah instalasi selesai, pilih Applications > Helm di panel navigasi sebelah kiri. Komponen telah diinstal jika Deployed ditampilkan di kolom Status untuk ack-workflow.

  • Contoh ini menggunakan komputasi arsitektur tanpa server (ECI) untuk menjalankan tugas prefill data dan alur kerja, sehingga Anda juga harus menginstal komponen ack-virtual-node. Jika Anda menggunakan komputasi non-arsitektur tanpa server untuk verifikasi, hapus label terkait alibabacloud.com/eci: "true" dari resource.

1. Berikan otorisasi akses OSS untuk tugas prefill data

Dalam mode generic, tugas prefill data dijalankan sebagai pod sementara di namespace ack-volume-populator. Anda harus memberikan izin kepada pod ini untuk mengakses bucket OSS yang berisi data sumber.

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

  • Metode AccessKey: Menyimpan kredensial statis jangka panjang dalam Secret. Konfigurasi sederhana tetapi kurang aman.

Metode RRSA

Masuk ke Konsol Manajemen Layanan Kontainer . Di panel navigasi sebelah kiri, klik Clusters.

2. Buat peran RAM dan berikan izin

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

Perluas untuk melihat langkah-langkah

  1. Buat peran RAM.

    1. Buka halaman RAM console - Create Role, pilih Trust Entity Type sebagai Identity Provider, lalu klik Switch Editor untuk masuk ke halaman Visual Editor.

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

      Konfigurasi utama sebagai berikut. Biarkan parameter lain pada nilai 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 manual oidc:sub.

      • Kunci Kondisi: Pilih oidc:sub.

      • Operator: Pilih StringEquals.

      • Nilai Kondisi: 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 Script Editor, lalu konfigurasikan skrip kebijakan sesuai petunjuk.

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

    Perluas untuk melihat 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 bagian AccessKey, klik Create AccessKey.

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

Metode AccessKey

  1. Buat pengguna RAM (lewati langkah ini jika Anda sudah memilikinya). Buka halaman Buat Pengguna di Konsol RAM. Ikuti petunjuk di layar untuk membuat pengguna RAM. Tetapkan 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, alihkan ke Script Editor, dan konfigurasikan skrip kebijakan sesuai petunjuk.

    Perluas untuk melihat 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. Berikan kebijakan kepada pengguna RAM.

    1. Masuk ke halaman Users di konsol RAM. Pada kolom Actions untuk pengguna yang dituju, klik Attach Policy.

    2. Di bagian Access Policy, cari dan pilih kebijakan yang telah Anda buat, lalu tambahkan izin tersebut.

  4. Buat AccessKey untuk pengguna RAM untuk disimpan sebagai Secret untuk prefill data.

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

    2. Ikuti petunjuk untuk membuat AccessKey di kotak dialog dan simpan dengan aman ID AccessKey dan Rahasia 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
      # Tetap sebagai ack-volume-populator
      namespace: ack-volume-populator
    stringData:
      # Ganti dengan ID AccessKey yang diperoleh sebelumnya
      accessKeyId: <your-AccessKey-ID>
      # Ganti dengan Rahasia AccessKey yang diperoleh sebelumnya
      accessKeySecret: <your-AccessKey-Secret>

2. Buat OSSVolumePopulator (OSSVP)

Buat resource OSSVolumePopulator di namespace yang sama dengan aplikasi dan PVC Anda untuk mendefinisikan sumber data dan menentukan mode sebagai generic beserta metode 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

Deskripsi parameter:

Nama Parameter

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

Alamat Titik akhir layanan OSS.

Tidak

N/A

path

Awalan path dalam bucket OSS, seperti /data/.

Ya

/

mode

Mode operasi. Opsi:

  • generic (default): Mode 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 khusus untuk volume CPFS for Lingjun. Menggunakan alur data native untuk efisiensi lebih tinggi tanpa mengonsumsi resource komputasi kluster.

  • auto: Secara otomatis memilih mode terbaik berdasarkan jenis penyimpanan target. Namun, biasanya kembali ke mode generic. Tentukan secara manual bmcpfs-dataflow jika diperlukan.

Ya

auto

generic.labels

Tambahkan label ke pod tugas pengisian data untuk penjadwalan ke ECI.

Ya

N/A

generic.annotations

Tambahkan anotasi ke pod tugas pengisian data untuk mengonfigurasi spesifikasi ECI.

Ya

N/A

generic.secretRef

Nama Secret yang menyimpan AccessKey. Pilih salah satu antara 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, dan dapatkan dari tab Basic Information di bawah RRSA OIDC.

Diperlukan saat menggunakan RRSA

N/A

generic.affinity

Konfigurasikan afinitas untuk pod tugas pengisian data agar dijadwalkan ke node tertentu.

Ya

N/A

generic.tolerations

Konfigurasikan toleransi untuk pod tugas pengisian data.

Ya

N/A

generic.throughput

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

Berbeda dengan bmcpfs-dataflow, kinerja generic dibatasi oleh resource node (jaringan, CPU) dan kemampuan tulis penyimpanan. Pengaturan ini merupakan batas atas terutama untuk mencegah tugas prefilling mengonsumsi resource kluster berlebihan.

Ya

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

3. Siapkan StorageClass

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

  • Contoh ini menggunakan alicloud-disk-essd, yang memiliki reclaimPolicy diatur ke Delete dan volumeBindingMode diatur ke Immediate, cocok untuk skenario yang menggunakan komputasi arsitektur tanpa server di mana kesadaran zona tidak diperlukan.

  • Jika Anda menjalankan alur kerja pada komputasi non-arsitektur tanpa server, gunakan StorageClass dengan volumeBindingMode diatur ke WaitForFirstConsumer (seperti alicloud-disk-topology-alltype) untuk memastikan cloud disk dan pod aplikasi dibuat di zona yang sama, menghindari kegagalan penjadwalan akibat ketidaksesuaian zona.

4. Buat Argo Workflow

Contoh Workflow berikut menggunakan ephemeral volumeClaimTemplate untuk secara dinamis membuat cloud disk independen dengan data awal yang telah diprefill 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 dalam Workflow
  volumes:
    - name: scratch-volume
      # Deklarasikan sebagai volume sementara, secara otomatis dihapus 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 started, ID: {{inputs.parameters.index}}"
            echo "Creating a new log file..."
            touch /scratch-volume/"{{inputs.parameters.index}}-logs"
            echo "Listing contents from the disk populated by OSSVP:"
            ls /scratch-volume
            echo "Subtask completed, 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 mengonfirmasi pembacaan data yang telah diprefill berhasil.

Di lingkungan produksi, Anda juga dapat menggunakan fitur 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 started, ID: 1
Creating a new log file...
Listing contents from the disk populated by OSSVP:
1-logs
lost+found
results-2025-04-16T07:48:00Z
...
Subtask completed, ID: 1

Analisis hasil:

  • 1-logs: File yang baru ditulis oleh tugas, memverifikasi bahwa volume bersifat baca-tulis dan penyimpanan terisolasi antar tugas paralel.

  • results-2025-04-16T07:48:00Z dan file serupa: Data yang diprefill dari OSS ke cloud disk, mengonfirmasi bahwa fitur prefilling berfungsi dengan benar.

  • lost+found: Direktori yang dihasilkan secara otomatis setelah pemformatan sistem file. Abaikan.

Panduan pembersihan resource

Setelah menyelesaikan tugas pemrosesan batch, segera lepaskan volume cloud disk terisolasi dan alur kerja terkait yang dibuat secara dinamis oleh Argo Workflow.

Resource yang perlu dilepaskan:

  • Instans Argo Workflow

  • PVC sementara yang dibuat secara otomatis oleh Workflow

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

Alur pelepasan:

  1. Hapus Argo Workflow:

    Untuk skenario ini, biasanya cukup hapus resource Workflow. Karena workflow menggunakan klaim volume ephemeral, menghapus Workflow secara otomatis menghapus semua PVC yang dibuatnya. StorageClass mengatur reclaimPolicy: Delete, yang selanjutnya memicu penghapusan otomatis cloud disk backend, melepaskan resource dan menghentikan penagihan.

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

    • Verifikasi PVC: Jalankan kubectl -n argo get pvc untuk mengonfirmasi semua PVC terkait workflow ini telah dihapus.

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

    • Verifikasi data sumber OSS: Operasi ini tidak memengaruhi data sumber OSS. Untuk memverifikasi, buka Konsol OSS dan pastikan dataset tetap utuh.

Rekomendasi lingkungan produksi

  • Manajemen biaya dan resource:

    • Atur pengklaiman ulang resource otomatis: Konfigurasikan reclaimPolicy: Delete untuk StorageClass yang digunakan untuk membuat volume secara dinamis. Ini memastikan resource penyimpanan berkinerja tinggi secara otomatis dibersihkan setelah tugas selesai.

    • Optimalkan biaya pengisian data (generic mode): Dalam mode generic, pengisian data mengonsumsi resource komputasi. Dengan mengonfigurasi affinity dan tolerations di OSSVolumePopulator, Anda dapat menjadwalkan pod tugas sementara ke komputasi arsitektur tanpa server berbiaya lebih rendah (termasuk ACS, ECI) atau spot instans.

    • Rencanakan kapasitas penyimpanan: Kapasitas storage yang diminta saat membuat PVC harus melebihi ukuran data sumber. Jika tidak, pengisian data gagal karena ruang tidak mencukupi.

  • Kinerja dan stabilitas:

    • Penyelarasan zona cloud disk: Cloud disk adalah resource berlingkup zona. Saat menggunakan node ECS, atur StorageClass volumeBindingMode ke WaitForFirstConsumer untuk memastikan cloud disk dan pod aplikasi selalu dibuat di zona yang sama, menghindari kegagalan pemasangan akibat penjadwalan lintas zona.

    • Seimbangkan mode prefill CPFS for Lingjun: Jika Anda memprioritaskan kesiapan PV cepat dan dapat mentolerir latensi pada pembacaan file pertama, pilih dataType: metadata. Jika workload Anda memerlukan kinerja baca pertama yang tinggi dan prefilling data penuh, pilih dataType: metadataAndData.

    • Pemantauan status: Gunakan kubectl describe ossvp <name> untuk memantau status dan event tugas prefill data guna troubleshooting cepat.

  • Keamanan dan izin:

    • Gunakan RRSA untuk otorisasi aman: Dalam mode generic, saat memberikan izin akses OSS kepada pod tugas pengisian data, lebih baik gunakan metode RRSA untuk menghindari risiko keamanan akibat kebocoran AccessKey.

Informasi penagihan

Fitur ini melibatkan biaya berikut:

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

  • Biaya penyimpanan OSS: Biaya penyimpanan untuk data sumber di OSS.

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

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

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

FAQ

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

Tidak. Prefilling data adalah operasi satu kali selama pembuatan volume. Setelah volume dibuat dan diisi, isinya terpisah dari data sumber OSS. Perubahan selanjutnya pada OSS tidak akan disinkronkan ke volume yang telah dibuat.

Mengapa PVC saya tetap dalam status Pending?

Pending adalah normal selama prefilling data. Jika tetap Pending dalam waktu lama, troubleshooting sebagai berikut.

  1. kubectl describe pvc <pvc-name> -n <namespace>: Periksa Event PVC untuk pesan error terkait Populator.

  2. kubectl describe ossvp <ossvp-name> -n <namespace>: Periksa Status dan Event OSSVP untuk status, progres, atau alasan kegagalan tugas pengisian.

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