すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:CNFSを使用した分離NASボリュームの管理 (推奨)

最終更新日:Dec 11, 2024

Container Service for Kubernetes (ACK) を使用すると、Container Network File System (CNFS) によって管理される分離されたFile Storage NAS (NAS) ボリュームをマウントして使用できます。 マルチテナントまたはデータ分離が必要なその他のシナリオでは、NASファイルシステム内の各ディレクトリをCNFSが管理するNASボリュームにマップし、NASボリュームをアプリケーションまたはポッドにマウントできます。 これにより、異なるディレクトリを異なるアプリケーションまたはポッドにマウントできます。これらのボリュームは互いに独立して分離されているためです。 このトピックでは、CNFSを使用して分離NASボリュームを管理する方法を説明する例として、StatefulSetsを使用します。

前提条件

ステップ1: 分離されたNASボリュームのワークロードを作成する

  • 永続ボリューム (PV) でcnfs-nas-scという名前のStorageClassを作成し、CNFS-nas-filesystemという名前のcnfsオブジェクトを参照します。

  • cnfs-nas-dynamic-stsという名前のStatefulSetを作成します。

    • StatefulSetで、volumeClaimTemplatesを使用して、PVC-cnfs-nas-dynamic-sts-0という名前の永続ボリュームクレーム (pvc) を作成します。

    • StatefulSetで、BusyBoxイメージを使用してPVをマウントし、1G.tmpfileという名前の一時ファイル (サイズは1 GB) をマウントターゲットに書き込みます。

cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cnfs-nas-sc
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  containerNetworkFileSystem: cnfs-nas-filesystem # Reference the CNFS object named cnfs-nas-filesystem. 
  path: "/"
  archiveOnDelete: "false"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Delete
allowVolumeExpansion: true
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cnfs-nas-dynamic-sts
  labels:
    app: busybox
spec:
  serviceName: "busybox"
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "sleep 3600;"]
        volumeMounts:
        - mountPath: "/data"
          name: pvc
  volumeClaimTemplates:
  - metadata:
      name: pvc
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "cnfs-nas-sc" # Reference the StorageClass named cnfs-nas-sc. 
      resources:
        requests:
          storage: 50Gi
EOF

ステップ2: マウント結果を表示する

次のコマンドを実行して、マウント結果を表示します。

kubectl exec cnfs-nas-dynamic-sts-0 -- mount |grep nfs

期待される出力:

971134b0e8-****.cn-zhangjiakou.nas.aliyuncs.com:/nas-95115c94-2ceb-4a83-b4f4-37bd35df**** on /data type nfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

出力は、ボリュームがマウントされていることを示します。

ステップ3: データがボリュームに永続化されているかどうかを確認する

次のコマンドを実行して、一時ファイルを書き込みます。

kubectl exec cnfs-nas-dynamic-sts-0 -ti -- sh -c 'dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;'

次のコマンドを実行して、一時ファイルがマウントターゲットに書き込まれているかどうかを確認します。

kubectl exec cnfs-nas-dynamic-sts-0 -- ls -arlth /data

期待される出力:

total 1G
-rw-r--r--    1 root     root        1.0G Dec 15 12:11 1G.tmpfile

出力は、1G.tmpfileファイルが /dataディレクトリに書き込まれたことを示します。

ステップ4: ファイルが他のポッドの分離されたNASボリュームに書き込まれているかどうかを確認する

次のコマンドを実行して、cnfs-nas-dynamic-sts-1という名前のポッドに一時ファイルが存在するかどうかを確認します。

kubectl exec cnfs-nas-dynamic-sts-1 -- ls -arlth /data

期待される出力:

sh-4.4# ls -arlth
total 8.0K
drwxr-xr-x 1 root root 4.0K Dec 15 18:07 ..
drwxr-xr-x 2 root root 4.0K Dec 15 18:07 .

出力は、1G.tmpfileファイルがcnfs-nas-dynamic-sts-0という名前のポッドにのみ存在することを示しています。 cnfs-nas-dynamic-sts-1という名前のポッドにファイルが見つかりません。

関連ドキュメント