All Products
Search
Document Center

Container Service for Kubernetes:Gunakan CNFS untuk mengelola volume dinamis CPFS tujuan umum

Last Updated:Apr 03, 2026

ACK memungkinkan Anda memasang sistem file CPFS tujuan umum sebagai volume dinamis menggunakan CNFS. Setelah StorageClass dikonfigurasi, setiap workload secara otomatis mendapatkan volume persisten (PV) independen yang terisolasi datanya, sehingga tidak perlu lagi melakukan manajemen penyimpanan secara manual.

Alur kerja

Saat menggunakan volume dinamis, sistem secara otomatis menyediakan volume persisten (PV) berdasarkan StorageClass yang ditentukan setelah aplikasi membuat klaim volume persisten (PVC). Metode ini menghilangkan kebutuhan provisioning awal dan mendukung ekspansi volume otomatis.

Gambar berikut menunjukkan alur kerja pemasangan volume dinamis CPFS di dalam kluster.

  1. Buat objek CNFS: Daftarkan sistem file CPFS tujuan umum yang sudah ada ke dalam kluster Anda.

  2. Buat StorageClass: Definisikan templat untuk provisioning volume dinamis, seperti kebijakan reclaim dan opsi pemasangan, serta referensikan objek CNFS sebagai backend-nya.

  3. Buat aplikasi: Buat PVC yang menentukan StorageClass tersebut. Sistem secara otomatis membuat PV, mengikatnya ke PVC, lalu membuat pod dan memasang volumenya.

Prasyarat

  • Pastikan komponen Anda memenuhi persyaratan versi.

    Untuk meningkatkan kluster Anda, lihat Upgrade an ACK cluster.

    1.26 dan yang lebih baru

    • Pastikan versi komponen CSI adalah v1.32.2-757e24b-aliyun atau yang lebih baru.

      Untuk meningkatkan komponen CSI, lihat Manage CSI components.
    • Komponen cnfs-nas-daemon telah diinstal, dan Anda telah menambahkan AlinasMountProxy=true ke FeatureGate komponen csi-plugin untuk mengaktifkan cnfs-nas-daemon. Untuk informasi selengkapnya, lihat Manage the cnfs-nas-daemon component.

    Lebih awal dari 1.26

    • Pastikan versi komponen CSI adalah v1.24.11-5221f79-aliyun atau yang lebih baru.

      Untuk meningkatkan komponen CSI, lihat Manage CSI components.
    • Instal dependensi klien dan restart komponen csi-plugin.

      Expand to view the steps

      Konfigurasikan ConfigMap csi-plugin agar secara otomatis menginstal dependensi klien saat startup.

      1. Periksa apakah ConfigMap bernama csi-plugin sudah ada.

        kubectl -n kube-system get cm csi-plugin

        Jika ConfigMap sudah ada

        Jika ConfigMap bernama csi-plugin sudah ada, perbarui ConfigMap tersebut.

        kubectl edit configmap csi-plugin -n kube-system

        Tambahkan bidang cnfs-client-properties di bawah data dan atur cpfs-efc=true untuk menginstal dependensi klien.

        ...
        data:
          cnfs-client-properties: |
            cpfs-efc=true   # Install client dependencies when csi-plugin starts.

        Jika ConfigMap belum ada

        Jika tidak ada ConfigMap bernama csi-plugin, buat satu di namespace kube-system.

        cat <<EOF | kubectl apply -f -
        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: csi-plugin
          namespace: kube-system
        data:
          cnfs-client-properties: |
            cpfs-efc=true   # Install the client dependencies when csi-plugin starts.
        EOF
      2. Restart komponen csi-plugin.

        kubectl -n kube-system rollout restart daemonset csi-plugin
  • Anda telah membuat sistem file CPFS tujuan umum dan layanan protokol yang sesuai di VPC yang sama dengan kluster, serta telah memperoleh alamat titik pemasangan. Untuk informasi selengkapnya, lihat Create a protocol service and obtain a mount target address.

    Untuk kinerja optimal, tempatkan titik pemasangan layanan protokol CPFS dan kluster di vSwitch yang sama.

Batasan

Untuk informasi selengkapnya tentang batasan CPFS, lihat Limits.

Langkah 1: Buat objek CNFS

Buat objek CNFS untuk mendaftarkan sistem file CPFS yang sudah ada ke kluster Anda.

  1. Buat file bernama cnfs.yaml dengan menggunakan templat berikut.

    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    metadata:
      name: cnfs-nfs-cpfs
    spec:
      # Specify the backend storage type as CPFS.
      type: cpfs  
      # Deleting this CNFS object does not delete the backend CPFS file system.
      reclaimPolicy: Retain  
      parameters:
        # The domain name of the mount target for the CPFS protocol service.
        protocolServer: cpfs-xxxx.xxxx.cpfs.aliyuncs.com  
        # Use the NFS client to mount the volume.
        useClient: NFSClient  

    Parameter:

    Parameter

    Deskripsi

    spec.type

    Jenis penyimpanan backend. Atur nilai ini ke cpfs.

    spec.reclaimPolicy

    Kebijakan reclaim. Hanya Retain yang didukung. Pengaturan ini mencegah sistem file CPFS backend dihapus saat objek CNFS dihapus.

    spec.parameters.protocolServer

    spec.parameters.useClient

    Atur ke NFSClient untuk menggunakan klien NFS saat pemasangan.

  2. Buat objek CNFS.

    kubectl apply -f cnfs.yaml
  3. Periksa status objek CNFS dan pastikan statusnya Available.

    kubectl get cnfs cnfs-nfs-cpfs -o jsonpath='{.status.status}'

Langkah 2: Buat StorageClass

Buat StorageClass sebagai templat untuk provisioning dinamis dan referensikan objek CNFS yang telah Anda buat.

  1. Buat file bernama sc.yaml dengan menggunakan templat berikut.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: cnfs-nfs-cpfs-sc
    # Mount options.
    mountOptions:  
      - nolock,tcp,noresvport
      - vers=3
    parameters:
      # Create a subdirectory-based PV.
      volumeAs: subpath  
      # Reference the CNFS object created earlier.
      containerNetworkFileSystem: "cnfs-nfs-cpfs"  
      # The export path of the General-purpose CPFS protocol service.
      path: "/share"  
      # Data handling policy when a PVC is deleted. `true` archives data instead of deleting it.
      archiveOnDelete: "true"  
    provisioner: nasplugin.csi.alibabacloud.com
    # PV reclaim policy. Only Retain is supported in this example.
    reclaimPolicy: Retain  
    # Allow volume expansion.
    allowVolumeExpansion: true  

    Parameter:

    Parameter

    Deskripsi

    mountOptions

    Opsi pemasangan. Anda dapat menggunakan nilai default yang ditunjukkan pada contoh.

    parameters.volumeAs

    • subpath: Mode subpath. Setiap PV sesuai dengan subdirektori independen pada sistem file CPFS, memberikan isolasi data.

    • sharepath: Mode sharepath. Semua PV yang dibuat dari StorageClass ini berbagi direktori yang sama pada sistem file CPFS.

    parameters.containerNetworkFileSystem

    Objek CNFS yang direferensikan.

    parameters.path

    Jalur ekspor layanan protokol CPFS tujuan umum, seperti /share. Anda juga dapat menentukan subdirektori, seperti /share/dir.

    Saat ini, hanya direktori biasa yang didukung. Filesets tidak didukung.

    parameters.archiveOnDelete

    Parameter ini hanya berlaku jika volumeAs diatur ke subpath dan reclaimPolicy diatur ke Delete.
    CPFS tujuan umum adalah layanan penyimpanan bersama. Parameter ini memberikan konfirmasi kedua sebelum penghapusan.

    Mengontrol cara penanganan data subdirektori saat PVC dihapus.

    • true (default): Subdirektori diarsipkan dan diganti namanya menjadi archived-{pvName}.{timestamp} alih-alih dihapus. Anda dapat memulihkan data secara manual.

    • false: Menghapus permanen subdirektori dan semua file di dalamnya. Data ini tidak dapat dipulihkan.

      Operasi ini hanya menghapus subdirektori CPFS dan file-file di dalamnya, bukan sistem file CPFS itu sendiri. Untuk menghapus sistem file CPFS, lihat Delete a file system.

    reclaimPolicy

    Jika csi-provisioner adalah managed component, versinya harus v1.34.1 atau yang lebih baru. Tidak ada batasan versi untuk komponen unmanaged.
    Parameter ini hanya berlaku jika volumeAs diatur ke subpath.

    Kebijakan reclaim untuk PV. Ini mengontrol cara penanganan resource setelah PVC dihapus.

    • Delete: Secara otomatis melepaskan PV saat PVC dihapus. Parameter archiveOnDelete kemudian menentukan apakah data subdirektori backend juga dihapus.

    • Retain: Saat PVC dihapus, PV dipertahankan dan data backend tidak terpengaruh. Anda harus membersihkan resource secara manual. Opsi ini cocok untuk skenario dengan persyaratan keamanan data tinggi.

    allowVolumeExpansion

    Jika parameter ini diaktifkan, volume CPFS dapat diperluas secara otomatis.

  2. Buat StorageClass.

    kubectl apply -f sc.yaml
  3. Periksa apakah StorageClass berhasil dibuat.

    kubectl get sc cnfs-nfs-cpfs-sc

    Output yang diharapkan:

    NAME               PROVISIONER                      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    cnfs-nfs-cpfs-sc   nasplugin.csi.alibabacloud.com   Retain          Immediate           true                   9s

Langkah 3: Buat aplikasi

Buat workload dan tentukan StorageClass yang telah Anda buat di bagian volumeClaimTemplates-nya.

  1. Buat file bernama sts.yaml dengan menggunakan templat berikut.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: cnfs-nfs-cpfs-sts
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
            - name: pvc
              # Mount the storage volume to the /data directory in the container.
              mountPath: /data  
      # Define a PVC template. The StatefulSet controller dynamically creates a PVC for each pod.
      volumeClaimTemplates:
      - metadata:
          name: pvc
        spec:
          accessModes: [ "ReadWriteOnce" ]
          # Reference the StorageClass created earlier.
          storageClassName: "cnfs-nfs-cpfs-sc"     
          resources:
            requests:
              storage: 50Gi
  2. Buat aplikasi.

    kubectl apply -f sts.yaml
  3. Periksa apakah pod berada dalam status Running.

    kubectl get pod | grep cnfs-nfs-cpfs-sts

    Output yang diharapkan:

    cnfs-nfs-cpfs-sts-0   1/1     Running   0          11s
    cnfs-nfs-cpfs-sts-1   1/1     Running   0          9s
  4. Konfirmasi bahwa pod telah memasang volume penyimpanan CPFS.

    kubectl exec cnfs-nfs-cpfs-sts-0 -- mount | grep nfs

    Output berikut menunjukkan bahwa CNFS berhasil memasang sistem file CPFS dengan menggunakan klien NFS.

    cpfs-********-********.cn-shanghai.cpfs.aliyuncs.com:/share/nas-804e8cb1-2355-4026-87fc-ee061e14f5f9 on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,port=30000,timeo=600,retrans=2,sec=sys,mountaddr=127.XX.XX.255,mountvers=3,mountport=30000,mountproto=tcp,local_lock=all,addr=127.XX.XX.255)

Langkah 4: Verifikasi hasil

Setelah aplikasi dibuat, sistem secara otomatis menyediakan dan memasang volume.

Verifikasi provisioning otomatis

Periksa status PVC untuk memastikan dua PVC telah dibuat secara otomatis dan diikat ke PV yang dihasilkan secara dinamis.

kubectl get pvc -l app=nginx

Output yang diharapkan:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       VOLUMEATTRIBUTESCLASS   AGE
pvc-cnfs-nfs-cpfs-sts-0   Bound    nas-8d2530eb-fcf9-4ad5-b5f8-bae02a1*****   50Gi       RWO            cnfs-nfs-cpfs-sc   <unset>                 63s
pvc-cnfs-nfs-cpfs-sts-1   Bound    nas-e84cadaf-ce35-4745-8cbb-2a80026*****   50Gi       RWO            cnfs-nfs-cpfs-sc   <unset>                 61s

Verifikasi status pod dan titik pemasangan

Periksa titik pemasangan di dalam kontainer untuk memastikan subdirektori CPFS yang terisolasi berhasil dipasang.

kubectl exec cnfs-nfs-cpfs-sts-0 -- mount | grep /data

Jalur pemasangan pada output yang diharapkan mencakup nama PV yang dihasilkan otomatis (misalnya, nas-804e8cb1-xxxx), yang menunjukkan bahwa subdirektori terisolasi telah dipasang.

cpfs-....aliyuncs.com:/share/nas-804e8cb1-2355-4026-87fc-ee061e1****** on /data type nfs (rw,...)

Verifikasi isolasi volume

Verifikasi bahwa volume dinamis yang dibuat untuk pod berbeda saling terisolasi satu sama lain.

  1. Buat file sementara di cnfs-nfs-cpfs-sts-0.

    kubectl exec cnfs-nfs-cpfs-sts-0 -- touch /data/test.txt
  2. Periksa direktori /data di cnfs-nfs-cpfs-sts-1 untuk memastikan file uji tidak ada.

    kubectl exec cnfs-nfs-cpfs-sts-1 -- ls /data

    Output yang diharapkan tidak berisi file tersebut. Hal ini mengonfirmasi bahwa volume penyimpanan yang dibuat secara dinamis saling terisolasi dan datanya tidak dibagikan.

Praktik terbaik produksi

  • Proteksi data: Atur reclaimPolicy ke Retain dan archiveOnDelete ke true di StorageClass untuk mencegah kehilangan data akibat penghapusan PVC yang tidak disengaja.

Membersihkan sumber daya

Untuk menghindari biaya tak terduga dan memastikan keamanan data, ikuti prosedur berikut untuk melepaskan resource yang tidak lagi Anda perlukan.

  1. Hapus workload

    • Aksi: Hapus semua aplikasi yang menggunakan PVC terkait, seperti StatefulSet. Tindakan ini akan menghentikan pod yang sedang berjalan dan melepas volume penyimpanan.

    • Contoh perintah: kubectl delete statefulset <your-statefulset-name>

  2. Hapus PVC

    • Aksi: Hapus PVC yang terkait dengan aplikasi. Penanganan data backend ditentukan oleh kombinasi volumeAs, reclaimPolicy, dan archiveOnDelete.

      • volumeAs: subpath

        Setiap PVC sesuai dengan subdirektori independen. Perilaku penghapusan adalah sebagai berikut:

        • reclaimPolicy: Retain: PV dipertahankan, dan data di subdirektori CPFS tetap tidak berubah. Anda harus melakukan pembersihan manual.

        • reclaimPolicy: Delete + archiveOnDelete: "true": PV dilepaskan secara otomatis. Subdirektori diarsipkan dan diganti namanya menjadi archived-{pvName}.{timestamp}, dan tidak ada data yang hilang.

        • reclaimPolicy: Delete + archiveOnDelete: "false": Secara otomatis melepaskan PV dan menghapus permanen subdirektori beserta file-file di dalamnya. Data ini tidak dapat dipulihkan. Lakukan dengan hati-hati.

      • volumeAs: sharepath

        Beberapa PVC berbagi direktori yang sama. Menghapus PVC tidak memengaruhi direktori backend atau datanya. Parameter reclaimPolicy dan archiveOnDelete tidak berpengaruh.

      Terlepas dari konfigurasi apa pun, sistem file CPFS itu sendiri tidak dihapus. Untuk menghapus sistem file CPFS, lihat Delete a file system.

    • Contoh perintah: kubectl delete pvc <your-pvc-name>

  3. Hapus resource penyimpanan Kubernetes

    Tindakan ini hanya menghapus definisi resource di dalam kluster. Tidak menghapus sistem file CPFS backend.

    1. Hapus PV

      • Aksi: Jika reclaimPolicy diatur ke Retain, status PV berubah menjadi Released setelah PVC dihapus. Anda kemudian dapat menghapus PV secara manual jika yakin data tidak lagi diperlukan.

      • Contoh perintah: kubectl delete pv <your-pv-name>

    2. Hapus StorageClass

      • Aksi: Jika Anda tidak lagi memerlukan jenis penyimpanan ini, Anda dapat menghapus StorageClass yang sesuai.

      • Contoh perintah: kubectl delete sc <your-storageclass-name>

    3. Hapus objek CNFS

      • Aksi: Jika Anda tidak lagi perlu menggunakan sistem file CPFS dengan kluster, Anda dapat menghapus objek CNFS. Menghapus objek CNFS tidak menghapus sistem file CPFS backend.

      • Contoh perintah: kubectl delete cnfs <your-cnfs-name>