All Products
Search
Document Center

Container Service for Kubernetes:Gunakan volume dinamis CPFS for Lingjun

Last Updated:Jun 24, 2026

Gunakan volume dinamis untuk menyediakan penyimpanan CPFS for Lingjun sesuai permintaan tanpa perlu mengelola PV secara manual. Beberapa aplikasi dapat membaca dan menulis secara paralel, sehingga cocok untuk beban kerja pelatihan AI dan analitik data besar yang perlu berbagi kode, file konfigurasi, serta hasil komputasi.

Batasan

Pelanggaran terhadap batasan ini dapat menyebabkan kegagalan pemasangan (mount) atau kondisi kluster yang tidak dapat dipulihkan.

  • Wajib berada di hpn-zone yang sama untuk pemasangan VSC: Node pod harus berada di hpn-zone yang sama dengan sistem file CPFS for Lingjun.

  • Inisialisasi node: Node Lingjun harus dikaitkan dengan sistem file CPFS for Lingjun saat inisialisasi. Mengabaikan langkah ini menyebabkan kegagalan mount CSI.

  • Satu sistem file per pod: Jangan memasang beberapa volume dari sistem file CPFS for Lingjun yang sama dalam satu pod (misalnya, beberapa PV dengan bmcpfsId yang sama). Protokol native tidak mendukung pemasangan sistem file yang sama berkali-kali dalam satu pod, bahkan ke subdirektori yang berbeda sekalipun.

  • Kosongkan pod sebelum mengambil node offline: Kosongkan semua pod dari node Lingjun yang gagal sebelum mengambilnya offline. Mengabaikan langkah ini meninggalkan sumber daya pod yang tidak dapat dipulihkan dan metadata kluster yang tidak konsisten.

Prasyarat

Pastikan Anda telah memiliki:

  • Versi kluster 1.26 atau lebih baru (panduan peningkatan).

  • Node yang menjalankan Alibaba Cloud Linux 3.

  • Add-on penyimpanan berikut pada versi minimumnya. Instal atau tingkatkan melalui halaman Add-ons.

    Komponen Versi minimum
    Add-on CSI (csi-plugin dan csi-provisioner) v1.33.1
    add-on cnfs-nas-daemon 0.1.2
    add-on bmcpfs-csi (bmcpfs-csi-controller pada lapisan kontrol yang dikelola ACK dan bmcpfs-csi-node yang diterapkan sebagai DaemonSet pada node kluster) 1.35.1

Konfigurasikan sumber daya cnfs-nas-daemon

cnfs-nas-daemon mengelola proses Elastic File Client (EFC) dan secara langsung memengaruhi kinerja penyimpanan. Konfigurasikan sumber dayanya melalui halaman Add-ons:

  • CPU: 0,5 core per 1 Gb/s bandwidth, ditambah 1 core untuk manajemen metadata. Contoh: NIC 100 Gb/s → 100 × 0,5 + 1 = 51 core.

  • Memori: 15% dari total memori node. CPFS for Lingjun menggunakan FUSE, sehingga caching data dan metadata file sama-sama mengonsumsi memori.

Sesuaikan batas sumber daya berdasarkan beban kerja aktual.

Penting

cnfs-nas-daemon menggunakan strategi pembaruan OnDelete. Setelah mengubah pengaturan di halaman Add-ons, hapus secara manual pod cnfs-nas-daemon di setiap node agar perubahan diterapkan. Lakukan hal ini selama jam sepi.

  • Node tanpa dukungan hot upgrade: Menyebabkan interupsi perangkat keras. Pod aplikasi gagal dan harus dihapus secara manual, lalu mulai ulang dan pulih secara otomatis.

  • Node dengan dukungan hot upgrade: Pod pulih secara otomatis. Hot upgrade memerlukan: kernel 5.10.134-18+, bmcpfs-csi-controller dan bmcpfs-csi-plugin 1.35.1+, serta cnfs-nas-daemon versi 0.1.9-compatible.1+.

Langkah 1: Buat sistem file CPFS

  1. Buat sistem file CPFS for Lingjun dan catat ID sistem filenya.

  2. (Opsional) Untuk memasang pada node non-Lingjun, buat titik pemasangan VPC di VPC yang sama dengan node kluster Anda. Catat nama domain titik pemasangan tersebut (format: cpfs-*-vpc-*.<Region>.cpfs.aliyuncs.com).

    Jika semua pod berjalan di node Lingjun, pemasangan VSC (Virtual Storage Controller) berlaku secara default. Lewati langkah ini.

Tinjau batasan CPFS for Lingjun sebelum melanjutkan.

Langkah 2: Buat StorageClass

StorageClass menentukan parameter provisioning seperti ID sistem file dan kebijakan reclaim.

  1. Buat sc.yaml:

    Parameter Wajib Deskripsi
    bmcpfsId Ya ID sistem file CPFS for Lingjun. Format: bmcpfs-xxxxxxxxx atau cpfs-xxxxxxxxx.
    path Tidak Subdirektori dalam sistem file. Volume dipasang di {path}/{volumeName}/. Nilai default: /{volumeName}/.
    allowVolumeExpansion Tidak Parameter cadangan. Versi saat ini tidak mendukung ekspansi dinamis.
    reclaimPolicy Tidak Delete (default): menghapus fileset backend saat PVC dihapus. Retain: menyimpan fileset; perlu pembersihan manual. Gunakan Retain di lingkungan produksi.
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-bmcpfs-test
    provisioner: bmcpfsplugin.csi.alibabacloud.com
    parameters:
      # Wajib: ID sistem file CPFS for Lingjun (format: bmcpfs-xxxxxxxxx atau cpfs-xxxxxxxxx)
      bmcpfsId: bmcpfs-29000z8xz3lf5nj*****
      # Opsional: subdirektori dalam sistem file; volume dibuat di bawah {path}/{volumeName}/
      # path: "/shared"
    # Parameter cadangan — versi saat ini tidak mendukung ekspansi dinamis
    allowVolumeExpansion: true
    # Delete (default): secara otomatis menghapus fileset saat PVC dihapus
    # Retain (disarankan untuk produksi): menyimpan fileset; Anda harus membersihkan secara manual
    reclaimPolicy: Delete
  2. Terapkan StorageClass:

    kubectl apply -f sc.yaml

    Output yang diharapkan:

    storageclass.storage.k8s.io/alicloud-bmcpfs-test created

Langkah 3: Buat PVC

PVC mereferensikan StorageClass untuk meminta penyimpanan yang disediakan secara dinamis.

  1. Buat pvc.yaml:

    Parameter Deskripsi
    accessModes ReadWriteMany saja. Memungkinkan akses multi-pod secara konkuren.
    storage Kapasitas penyimpanan yang diminta. Mendukung satuan seperti Gi dan Ti.
    volumeMode Hanya Filesystem yang didukung.
    storageClassName Nama StorageClass. Memicu pembuatan volume dinamis.
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: bmcpfs-vsc
      namespace: default
    spec:
      accessModes:
        - ReadWriteMany  # Mendukung pembacaan dan penulisan konkuren di beberapa pod
      resources:
        requests:
          storage: 10Ti  # Mendukung penyimpanan berkapasitas besar (tingkat Ti)
      volumeMode: Filesystem  # Hanya Filesystem yang didukung
      storageClassName: alicloud-bmcpfs-test  # Harus sesuai dengan StorageClass yang dibuat di Langkah 2
  2. Terapkan PVC:

    kubectl apply -f pvc.yaml
  3. Verifikasi bahwa PVC telah terikat (bound):

    kubectl get pvc bmcpfs-vsc -n default

    Output yang diharapkan:

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
    bmcpfs-vsc   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   10Ti       RWX            alicloud-bmcpfs-test   30s

    Saat STATUS bernilai Bound, PV dibuat secara otomatis. Konfirmasi provisioning:

    kubectl describe pvc bmcpfs-vsc -n default

    Periksa Events untuk pesan Provisioning succeeded.

Langkah 4: Terapkan workload dan pasang PVC

Penyebaran (Deployment) berikut menjalankan tiga replika yang berbagi satu volume CPFS for Lingjun.

  1. Buat deploy.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cpfs-shared-example
    spec:
      replicas: 3  # Tiga replika memverifikasi bahwa penyimpanan bersama berfungsi di beberapa pod
      selector:
        matchLabels:
          app: cpfs-shared-app
      template:
        metadata:
          labels:
            app: cpfs-shared-app
        spec:
          tolerations:
            - key: node-role.alibabacloud.com/lingjun
              operator: Exists
              effect: NoSchedule
          # Opsional: untuk mematok semua pod ke node tertentu, hapus komentar dan atur nama node
          # nodeName: cn-hangzhou.10.XX.XX.226
          containers:
          - name: app-container
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
              - name: pvc-cpfs
                mountPath: /data  # Volume bersama dipasang di /data di dalam kontainer
            lifecycle:
              postStart:
                exec:
                  command:
                    - /bin/sh
                    - -c
                    - >
                      echo "Data written by $(hostname)" > /data/$(hostname).txt &&
                      echo "Deployment is running, check shared data in /data." &&
                      sleep 3600
          volumes:
            - name: pvc-cpfs
              persistentVolumeClaim:
                claimName: bmcpfs-vsc  # Merujuk ke PVC yang dibuat di Langkah 3
  2. Terapkan Penyebaran:

    kubectl apply -f deploy.yaml

    Output yang diharapkan:

    deployment.apps/cpfs-shared-example created

Bersihkan sumber daya

Hapus sumber daya dalam urutan berikut untuk menghindari biaya tak terduga dan menjaga keamanan data.

  1. Hapus workload — Hentikan semua aplikasi yang menggunakan PVC. Hal ini akan melepas (unmount) volume.

    kubectl delete deployment <your-deployment-name>
  2. Hapus PVC — Hasilnya bergantung pada reclaimPolicy StorageClass:

    • Retain (disarankan): Fileset dan data CPFS for Lingjun tetap utuh. Lanjutkan ke Langkah 3 untuk menghapus PV.

    • Delete: Menghapus permanen PV yang terikat dan fileset backend. Tidak dapat dikembalikan.

    kubectl delete pvc <your-pvc-name>
  3. Hapus PV (hanya jika reclaimPolicy bernilai Retain) — Setelah penghapusan PVC, PV masuk ke status Released. Hapus PV untuk menghapus sumber daya Kubernetes. Data backend tidak terpengaruh.

    kubectl delete pv <your-pv-name>
  4. (Opsional) Hapus StorageClass — Hapus jika tidak lagi diperlukan. Volume yang sudah ada tidak terpengaruh.

    kubectl delete sc <your-sc-name>
  5. Hapus sistem file CPFS for Lingjun — Menghapus permanen semua data, termasuk data yang dipertahankan oleh kebijakan Retain. Pastikan tidak ada dependensi tersisa, lalu hapus sistem file.

Pemecahan Masalah

PVC tetap dalam status Pending

PVC yang terjebak dalam status Pending berarti provisioning gagal. Event PVC biasanya mengidentifikasi penyebabnya.

kubectl describe pvc <your-pvc-name> -n <your-namespace>

Periksa Events untuk peringatan. Penyebab umum:

  • StorageClass not found: storageClassName salah atau StorageClass tidak ada.

  • provisioning failed atau failed to create fileset: Masalah penyimpanan backend. Lanjutkan ke bawah.

Jika event menunjukkan masalah konfigurasi, periksa StorageClass dan verifikasi pendaftaran driver CSI:

# Periksa konfigurasi StorageClass
kubectl get storageclass <your-sc-name> -o yaml

# Verifikasi driver CSI telah terdaftar
kubectl get csidriver bmcpfsplugin.csi.alibabacloud.com

Pastikan bahwa:

  • provisioner sesuai dengan bmcpfsplugin.csi.alibabacloud.com.

  • bmcpfsId benar dan sistem file tersebut ada.

  • Jika perintah get csidriver tidak menghasilkan output, driver belum terinstal. Instal bmcpfs-csi-controller, bmcpfs-csi-node, dan cnfs-nas-daemon dari halaman Add-ons.

Pod tetap dalam status ContainerCreating atau MountVolume.Setup failed

Pod telah mencapai node tetapi pemasangan volumenya gagal. Ikuti langkah-langkah berikut untuk mengidentifikasi penyebabnya.

  1. Periksa event pod:

    kubectl describe pod <pod-name> -n <your-namespace>

    Periksa Events untuk pesan Warning seperti FailedMount atau MountVolume.Setup failed.

  2. Pastikan PVC telah terikat (bound).

    kubectl get pvc <your-pvc-name>

    STATUS harus bernilai Bound. Jika bernilai Pending, lihat PVC tetap dalam status Pending.

  3. Jika sudah terikat, periksa log plugin CSI di sisi node:

    kubectl get pods -n kube-system -l app.kubernetes.io/name=bmcpfs-csi-driver \
      --field-selector spec.nodeName=<nodeName> \
      -o name | xargs kubectl logs -n kube-system -c csi-plugin

    Log ini menampilkan error konektivitas jaringan, izin titik pemasangan, dan error I/O.