高いディスクI/Oスループットとデータ共有が必要なシナリオでは、ファイルストレージNAS(NAS)を永続ストレージボリュームとして使用できます。このトピックでは、動的にプロビジョニングされたNASボリュームをマウントする方法について説明します。また、動的にプロビジョニングされたNASボリュームを使用してデータを永続化できるかどうか、および動的にプロビジョニングされたNASボリューム内のデータを複数のPod間で共有できるかどうかを確認する方法についても説明します。
背景情報
NASは、共有アクセス、スケーラビリティ、高信頼性、高パフォーマンスを特徴とする分散ファイルシステムサービスです。NASは、データ共有と高IOPSが必要なシナリオに適しています。詳細については、ストレージの概要を参照してください。
Alibaba Cloud Container Compute Service(ACS)は、動的にプロビジョニングされたNASボリュームと静的にプロビジョニングされたNASボリュームをサポートしています。このトピックでは、動的にプロビジョニングされたNASボリュームをマウントする方法について説明します。静的にプロビジョニングされたNASボリュームをマウントする方法の詳細については、静的にプロビジョニングされたNASボリュームのマウントを参照してください。
前提条件
Alibaba Cloud Container Compute Service(ACS)クラスターに最新バージョンのmanaged-csiprovisionerがインストールされていること。
ACSコンソールのACSクラスター管理ページに移動します。クラスター管理ページの左側のナビゲーションペインで、
を選択します。ストレージタブで、managed-csiprovisionerがインストールされているかどうかを確認できます。制限事項
サーバーメッセージブロック(SMB)プロトコルを使用するNASファイルシステムはマウントできません。
NASファイルシステムを複数のPodにマウントする場合、Podは同じ仮想プライベートクラウド(VPC)にデプロイする必要があります。異なるVPCのPodにNASファイルシステムをマウントすることはできません。
NASファイルシステムのマウントには、NFSv3プロトコルのみを使用できます。
注意事項
NASは共有ストレージサービスです。NASファイルシステムは複数のPodにマウントできます。NASファイルシステムが複数のPodにマウントされている場合、ファイルシステム内のデータはPod間で共有されます。この場合、NASファイルシステム内のデータが複数のPodによって変更される場合、アプリケーションはPod間でデータを同期できる必要があります。
NASファイルシステムをアプリケーションにマウントする場合、アプリケーションのYAMLファイルに
securityContext.fsgroup
パラメーターを追加しないでください。追加すると、NASファイルシステムがマウントに失敗する可能性があります。説明NASファイルシステムの
/
ディレクトリへのアクセス権限を付与することはできません。ディレクトリが属するユーザーアカウントとユーザーグループは変更できません。NASファイルシステムをマウントした後、NASファイルシステムのマウントターゲットを削除しないでください。削除すると、オペレーティングシステムのハングの問題が発生する可能性があります。
動的にプロビジョニングされたNASボリュームをマウントする
手順1:StorageClassを作成する
ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するおよびCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。
nas-sc.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-shanghai zoneId: cn-shanghai-e vpcId: "vpc-2ze2fxn6popm8c2mzm****" vSwitchId: "vsw-2zwdg25a2b4y5juy****" accessGroupName: DEFAULT_VPC_GROUP_NAME deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
次の表にパラメーターを示します。
重要種類とストレージ仕様が異なるNASファイルシステムは、異なるリージョンとゾーンをサポートしています。ビジネスのストレージ要件、ACSクラスターのリージョン、ACSクラスターのPodが使用するVPCとvSwitchに基づいて、作成するNASファイルシステムとマウントターゲットのリージョン、ゾーン、仮想プライベートクラウド(VPC)、vSwitchを指定します。詳細については、以下のトピックを参照してください。
各タイプのNASファイルシステムのストレージ仕様、パフォーマンス、課金、サポートされているリージョンとゾーンの詳細については、汎用NASファイルシステムとエクストリームNASファイルシステムを参照してください。
汎用NASファイルシステムとエクストリームNASファイルシステムには、マウント接続、ファイルシステムの数、ファイル共有プロトコルに異なる制限があります。詳細については、制限を参照してください。
kubectl get cm -n kube-system acs-profile -o yaml
コマンドを実行して、acs-profileのYAMLファイルを表示し、vpcId
パラメーターとvSwitchIds
パラメーターの値に基づいて、PodのVPC IDとvSwitch IDを取得します。
パラメーター
説明
volumeAs
filesystem
のみがサポートされています。これは、NASファイルシステムが自動的に作成されることを示します。各NASボリュームは、NASファイルシステムに対応しています。fileSystemType
NASファイルシステムのタイプ。
standard
(デフォルト):汎用NASファイルシステム。詳細については、汎用NASファイルシステムを参照してください。extreme
:エクストリームNASファイルシステム。詳細については、エクストリームNASファイルシステムを参照してください。
storageType
NASファイルシステムのストレージタイプ。
汎用NASファイルシステムの場合、次の値がサポートされています。
Performance
(デフォルト)Capacity
エクストリームNASファイルシステムの場合、次の値がサポートされています。
standard
(デフォルト)advanced
regionId
NASファイルシステムが属するリージョンのID。リージョンIDは、ACSクラスターのリージョンIDと同じである必要があります。
zoneId
NASファイルシステムが属するゾーンのID。ACSクラスターのPodが使用するvSwitchに基づいてゾーンを選択します。
vpcId
、vSwitchId
NASファイルシステムのマウントターゲットが属するVPCとvSwitchのID。ACSクラスターのPodが使用するVPCとvSwitchのIDに設定します。
accessGroupName
NASファイルシステムのマウントターゲットが属する権限グループ。デフォルト値:
DEFAULT_VPC_GROUP_NAME
。provisioner
ドライバーのタイプ。パラメーターは
nasplugin.csi.alibabacloud.com
に設定する必要があります。これは、Alibaba CloudがNAS用に提供するContainer Storage Interface(CSI)プラグインが使用されることを示します。reclaimPolicy
永続ボリューム(PV)の再利用ポリシー。
Retain
のみがサポートされています。これは、PVが削除されると、関連するNASファイルシステムとマウントターゲットが保持されることを示します。StorageClassを作成します。
kubectl create -f nas-sc.yaml
StorageClassを表示します。
kubectl get sc
予期される出力:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-nas-fs nasplugin.csi.alibabacloud.com Retain Immediate false 13m ......
手順2:PVCを作成する
次の内容をnas-pvc-fs.yamlという名前のYAMLファイルとして保存します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi
次の表にパラメーターを示します。
パラメーター
説明
accessModes
アクセスモード。
storage
Podに割り当てられるストレージ容量。これは、作成するNASボリュームの容量を指します。
説明エクストリームNASファイルシステムの最小容量制限は100GiBです。StorageClassで定義されているNASファイルシステムのタイプがエクストリームNASファイルシステムの場合、
storage
パラメーターの値は100GiB以上である必要があります。そうでない場合、対応するPVを作成できません。storageClassName
関連付けるStorageClassの名前。
永続ボリュームクレーム(PVC)を作成します。
kubectl create -f nas-pvc-fs.yaml
PVCを表示します。
kubectl get pvc
次の例が返されます。PVCは、自動的に作成されるPVに関連付けられています。NASコンソールにログインして、NASファイルシステムを表示できます。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-fs Bound nas-04a730ba-010d-4fb1-9043-476d8c38**** 20Gi RWX alicloud-nas-fs <unset> 14s
手順3:アプリケーションを作成し、NASボリュームをマウントする
nas-test-fs.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
次のYAMLテンプレートは、2つのPodを含むDeploymentを作成する方法の例を示しています。2つのPodは、
nas-pvc-fs
という名前のPVCを使用してストレージリソースを申請します。2つのPodは、/data
パスにマウントされます。apiVersion: apps/v1 kind: Deployment metadata: name: nas-test labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: nas-pvc-fs
Deploymentを作成し、NASボリュームをマウントします。
kubectl create -f nas-test-fs.yaml
DeploymentによってプロビジョニングされたPodがデプロイされているかどうかを確認します。
kubectl get pod | grep nas-test
次の出力は、2つのPodが作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s
マウントパス内のファイルを表示します。
次のコマンドを実行して、マウントパス内のファイルを表示します。NASファイルシステムのマウントディレクトリ内のデータが返されるはずです。デフォルトでは、データは返されません。
kubectl exec nas-test-****-***a -- ls /data
NASファイルシステムに基づいてデータの共有と永続化が有効になっているかどうかを確認する
前の例で作成したDeploymentは2つのPodをプロビジョニングし、NASファイルシステムがPodにマウントされています。次の手順を実行して、データの共有と永続化が有効になっているかどうかをテストします。
1つのPodでファイルを作成し、別のPodからファイルにアクセスします。アクセスに成功した場合、データ共有は有効になっています。
Deploymentを再作成します。再作成されたPodからNASボリュームにアクセスして、元のデータがNASファイルシステムにまだ存在するかどうかを確認します。データがまだ存在する場合、データの永続化は有効になっています。
Pod情報を表示します。
kubectl get pod | grep nas-test
予期される出力:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s
データ共有が有効になっているかどうかを確認します。
Podにファイルを作成します。
この例では、
nas-test-****-***a
Podを使用します。kubectl exec nas-test-****-***a -- touch /data/test.txt
作成したファイルに別のPodからアクセスします。
この例では、
nas-test-****-***b
Podを使用します。kubectl exec nas-test-****-***b -- ls /data
次の出力は、nas-test-****-***a Podで作成した
test.txt
ファイルにnas-test-****-***b Podからアクセスできることを示しています。test.txt
データの永続化が有効になっているかどうかを確認します。
Deploymentを再作成します。
kubectl rollout restart deploy nas-test
Podが再作成されたら、再作成されたPodを確認します。
kubectl get pod | grep nas-test
予期される出力:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s
再作成されたPodにログインし、ファイルがファイルシステムにまだ存在するかどうかを確認します。
この例では、
nas-test-c***
Podを使用します。kubectl exec nas-test-****-***c -- ls /data
次の出力は、ファイルがNASボリュームにまだ存在し、再作成されたPodのマウントディレクトリからアクセスできることを示しています。
test.txt