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

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

最終更新日:Dec 10, 2024

Container Service for Kubernetes (ACK) を使用すると、Container Network File System (CNFS) によって管理される共有Apsara File Storage NAS (NAS) ボリュームをマウントして使用できます。 NASファイルシステム内のディレクトリを複数のKubernetesアプリケーションまたはポッドにマウントする場合は、CNFSを使用して共有NASボリュームを作成できます。 これにより、ポッド間でデータを共有する問題が解決されます。 このトピックでは、例としてStatefulSetを使用して、CNFSを使用して共有NASボリュームを管理する方法について説明します。

前提条件

ステップ1: 共有ボリュームのワークロードを作成する

  • cnfs-nas-static-PVという名前の永続ボリューム (pv) を作成し、PVでCNFS-nas-filesystemという名前のcnfsを参照します。 CNFSの名前は、作成したNASファイルシステムと同じです。

  • cnfs-nas-static-PVCという名前の永続ボリュームクレーム (pvc) を作成し、PVをPVCにバインドします。

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

YAMLコンテンツを表示する:

cat << EOF | kubectl apply -f-
apiVersion: v1
kind: PersistentVolume
メタデータ:
  名前: cnfs-nas-static-pv
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    ストレージ: 50Gi
  csi:
    driver: nasplugin.csi.alibabacloud.com
    fsType: nfs
    volumeAttributes:
      containerNetworkFileSystem: cnfs-nas-filesystem# CNFS-nas-filesystemという名前のcnfsを参照します。 
      mountProtocol: nfs
      path: /
      volumeAs: サブパス
      volumeCapacity: "true"
    volumeHandle: cnfs-nas-static-pv
  mountOptions:
  - nolock,tcp,noresvport
  - vers=3
  persistentVolumeReclaimPolicy: 削除
  storageClassName: cnfs-nas-sc
  volumeMode: ファイルシステム
---
apiVersion: v1
kind: PersistentVolumeClaim
メタデータ:
  名前: cnfs-nas-static-pvc
  namespace: デフォルト
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      ストレージ: 50Gi
  storageClassName: cnfs-nas-sc
  volumeMode: ファイルシステム
  volumeName: cnfs-nas-static-pv# cnfs-nas-static-PVという名前のpvを参照します。 
状態:
  accessModes:
  - ReadWriteOnce
  capacity:
    ストレージ: 50Gi
---
apiVersion: apps/v1
kind: StatefulSet
メタデータ:
  名前: cnfs-nas-static-sts
  ラベル:
    アプリ: busybox
spec:
  serviceName: "busybox"
  レプリカ:2
  セレクタ:
    matchLabels:
      アプリ: busybox
  template:
    metadata:
      labels:
        アプリ: busybox
    仕様:
      containers:
      -名前: busybox
        image: busybox
        コマンド: ["/bin/sh"]
        args: ["-c", "睡眠3600;"]
        volumeMounts:
        - mountPath: "/data"
          名前: cnfs-nas-static-pvc
      volumes:
      -name: cnfs-nas-static-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-static-pvc# cnfs-nas-static-PVCという名前のpvcを参照します。 
EOF 

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

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

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

期待される出力:

971134b0e8-**** .cn-zhangjiakou.nas.aliyuncs.com:/ on /data type nfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

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

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

次のコマンドを実行して、サイズが1 GBの一時ファイルをディレクトリに書き込みます。

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

次のコマンドを実行して、一時ファイルがディレクトリに書き込まれているかどうかを確認します。

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

期待される出力:

合計1G
-rw-r -- 1ルートルート1.0G Dec 15 12:11 1G.tmpfile 

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

ステップ4: データが他のポッドと共有されているかどうかを確認する

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

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

期待される出力:

合計1G
-rw-r -- 1ルートルート1.0G Dec 15 12:11 1G.tmpfile 

出力は、1G.tmpfileファイルがcnfs-nas-static-sts-0とcnfs-nas-static-sts-1という名前のポッドに存在することを示します。

説明

共有するデータを異なるポッドに書き込む場合、CNFSはポッド間で共有されるデータの一貫性を保証できません。 共有ファイルが破損している場合は, 上書きしないでください。

関連ドキュメント

  • NASファイルシステム内のさまざまなディレクトリをさまざまなアプリケーションまたはポッドにマウントして、ボリュームを分離できます。 詳細については、「CNFSを使用した分離NASボリュームの管理 (推奨) 」をご参照ください。

  • CNFSによって管理されているNASボリュームの自動拡張ポリシーを定義して、ストレージ使用量が特定のしきい値を超えたときにNASボリュームを自動的に拡張できます。 詳細については、「CNFSを使用したNASボリュームの自動拡張」をご参照ください。