Elastic File Client (EFC) は、高同時実行ワークロードと大規模データセットの並列アクセスをサポートしており、ビッグデータ分析や AI トレーニングと推論などのデータ集約型で高同時実行のコンテナ化されたアプリケーションに適しています。 デフォルトの NFS プロトコルを使用して NAS ファイルシステムをマウントする場合と比較して、EFC を使用するとファイルアクセスが高速化され、読み取りおよび書き込みパフォーマンスが向上します。 このトピックでは、CNFS を使用して EFC クライアントで NAS ファイルシステムをマウントする方法について説明します。
EFC の概要
EFC は、Alibaba Cloud が提供する、FUSE ベースのユーザー空間 POSIX クライアントです。従来のカーネル空間 NFS クライアントを置き換えることができ、マルチリンクアクセス、メタデータキャッシングなどの高速化機能を提供します。また、Managed Service for Prometheus と統合して、クライアント側のパフォーマンスモニタリングを提供します。
カーネル空間 NFS クライアントおよびその他のオープンソース FUSE ベースのクライアントと比較して、EFC クライアントには次のメリットがあります。
データ一貫性:分散ロックメカニズムを使用して、ファイルおよびディレクトリの強力な一貫性を確保します。あるクライアントが書き込んだデータは、他のクライアントから即座に読み取れます。新しいファイルも、他のすべてのクライアントから直ちにアクセスできるため、複数ノード間でのデータ管理が簡素化されます。
単一ノードの読み書きキャッシング:FUSE のキャッシュロジックを最適化し、コンピュートノード上の最小限のメモリでデータをキャッシュします。これにより、小規模ファイルの読み書きパフォーマンスが向上し、従来の NFS クライアントと比較して 50% 以上の性能向上が得られます。
小規模ファイルのプリフェッチ:ホットなディレクトリとファイルを自動的に識別してプリフェッチし、データ取得のオーバーヘッドを削減します。
ホットアップグレードとフェイルオーバー:アプリケーションを再起動せずにホットアップグレードできます。クライアント障害が発生した場合でも、サービスに影響を与えることなく自動的にフェイルオーバーします。
前提条件
クラスターに
cnfs-nas-daemonアドオンがインストールされており、csi-pluginコンポーネントの FeatureGate にAlinasMountProxy=trueが追加されてcnfs-nas-daemonが有効になっていること。詳細については、「Manage the cnfs-nas-daemon add-on」をご参照ください。ノード OS が Alibaba Cloud Linux 3 または ContainerOS であり、カーネルバージョンが 5.10.134-17.2 以降であること。
重要ノード OS またはカーネルバージョンが要件を満たさない場合、システムはマウント時に自動的に NFS プロトコルにフォールバックします。
EFC クライアントを使用するための CNFS の設定
CNFS リソースを作成し、EFC クライアントを指定します。
次の内容を cnfs-efc.yaml として保存します。
説明この例では、既存の NAS ファイルシステムを CNFS で設定して EFC クライアントを有効にする方法を示します。CNFS を使用して新しい NAS ファイルシステムを作成する場合も、ContainerNetworkFileSystem リソースの
parametersにuseClient: EFCClientを追加することで、EFC クライアントを有効にできます。CNFS を使用して NAS ファイルシステムを作成する方法の詳細については、「Manage NAS file systems by using CNFS」をご参照ください。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パラメーター
説明
descriptionファイルシステムの説明です。
type作成するボリュームのタイプです。
reclaimPolicyサポートされている reclaimPolicy は
Retainのみです。これは、CNFS を削除しても NAS ファイルシステムは削除されないことを意味します。parametersserverNAS マウントターゲットのアドレスです。マウントターゲットは、次の要件を満たす必要があります。
マウントターゲットは、クラスターの Pod と同じ VPC に存在する必要があります。そうでない場合、マウントに失敗します。
最適なパフォーマンスを得るために、マウントターゲットとクラスターの Pod には同じ vSwitch を使用することを推奨します。
マウントターゲットのステータスは [Available] である必要があります。
要件を満たす既存のマウントターゲットがない場合は、新しく作成できます。詳細については、「Manage mount targets」をご参照ください。
useClientEFCClientに設定すると、EFC クライアントが有効になります。CNFS リソースを作成します。
kubectl create -f cnfs-efc.yaml
CNFS を使用して、対応するボリュームを作成します。
kubectl create -f cnfs-pv-pvc.yaml次に cnfs-pv-pvc.yaml の例を示します。
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 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
ワークロードの作成と NAS のマウント
Deployment を作成し、NAS ファイルシステムをマウントします。
kubectl create -f cnfs-deployment.yaml次のコードは 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-pvcDeployment 内の Pod のステータスを確認します。
kubectl get pod -l app=efc-test想定される出力:
NAME READY STATUS RESTARTS AGE efc-test-f545b86d6-spr7p 1/1 Running 0 29mPod が実行中になったら、Pod 内の EFC マウントポイントを確認します。
kubectl exec <pod-name> -- mount -t fuse.aliyun-alinas-efc想定される出力:
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)