Container Service for Kubernetes (ACK) を使用すると、Container Network File System (CNFS) によって管理される分離されたFile Storage NAS (NAS) ボリュームをマウントして使用できます。 マルチテナントまたはデータ分離が必要なその他のシナリオでは、NASファイルシステム内の各ディレクトリをCNFSが管理するNASボリュームにマップし、NASボリュームをアプリケーションまたはポッドにマウントできます。 これにより、異なるディレクトリを異なるアプリケーションまたはポッドにマウントできます。これらのボリュームは互いに独立して分離されているためです。 このトピックでは、CNFSを使用して分離NASボリュームを管理する方法を説明する例として、StatefulSetsを使用します。
前提条件
NASが有効化されています。
これが初めての場合は、
NASの製品ページで、画面の指示に従ってNASサービスを有効化します。Kubernetes 1.20以降を実行するContainer Service for Kubernetes (ACK) クラスターが作成されます。 Container Storage Interface (CSI) プラグインがボリュームプラグインとして使用されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
csi-pluginとcsi-provisionerのバージョンは、v1.24.11-5221f79-aliyun以降です。 csi-pluginとcsi-provisionerを更新する方法の詳細については、「CSIコンポーネントのインストールと更新」をご参照ください。
storage-operatorのバージョンはv1.24.105-825188d-aliyun以降です。 storage-operatorの更新方法の詳細については、「コンポーネントの管理」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
説明CNFSの詳細については、「CNFS」をご参照ください。
CNFSを使用してNASファイルシステムを管理する方法の詳細については、「CNFSを使用してNASファイルシステムを管理する (推奨) 」をご参照ください。
ステップ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という名前のポッドにファイルが見つかりません。
関連ドキュメント
NASファイルシステムで同じディレクトリを共有するように複数のアプリケーションまたはポッドを設定する方法の詳細については、「CNFSを使用して共有NASボリュームを管理する (推奨) 」をご参照ください。
NASボリュームの使用率がしきい値を超えたときにNASボリュームを自動的に拡張する方法の詳細については、「CNFSを使用してNASボリュームを自動的に拡張する」をご参照ください。