Container Service for Kubernetes (ACK) のContainer Storage Interface (CSI) プラグインを使用すると、動的にプロビジョニングされたApsara File Storage NAS (NAS) ボリュームを、ACKコンソールのサブパスまたはファイルシステムモードで、またはkubectlを使用して、ACKクラスターにマウントできます。 このトピックでは、動的にプロビジョニングされたNASボリュームをACKクラスターにマウントする方法について説明します。 このトピックでは、NASボリュームがデータを保持および共有できるかどうかをテストする方法についても説明します。
前提条件
ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
ACKサーバーレスクラスターが作成されます。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。
CSIプラグインが最新バージョンに更新されます。 詳細については、「CSIプラグインの管理」をご参照ください。
シナリオ
アプリケーションには高いディスクI/Oが必要です。
Object storage service (OSS) よりも高い読み取りおよび書き込みスループットを提供するストレージサービスが必要です。
異なるホスト間でファイルを共有。 たとえば、NAS ファイルシステムをサーバーとして使用したい場合です。
制限事項
NASは共有ストレージサービスです。 NASファイルシステムをマウントするために使用される永続ボリューム要求 (PVC) は、ポッド間で共有できます。
Container Storage Interface (CSI) プラグインを使用してサーバーメッセージブロック (SMB) ファイルシステムをマウントすることはできません。
NFSv3ファイル共有プロトコルの使用を推奨します。
NASボリュームは、NASファイルシステムと同じ仮想プライベートクラウド (VPC) 内のECSインスタンスにのみマウントできます。
汎用NASファイルシステムとExtreme NASファイルシステムには、マウント接続の制限、ファイルシステムの数、ファイル共有プロトコルなど、さまざまな制限があります。 詳細については、「制限事項」をご参照ください。
NASボリュームを使用する前に、CSIプラグインを最新バージョンに更新することを推奨します。
マウントターゲットが作成されたら、マウントターゲットが [使用可能] 状態に変わるまで待ちます。
NASファイルシステムをアンマウントする前に、NASファイルシステムのマウント対象を削除しないでください。 そうしないと、オペレーティングシステムのハング問題が発生する可能性があります。
ACKサーバーレスクラスターでサブパスタイプの永続ボリューム (PV) を削除しても、サブディレクトリは削除されません。 これは、PVの
reclaimPolicy
がDelete
に設定され、PVが削除されても、NASファイルシステム内の対応するディレクトリは削除されないことを示しています。 手動でサブディレクトリをマウントして削除する必要があります。
使用上の注意
NASは共有ストレージサービスです。 NASファイルシステムをマウントするために使用される永続ボリューム要求 (PVC) は、ポッド間で共有できます。 NASへの同時書き込みの制限の詳細については、「ファイルへの読み取りおよび書き込みアクセスに関するFAQ」トピックの「複数のプロセスまたはクライアントが同時にログファイルにデータを書き込むときに発生する可能性のある例外を防ぐにはどうすればよいですか?」 と「NFSファイルシステムにデータを書き込む際の待ち時間を解決するにはどうすればよいですか? 」セクションをご参照ください。
Extreme NASファイルシステムをマウントするには、NASボリュームのStorageClassの
path
パラメーターを /shareのサブディレクトリに設定します。 たとえば、0cd8b4a576-g **** .cn-hangzhou.nas.aliyuncs.com:/share/subpath
の値は、NASファイルシステムのマウントされたサブディレクトリが/share/subpath
であることを示します。NASファイルシステムのマウントに使用されるPVCの容量は、ファイルシステムが汎用ファイルシステムであり、StorageClassの
allowVolumeExpansion
パラメーターがtrue
に設定されている場合にのみ有効です。 この場合、CSIはPVC容量に基づいてNASディレクトリのクォータを設定します。 実際のクォータは、PVC容量を次の整数に切り上げることによって計算されます。 クォータはGiBで測定されます。NASディレクトリクォータは非同期で有効になります。 永続ボリューム (PV) が動的にプロビジョニングされた後、ディレクトリクォータはすぐには有効にならず、大量のデータが短時間で書き込まれるとクォータを超える可能性があります。 NASディレクトリクォータの詳細については、「ディレクトリクォータの管理」をご参照ください。
アプリケーションテンプレートでsecurityContext.fsgroupパラメーターが指定されている場合、ボリュームのマウント後にkubeletが
chmod
またはchown
操作を実行するため、時間の消費が増加します。 マウントを高速化する方法の詳細については、「NASボリュームのマウントに時間がかかるのはなぜですか?」をご参照ください。
動的にプロビジョニングされたNASボリュームのマウント
CSIプラグインを使用すると、動的にプロビジョニングされたNASボリュームをサブパスまたはファイルシステムモードでACKコンソールまたはkubectl kubectlでマウントできます。
サブパスモード: ACKコンソールまたはkubectl kubectlのみを使用して、サブパスモードでNASボリュームをマウントできます。
複数のアプリケーションまたはポッドが同じNASボリュームを使用してデータを共有する必要がある場合、またはNASファイルシステムの異なるサブディレクトリを異なるポッドにマウントする場合は、サブパスモードを使用できます。
ファイルシステムモード: ファイルシステムモードでNASボリュームをマウントするために使用できるのはkubectlだけです。
アプリケーションでNASファイルシステムとマウントターゲットを動的に作成および削除する必要がある場合は、ファイルシステムモードを使用できます。
sharepath mode: 非推奨 データ共有のためにNASファイルシステム内のディレクトリを複数のポッドにマウントする場合は、「静的にプロビジョニングされたNASボリュームのマウント」をご参照ください。
ACKコンソールで動的にプロビジョニングされたNASボリュームをサブパスモードでマウントする
手順1: NASファイルシステムとマウントターゲットの作成
動的にプロビジョニングされたNASボリュームをサブパスモードでマウントするには、NASファイルシステムとマウントターゲットを作成する必要があります。
NASコンソールにログインする
NAS ファイルシステムを作成します。 詳細については、「ファイルシステムの作成」をご参照ください。
説明NASボリューム内のデータを暗号化する場合は、NASファイルシステムの作成時に暗号化設定を構成します。
クラスターノードがデプロイされている仮想プライベートクラウド (VPC) にマウントターゲットを作成します。 詳細については、「マウントターゲットの管理」をご参照ください。
ステップ2: StorageClassの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
StorageClassesページの右上隅にある [作成] をクリックします。
[作成] ダイアログボックスで、StorageClassを設定します。
次の表に、主要なパラメーターを示します。
パラメーター
説明
名前
StorageClassの名前。
名前は小文字で始まる必要があり、小文字、数字、ピリオド (.) 、およびハイフン (-) のみを使用できます。
PVタイプ
有効な値: クラウドディスクおよびNAS。 この例では、NASが選択されています。
マウントターゲットの選択
NASファイルシステムのマウントターゲット。 マウントターゲットのドメイン名を照会する方法の詳細については、「マウントターゲットの管理」トピックの「マウントターゲットのドメイン名の表示」をご参照ください。
使用可能なマウントターゲットがない場合は、まずNASファイルシステムを作成します。 詳細については、「CNFSを使用したNASファイルシステムの管理」をご参照ください。
再利用ポリシー
ポリシーの再利用有効値: 削除と保持。 デフォルト値: Delete。
削除: このポリシーを使用する場合は、
archiveOnDelete
パラメーターも指定する必要があります。archiveOnDelete
パラメーターをtrue
に設定すると、PVCに関連付けられたPVおよびNASファイルシステムの名前が変更され、PVCの削除後も保持されます。archiveOnDelete
パラメーターをfalse
に設定した場合、PVCを削除すると、PVCに関連付けられたPVおよびNASファイルシステムが削除されます。
削除: PVCが削除されると、関連するPVが削除されます。 PVCに関連付けられているNASファイルシステムのディレクトリは削除されません。 これは、CSI-ProvisionerがACKサーバーレスクラスターでLinux特権を使用できないためです。 したがって、ファイルシステムをマウントして、ファイルシステムのディレクトリを削除または名前変更することはできません。
保持モード: PVCが削除された場合、関連するPVおよびNASファイルシステムは保持され、手動でのみ削除できます。
より高度なデータセキュリティが必要な場合は、ユーザーエラーによるデータ損失を防ぐために、保持ポリシーを使用することを推奨します。
マウントオプション
ネットワークファイルシステム (NFS) バージョンなどのマウントオプション。
NFS v3の使用を推奨します。 Extreme NASファイルシステムはNFS v3のみをサポートしています。NFSプロトコルの詳細については、「NFS」をご参照ください。
マウントパス
NASファイルシステムのマウントパス。
パラメーターを設定したら、[作成] をクリックします。
StorageClassの作成後、StorageClassesページでStorageClassを表示できます。
ステップ3: PVCを作成する
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[ボリュームクレームの永続化] ページの右上隅にある [作成] をクリックします。
[PVCの作成] ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
PVCタイプ
有効な値: Cloud Disk、NAS、およびOSS この例では、NASが選択されています。
名前
PVCの名前。 名前はクラスター内で一意である必要があります。
割り当てモード
PVCの割り当てモード。 この例では、[StorageClassの使用] が選択されています。
既存のストレージクラス
動的プロビジョニングを有効にするために使用されるStorageClass。 選択をクリックします。 [ストレージクラスの選択] ダイアログボックスで、使用するStorageClassを見つけ、[操作] 列の [選択] をクリックします。
容量
PVCが主張する容量。
アクセスモード
PVCのアクセスモード。 デフォルト値: ReadWriteMany ReadWriteOnceまたはReadOnlyManyを選択することもできます。
[作成] をクリックします。
ステップ4: アプリケーションの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
デプロイメントページで、イメージから作成をクリックします。
アプリケーションパラメーターを設定します。
ローカルストレージの追加: [PVタイプ] ドロップダウンリストから、HostPath、ConfigMap、Secret、またはEmptyDirを選択できます。 次に、マウントソースとコンテナパスのパラメーターを設定して、ボリュームをコンテナパスにマウントします。 詳しい情報は、『Volumes』をご参照ください。
PVCの追加: クラウドボリュームを追加できます。
アプリケーションの設定が完了したら、[作成] をクリックします。
この例では、ボリュームパラメータを設定する方法を示します。 その他のパラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。
ローカルボリュームとクラウドボリュームを追加できます。
この例では、NASボリュームがコンテナ内の /tmpパスにマウントされています。
kubectlを使用して動的にプロビジョニングされたNASボリュームをサブパスモードでマウントする
動的にプロビジョニングされたNASボリュームをサブパスモードでマウントするには、NASファイルシステムとマウントターゲットを作成する必要があります。
NASファイルシステムとマウントターゲットを作成します。
NASコンソールにログインする
NAS ファイルシステムを作成します。 詳細については、「ファイルシステムの作成」をご参照ください。
説明NASボリューム内のデータを暗号化する場合は、NASファイルシステムの作成時に暗号化設定を構成します。
クラスターノードがデプロイされている仮想プライベートクラウド (VPC) にマウントターゲットを作成します。 詳細については、「マウントターゲットの管理」をご参照ください。
StorageClass の作成
alicloud-nas-subpath.yamlという名前のファイルを作成し、次のコンテンツをファイルに追加します。
allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
パラメーター
説明
allowVolumeExpansion
このパラメーターは、汎用NASファイルシステムでのみ使用できます。 このパラメーターをtrueに設定すると、StorageClassに基づいて動的にプロビジョニングされたPVに対してNASディレクトリクォータが設定されます。 PVCを変更することでボリュームを拡張できます。
mountOptions
NASファイルシステムの
マウントオプション
は、mountOptions
パラメーターで指定します。 たとえば、使用するNFSバージョンを指定できます。volumeAs
有効な値:
subpath
およびfilesystem
subpathの値は、サブディレクトリがクラスターにマウントされていることを示します。 filesystemの値は、ファイルシステムがクラスタにマウントされていることを示します。サーバー
NASファイルシステムのサブディレクトリをPVとしてマウントする場合のNASファイルシステムのマウント対象。
重要実際のマウントターゲットを指定する必要があります。 マウントターゲットのドメイン名を表示する方法の詳細については、「マウントターゲットの管理」トピックの「マウントターゲットのドメイン名の表示」をご参照ください。
provisioner
ドライバーのタイプ。 この例では、パラメーターは
nasplugin.csi.alibabacloud.com
に設定されています。 これは、Alibaba Cloudが提供するCSIプラグインが使用されていることを示しています。reclaimPolicy
PVの再利用ポリシー。 デフォルト値:
Delete
。 値を[保持]
に設定することもできます。削除: このポリシーを使用する場合は、
archiveOnDelete
パラメーターも指定する必要があります。archiveOnDelete
パラメーターをtrue
に設定すると、PVCに関連付けられたPVおよびNASファイルシステムの名前が変更され、PVCの削除後も保持されます。archiveOnDelete
パラメーターをfalse
に設定した場合、PVCを削除すると、PVCに関連付けられたPVおよびNASファイルシステムが削除されます。
保持: PVCが削除されると、関連するPVおよびNASファイルシステムは保持され、手動でのみ削除できます。
データセキュリティに対する要件が高い場合は、
[保持]
ポリシーを使用して、ユーザーエラーによるデータ損失を防ぐことを推奨します。archiveOnDelete
reclaimPolicy
パラメーターがdelete
に設定されている場合、バックエンドストレージを削除するかどうかを指定します。 NASは共有ストレージサービスです。 データのセキュリティを確保するには、reclaimPolicyパラメーターとarchiveOnDeleteパラメーターの両方を指定する必要があります。 このパラメーターはparameters
で指定します。デフォルト値:
true
。これは、PVCが削除されたときにサブディレクトリまたはファイルが削除されないことを示します。 代わりに、サブディレクトリまたはファイルの名前がarchived-{pvName}.{timestamp}
の形式で変更されます。値が
false
に設定されている場合、PVCが削除されるとバックエンドストレージが削除されます。
説明サービスが大量のネットワークトラフィックを受信する場合は、値をfalseに設定しないことをお勧めします。 詳細については、NASボリュームに関するFAQ」トピックの「動的にプロビジョニングされたnasボリュームを使用すると、alicloud-NAS-controllerのタスクキューがいっぱいになり、PVを作成できない場合はどうすればよいですか。 」セクションをご参照ください。
以下のコマンドを実行し、StorageClass を作成します。
kubectl create -f alicloud-nas-subpath.yaml
以下のコマンドを実行し、PVC を作成します。
pvc.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-subpath resources: requests: storage: 20Gi
パラメーター
説明
name
PVCの名前。
accessModes
PVのアクセスモード。 デフォルト値:
ReadWriteMany
値をReadWriteOnce
またはReadOnlyMany
に設定することもできます。storageClassName
PVCに関連付けるStorageClassの名前。
ストレージ
PVCによって主張されているストレージ。
重要このパラメーターは、アプリケーションが使用できるストレージを制限しません。 さらに、PVCが主張するストレージは自動的に増加しません。 マウントされたNASファイルシステムが汎用NASファイルシステムであり、StorageClassの
allowVolumeExpasion
パラメーターがtrueに設定されている場合にのみ、マウントされたNASファイルシステムのサブディレクトリにクォータが設定されます。以下のコマンドを実行し、PVC を作成します。
kubectl create -f pvc.yaml
アプリケーションを作成します。
nginx-1という名前の2つのアプリケーションを作成し、NASファイルシステムの同じサブディレクトリを共有するようにnginx-2します。
nginx-1.ymlという名前のファイルを作成し、次のコンテンツをファイルに追加します。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-1 labels: app: nginx-1 spec: selector: matchLabels: app: nginx-1 template: metadata: labels: app: nginx-1 spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
mountPath
: NASファイルシステムがコンテナにマウントされるパス。claimName
: アプリケーションがNASファイルシステムをマウントするために使用するPVCの名前。 この例では、nas-csi-pvcが使用されています。
nginx-2.ymlという名前のファイルを作成し、次のコンテンツをファイルに追加します。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-2 labels: app: nginx-2 spec: selector: matchLabels: app: nginx-2 template: metadata: labels: app: nginx-2 spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
mountPath
: NASファイルシステムがコンテナにマウントされるパス。 この例では、/dataが使用されます。claimName
: nginx-1によって使用されるPVCの名前。 この例では、nas-csi-pvcが使用されています。
次のコマンドを実行して、アプリケーションをnginx-1およびnginx-2にデプロイします。
kubectl create -f nginx-1.yaml -f nginx-2.yaml
次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-n**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
説明NASボリュームのサブディレクトリ
0cd8b4a576-g **** .cn-hangzhou.nas.aliyuncs.com:/share/nas-79438493-f3e0-11e9-bbe5-00163e09 ****
は、ポッドdeployment-nas-1-5b5cdb85f6-n ****
およびdeployment-nas-2-c5bb4746c-4 ****
の /dataディレクトリにマウントされます。 次の情報が表示されます。/share
: StorageClass設定で指定されたサブディレクトリ。nas-79438493-f3e0-11e9-bbe5-00163e09 ****
: PVの名前。
NASファイルシステムの異なるサブディレクトリを異なるポッドにマウントするには、ポッドごとにPVCを作成する必要があります。 nginx-1のpvc-1を作成し、nginx-2のpvc-2を作成できます。
kubectlを使用して動的にプロビジョニングされたNASボリュームをファイルシステムモードでマウントする
デフォルトでは、ファイルシステムモードでマウントされているPVを削除すると、システムは関連するNASファイルシステムとマウントターゲットを保持します。 PVとともにNASファイルシステムとマウントターゲットを削除するには、StorageClass設定でreclaimPolicy
パラメーターをdelete
に設定し、deleteVolume
パラメーターをtrue
に設定します。
NASボリュームをファイルシステムモードでポッドにマウントする場合、作成できるNASファイルシステムとマウントターゲットは1つだけです。
ACK専用クラスターに対して、次のすべての手順を実行する必要があります。 他のタイプのクラスターの場合は、ステップ2から開始します。
オプション: RAM (Resource Access Management) ポリシーを設定し、クラスターに割り当てられたRAMロールにポリシーをアタッチします。
ACK専用クラスターを使用する場合は、この手順を実行する必要があります。
ファイルシステムモードでは、NASファイルシステムとマウントターゲットを動的に作成および削除できます。 ACK専用クラスターでこれらの操作を実行するには、CSI-Provisionerに必要な権限を付与する必要があります。 次のサンプルコードは、必要な権限を含むRAMポリシーを示しています。
{ "Action": [ "nas:DescribeMountTargets", "nas:CreateMountTarget", "nas:DeleteFileSystem", "nas:DeleteMountTarget", "nas:CreateFileSystem" ], "Resource": [ "*" ], "Effect": "Allow" }
次のいずれかの方法を使用して、権限を付与できます。
上記のRAMポリシーをACK専用クラスターのマスターRAMロールにアタッチします。 詳細については、「カスタムポリシーのドキュメントと説明の変更」をご参照ください。
RAMユーザーを作成し、前述のRAMポリシーをRAMユーザーにアタッチします。 AccessKeyペアを生成し、CSI-Provisioner設定の
env
変数にAccessKeyペアを指定します。env: - name: CSI_ENDPOINT value: unix://socketDir/csi.sock - name: ACCESS_KEY_ID value: "" - name: ACCESS_KEY_SECRET value: ""
StorageClass の作成
alicloud-nas-fs.yamlという名前のファイルを作成し、次のコンテンツをファイルに追加します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-fs mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: filesystem fileSystemType: standard storageType: Performance regionId: cn-beijing zoneId: cn-beijing-e vpcId: "vpc-2ze2fxn6popm8c2mzm****" vSwitchId: "vsw-2zwdg25a2b4y5juy****" accessGroupName: DEFAULT_VPC_GROUP_NAME deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
パラメーター
説明
volumeAs
NASファイルシステムのマウントモード。 有効な値:
filesystem: provisionerはNASファイルシステムを自動的に作成します。 各PVは、NASファイルシステムに対応する。
subpath: provisionerはNASファイルシステムにサブディレクトリを自動的に作成します。 各PVは、NASファイルシステムのサブディレクトリに対応する。
fileSystemType
NASファイルシステムのタイプ。 有効な値:
標準: 汎用NASファイルシステム
極端な: extreme NASファイルシステム
デフォルト値: standard。
storageType
NASファイルシステムのストレージタイプ。
fileSystemTypeパラメーターが標準に設定されている場合、有効な値はパフォーマンスと容量です。 デフォルト値: Performance。
fileSystemTypeパラメーターがextremeに設定されている場合、有効な値はstandardとadvanceです。 デフォルト値: standard。
regionId
NASファイルシステムが属するリージョンのID。
zoneId
NASファイルシステムが属するゾーンのID。
vpcId
NASファイルシステムのマウントターゲットが属するVPCのID。
vSwitchId
NASファイルシステムのマウント対象が属するvSwitchのID。
accessGroupName
NASファイルシステムのマウントターゲットが属する権限グループ。 デフォルト値: DEFAULT_VPC_GROUP_NAME
deleteVolume
関連するPVが削除された場合のNASファイルシステムの再利用ポリシー。 NASは共有ストレージサービスです。 したがって、データのセキュリティを確保するために、deleteVolumeパラメーターとreclaimPolicyパラメーターの両方を指定する必要があります。
provisioner
ドライバーのタイプ。 この例では、パラメーターは
nasplugin.csi.alibabacloud.com
に設定されています。 これは、Alibaba Cloudが提供するCSIプラグインが使用されていることを示しています。reclaimPolicy
PVCを削除すると、関連するNASファイルシステムは、deleteVolumeパラメーターをtrueに設定し、reclaimPolicyパラメーターをdeleteに設定した場合にのみ自動的に削除されます。
以下のコマンドを実行し、StorageClass を作成します。
kubectl create -f alicloud-nas-fs.yaml
NASボリュームをマウントするためのPVCとポッドを作成します。
pvc.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi
nginx.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-fs labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc-fs
次のコマンドを実行して、PVCとポッドを作成します。
kubectl create -f pvc.yaml -f nginx.yaml
ファイルシステムモードでは、PVCの作成時にCSIドライバが自動的にNASファイルシステムとマウントターゲットを作成します。 PVCが削除されると、deleteVolumeおよびreclaimPolicyパラメーターの設定に基づいて、ファイルシステムとマウントターゲットが保持または削除されます。
NASのストレージパフォーマンスの確認
次の例で、NASファイルシステムがデータを保持および共有できるかどうかを確認できます。
NASファイルシステムを使用してデータを永続化できることを確認する
NASは永続ストレージを提供します。 ポッドが削除されると、再作成されたポッドは削除されたポッドのデータを自動的に同期します。 次の手順を実行して、NASファイルシステムを使用してデータを永続化できることを確認します。
アプリケーション用に作成されたポッドと、マウントされたNASファイルシステム内のファイルを照会します。
次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-n**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
次のコマンドを実行して、ポッドの /dataパス内のファイルを照会します。 この例では、ポッドの
deployment-nas-1-5b5cdb85f6-n ****
が使用されています。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
出力は返されません。 これは、/dataパスにファイルが存在しないことを示します。
次のコマンドを実行して、ポッド
deployment-nas-1-5b5cdb85f6-n ****
の /dataパスにnasという名前のファイルを作成します。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- touch /data/nas
次のコマンドを実行して、ポッド
deployment-nas-1-5b5cdb85f6-n ****
の /dataパス内のファイルを照会します。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
期待される出力:
nas
次のコマンドを実行して、ポッドを削除します。
kubectl delete pod deployment-nas-1-5b5cdb85f6-n****
別のCLIを開き、次のコマンドを実行して、ポッドの削除および再作成方法を表示します。
kubectl get pod -w -l app=nginx
ポッドの削除後もファイルが存在することを確認します。
次のコマンドを実行して、再作成されたポッドの名前を照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdm2g5-m**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
次のコマンドを実行して、ポッド
deployment-nas-1-5b5cdm2g5-m ****
の /dataパス内のファイルを照会します。kubectl exec deployment-nas-1-5b5cdm2g5-m**** -- ls /data
期待される出力:
nas
nas
ファイルはまだ /dataパスに存在します。 これは、データがNASファイルシステムに保持されていることを示します。
NASファイルシステム内のデータがポッド間で共有できることを確認する
NASボリュームを複数のポッドにマウントできます。 1つのポッドでデータが変更されると、変更は他のポッドに自動的に同期されます。 次の手順を実行して、NASファイルシステム内のデータをポッド間で共有できることを確認します。
アプリケーション用に作成されたポッドと、マウントされたNASファイルシステム内のファイルを照会します。
次のコマンドを実行して、アプリケーション用に作成されたポッドを照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-n**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4**** 1/1 Running 0 32s
次のコマンドを実行して、各ポッドの /dataパス内のファイルを照会します。
kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data kubectl exec deployment-nas-2-c5bb4746c-4**** -- ls /data
次のコマンドを実行して、ポッドの /dataパスにnasという名前のファイルを作成します。
kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- touch /data/nas
次のコマンドを実行して、各ポッドの /dataパス内のファイルを照会します。
次のコマンドを実行して、ポッド
deployment-nas-1-5b5cdb85f6-n ****
の /dataパス内のファイルを照会します。kubectl exec deployment-nas-1-5b5cdb85f6-n**** -- ls /data
期待される出力:
nas
次のコマンドを実行して、ポッド
deployment-nas-2-c5bb4746c-4 ****
の /dataパス内のファイルを照会します。kubectl exec deployment-nas-2-c5bb4746c-4**** -- ls /data
期待される出力:
nas
一方のポッドの /dataパスにファイルを作成した後、もう一方のポッドの /dataパスにファイルを見つけることができます。 これは、NASファイルシステムのデータが2つのポッドで共有されていることを示します。
NASファイルシステムでユーザー分離またはユーザーグループ分離を有効にする
異なるユーザーとユーザーグループ間のデータのセキュリティを確保するために、次の手順を実行してNASファイルシステム内のユーザーまたはユーザーグループを分離できます。
次のYAMLテンプレートを使用してアプリケーションを作成します。 アプリケーションのコンテナはプロセスを開始し、誰もいないユーザーとしてディレクトリを作成します。 誰もいないユーザのユーザ識別子 (UID) およびグループ識別子 (GID) が65534される。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nas-sts spec: selector: matchLabels: app: busybox serviceName: "busybox" replicas: 1 template: metadata: labels: app: busybox spec: securityContext: fsGroup: 65534 # The containers create directories as the nobody user. The UID and GID of the nobody user are 65534. fsGroupChangePolicy: "OnRootMismatch" # Permissions and ownership are changed only if the permissions and the ownership of the root directory do not meet the requirements of the volume. containers: - name: busybox image: busybox command: - sleep - "3600" securityContext: runAsUser: 65534 # All processes in the containers run as the nobody user (UID 65534). runAsGroup: 65534 # All processes in the containers run as the nobody user (GID 65534). allowPrivilegeEscalation: false volumeMounts: - name: nas-pvc mountPath: /data volumeClaimTemplates: - metadata: name: nas-pvc spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-nas-subpath" resources: requests: storage: 100Gi
コンテナーで次の
top
コマンドを実行して、コマンドがnobodyユーザーとして実行されているかどうかを確認します。kubectl exec nas-sts-0 -- "top"
期待される出力:
Mem: 11538180K used, 52037796K free, 5052K shrd, 253696K buff, 8865272K cached CPU: 0.1% usr 0.1% sys 0.0% nic 99.7% idle 0.0% io 0.0% irq 0.0% sirq Load average: 0.76 0.60 0.58 1/1458 54 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 49 0 nobody R 1328 0.0 9 0.0 top 1 0 nobody S 1316 0.0 10 0.0 sleep 3600
出力は、
top
コマンドがnobody
ユーザーとして実行されることを示しています。次を実行して、NASファイルシステムのマウントディレクトリにディレクトリとファイルを作成するために
nobody
ユーザーが使用されているかどうかを確認します。kubectl exec nas-sts-0 -- sh -c "touch /data/test; mkdir /data/test-dir; ls -arlth /data/"
期待される出力:
total 5K drwxr-xr-x 1 root root 4.0K Aug 30 10:14 .. drwxr-sr-x 2 nobody nobody 4.0K Aug 30 10:14 test-dir -rw-r--r-- 1 nobody nobody 0 Aug 30 10:14 test drwxrwsrwx 3 root nobody 4.0K Aug 30 10:14 .
出力は、
/data
ディレクトリにtestファイルとtest-dirディレクトリを作成するためにnobodyユーザーが使用されていることを示しています。
関連ドキュメント
CNFSを使用してNASファイルシステムを管理する方法の詳細については、「CNFSを使用してNASファイルシステムを管理する (推奨) 」および「CNFSを使用してNASファイルシステムを管理する」をご参照ください。
NASボリュームを動的に拡張する方法の詳細については、「CNFSを使用したNASボリュームの自動拡張」をご参照ください。
NASのディレクトリクォータ機能を使用してボリュームのストレージスペースを管理する方法の詳細については、「NASボリュームの拡張」をご参照ください。