全部产品
Search
文档中心

Container Service for Kubernetes:Pasang NAS melalui klien EFC dengan CNFS

更新时间:Jul 29, 2025

Elastic File Client (EFC) meningkatkan kinerja Penyimpanan File NAS (Network Attached Storage) dengan caching terdistribusi untuk mempercepat akses. EFC mendukung akses data paralel berskala besar dan konkurensi tinggi, menjadikannya ideal untuk aplikasi berbasis kontainer yang intensif data seperti analitik big data, pelatihan AI, dan beban kerja inferensi. Dibandingkan dengan protokol tradisional Network File System (NFS), EFC memberikan peningkatan signifikan dalam kinerja I/O dan latensi lebih rendah. Topik ini menjelaskan cara memasang sistem file NAS menggunakan klien EFC melalui Container Network File System (CNFS).

Ikhtisar EFC

EFC adalah klien POSIX-compliant berbasis ruang pengguna dari Alibaba Cloud yang dibangun di atas Filesystem in Userspace (FUSE). EFC menggantikan klien NFS mode kernel tradisional serta menawarkan peningkatan kinerja, keandalan, dan efisiensi operasional. Kemampuan utamanya meliputi:

  • Akses multi-koneksi

  • Caching metadata dan data

  • Caching baca-saja terdistribusi

  • Pemantauan terintegrasi melalui Managed Service for Prometheus

Dibandingkan dengan klien NFS mode kernel dan klien FUSE open-source lainnya, klien EFC menawarkan keunggulan berikut:

  • Konsistensi data kuat

    Diimplementasikan untuk file dan direktori melalui mekanisme kunci terdistribusi yang sangat konsisten. Memastikan:

    • File yang ditulis segera terlihat oleh klien lain

    • Sinkronisasi instan file baru di semua klien

    • Manajemen data multi-node disederhanakan

  • Caching baca-tulis pada node tunggal

    Mengoptimalkan logika caching FUSE dengan menggunakan sejumlah kecil memori node komputasi untuk menyimpan cache data, memberikan:

    • Throughput ditingkatkan untuk file kecil

    • Lebih dari 50% peningkatan kinerja I/O dibandingkan klien NFS tradisional

  • Caching baca-saja terdistribusi

    Membangun pool cache terdistribusi yang dapat diskalakan otomatis dan bebas O&M menggunakan memori di beberapa node.

  • Pra-ambil file kecil

    Mengidentifikasi dan mempramuat direktori dan file panas secara otomatis untuk mengurangi overhead penarikan data.

  • Peningkatan panas dan failover

    • Pembaruan klien tanpa restart aplikasi

    • Failover otomatis selama kegagalan klien, tanpa gangguan layanan

Prasyarat

Sebelum menggunakan EFC, pastikan hal-hal berikut:

  • Add-on cnfs-nas-daemon terpasang di kluster Anda. Flag AlinasMountProxy=true telah ditambahkan di FeatureGate dari csi-plugin. Untuk detailnya, lihat Kelola cnfs-nas-daemon.

  • OS node adalah Alibaba Cloud Linux 3 atau ContainerOS, dengan versi kernel 5.10.134-17.2 atau lebih baru.

    Penting

    Node yang tidak memenuhi persyaratan ini akan secara otomatis jatuh kembali ke protokol NFS untuk pemasangan.

(Opsional) Terapkan cache terdistribusi CNFS-EFC

Untuk mengaktifkan kemampuan cache terdistribusi EFC, terapkan plugin cache terdistribusi CNFS-EFC.

  1. Buat ConfigMap untuk csi-plugin untuk menerapkan plugin cache terdistribusi CNFS-EFC.

    Setelah ConfigMap diterapkan, sistem secara otomatis menyediakan DaemonSet yang di-cache dan Layanan terkait berdasarkan ConfigMap.

    1. Simpan template YAML berikut sebagai csi-configmap.yaml.

      DaemonSet membuat pod pada node dengan label cache=true. Setiap pod berisi tiga kontainer dan memasang volume tmpfs 15 GiB (berbasis memori). Modifikasi konfigurasi parameter sesuai kebutuhan.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: csi-plugin
        namespace: kube-system
      data:
        nas-efc-cache: |
          enable=true
          container-number=3
          volume-type=memory
          volume-size=15Gi
        node-selector: |
          cache=true

      Parameter

      Deskripsi

      nfs-efc-cache

      enable

      Atur parameter ini ke true untuk mengaktifkan caching terdistribusi.

      container-number

      Jumlah kontainer per pod DaemonSet yang di-cache. Tingkatkan parameter ini ketika terjadi hambatan kinerja cache.

      volume-type

      Media penyimpanan yang digunakan oleh volume EmptyDir yang dipasang ke pod cache.

      • disk

      • memory

      Penting

      Pastikan penggunaan sumber daya pada node tidak memengaruhi beban kerja produksi.

      volume-size

      Ukuran volume yang dialokasikan per pod cache (unit: GiB).

      node-selector

      Label yang digunakan untuk menjadwalkan DaemonSet cache. Jika tidak diatur, DaemonSet berjalan di semua node.

    2. Jalankan perintah berikut untuk menerapkan ConfigMap:

      kubectl apply -f csi-configmap.yaml
  2. Verifikasi status DaemonSet cache terdistribusi:

    kubectl get ds/cnfs-cache-ds -n kube-system -o wide

    Output yang diharapkan:

    NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS                                                            IMAGES                                                                                                                                                                                   SELECTOR
    cnfs-cache-ds   2         2         2       2            2           cache=true      13m   alinas-dadi-container,alinas-dadi-container1,alinas-dadi-container2   registry-cn-hangzhou.ack.aliyuncs.com/acs/nas-cache:20220420,registry-cn-hangzhou.ack.aliyuncs.com/acs/nas-cache:20220420,registry-cn-hangzhou.ack.aliyuncs.com/acs/nas-cache:20220420   app=cnfs-cache-ds

    Dalam output sampel ini, kluster memiliki dua node dengan label cache=true, dan dua pod di DaemonSet berada dalam kondisi siap, menunjukkan bahwa DaemonSet cache terdistribusi telah dimulai.

  3. Verifikasi penemuan layanan untuk Layanan cache terdistribusi:

    kubectl get ep cnfs-cache-ds-service  -n kube-system -o wide

    Output yang diharapkan:

    NAME                    ENDPOINTS                                                              AGE
    cnfs-cache-ds-service   192.168.3.217:6500,192.168.5.247:6500,192.168.3.217:6502 + 3 more...   2d3h

    Output sampel menunjukkan bahwa Layanan telah menemukan titik akhir pod cache backend.

Konfigurasikan CNFS untuk memasang NAS menggunakan klien EFC

  1. Buat CNFS dan tentukan penggunaan klien EFC.

    1. Simpan template YAML berikut sebagai cnfs-efc.yaml.

      Contoh ini menunjukkan pengaktifan klien EFC saat mengonfigurasi sistem file NAS yang ada melalui CNFS. Untuk sistem file NAS baru yang dibuat melalui CNFS, tambahkan useClient: EFCClient di bagian parameters dari sumber daya ContainerNetworkFileSystem untuk mengaktifkan klien EFC. Untuk detailnya, lihat Gunakan CNFS untuk mengelola sistem file NAS (disarankan).

      apiVersion: storage.alibabacloud.com/v1beta1
      kind: ContainerNetworkFileSystem
      metadata:
        name: cnfs-efc-test
      spec:
        description: "cnfs"
        type: nas
        reclaimPolicy: Retain
        parameters:
          server: 17f7e4****-h****.cn-beijing.nas.aliyuncs.com
          useClient: EFCClient

      Parameter

      Deskripsi

      description

      Deskripsi sistem file.

      type

      Tipe volume yang akan dibuat.

      reclaimPolicy

      Kebijakan pengambilalihan. Hanya kebijakan Retain yang didukung. Menghapus CNFS tidak akan menghapus sistem file NAS.

      parameters

      server

      Alamat titik pemasangan. Titik pemasangan harus memenuhi persyaratan berikut:

      • VPC dari titik pemasangan harus sama dengan VPC yang digunakan oleh pod. Jika tidak, pemasangan akan gagal.

      • Kami merekomendasikan menggunakan vSwitch yang sama untuk titik pemasangan dan pod untuk performa optimal.

      • Status titik pemasangan harus Ready.

      Jika titik pemasangan yang ada tidak memenuhi persyaratan ini, buat yang baru.

      useClient

      Atur parameter ini ke EFCClient untuk mengaktifkan klien EFC.

    2. Jalankan perintah berikut untuk membuat CNFS:

      kubectl create -f cnfs-efc.yaml
  2. Gunakan CNFS untuk membuat volume:

    kubectl create -f cnfs-pv-pvc.yaml

    Simpan template YAML berikut sebagai cnfs-pv-pvc.yaml.

    Jika cache terdistribusi CNFS-EFC diterapkan di kluster, konfigurasikan EFC untuk mengaktifkan kemampuan caching dan pra-ambil melalui mountOptions. Jika tidak diterapkan, hapus konfigurasi mountOptions dari contoh.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: efc-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 50Gi
      claimRef:
        name: efc-pvc
        namespace: default
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          containerNetworkFileSystem: cnfs-efc-test
          path: /
        volumeHandle: efc-pv
      mountOptions:
      - g_tier_EnableClusterCache=true              # Konfigurasi caching terdistribusi saat memasang volume.
      - g_tier_EnableClusterCachePrefetch=true      # Aktifkan pra-ambil saat memasang volume.
      volumeMode: Filesystem
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: efc-pvc
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 50Gi
      storageClassName: ""
      volumeMode: Filesystem
      volumeName: efc-pv

Buat beban kerja dan pasang NAS

  1. Buat Deployment dan pasang sistem file NAS ke dalamnya:

    kubectl create -f cnfs-deployment.yaml

    Simpan template YAML berikut sebagai cnfs-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: efc-test
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: efc-test
      template:
        metadata:
          labels:
            app: efc-test
        spec:
          containers:
          - command:
            - sh
            - -c
            - |
              sleep infinity
            image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest
            name: test
            volumeMounts:
            - mountPath: /mnt
              name: pvc
          volumes:
          - name: pvc
            persistentVolumeClaim:
              claimName: efc-pvc
  2. Periksa status pod di Deployment:

    kubectl get pod -l app=efc-test

    Output yang diharapkan:

    NAME                       READY   STATUS    RESTARTS   AGE
    efc-test-f545b86d6-spr7p   1/1     Running   0          29m
  3. Setelah pod mencapai status Running, verifikasi titik pemasangan EFC di pod:

    kubectl exec <pod-name> -- mount -t fuse.aliyun-alinas-efc

    Output yang diharapkan:

    bindroot-3889a-8TzEY5mc:3d2804****-w****.cn-shanghai.nas.aliyuncs.com:/ on /mnt type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)