アプリケーションで高IOPSとデータ共有が必要な場合は、File Storage NASファイルシステムを永続ボリューム(PV)としてアプリケーションにマウントできます。このトピックでは、静的にプロビジョニングされたNASボリュームをアプリケーションにマウントし、NASボリュームをデータの共有と永続化に使用できるかどうかを確認する方法について説明します。
背景情報
NASは、共有アクセス、スケーラビリティ、高信頼性、高パフォーマンスを特徴とする分散ファイルシステムサービスです。NASは、データ共有と高IOPSが必要なシナリオに適しています。詳細については、ストレージの概要を参照してください。
Alibaba Cloud Container Compute Service(ACS)は、静的および動的にプロビジョニングされたNASボリュームをサポートしています。このトピックでは、静的にプロビジョニングされたNASボリュームをマウントする方法について説明します。動的にプロビジョニングされたNASボリュームをマウントする方法の詳細については、動的にプロビジョニングされたNASボリュームのマウントを参照してください。
前提条件
Alibaba Cloud Container Compute Service(ACS)クラスターに最新バージョンのmanaged-csiprovisionerがインストールされています。
ACSコンソールのACSクラスター管理ページに移動します。クラスター管理ページの左側のナビゲーションペインで、
を選択します。ストレージタブで、managed-csiprovisionerがインストールされているかどうかを確認できます。制限事項
Server Message Block(SMB)プロトコルを使用するNASファイルシステムはマウントできません。
NASファイルシステムを複数のポッドにマウントする場合、ポッドは同じ仮想プライベートクラウド(VPC)にデプロイする必要があります。異なるVPCのポッドにNASファイルシステムをマウントすることはできません。
NASファイルシステムのマウントには、NFSv3プロトコルのみを使用できます。
使用上の注意
NASは共有ストレージサービスです。NASファイルシステムは複数のポッドにマウントできます。NASファイルシステムが複数のポッドにマウントされている場合、ファイルシステム内のデータはポッド間で共有されます。この場合、NASファイルシステム内のデータが複数のポッドによって変更された場合、アプリケーションはポッド間でデータを同期できる必要があります。
NASファイルシステムをアプリケーションにマウントする場合は、アプリケーションのYAMLファイルに
securityContext.fsgroup
パラメーターを追加しないでください。追加すると、NASファイルシステムのマウントに失敗する可能性があります。説明NASファイルシステムの
/
ディレクトリへのアクセス権限を付与することはできません。ディレクトリが属するユーザーアカウントとユーザーグループは変更できません。NASファイルシステムをマウントした後、NASファイルシステムのマウントターゲットを削除しないでください。削除すると、オペレーティングシステムのハングの問題が発生する可能性があります。
NASファイルシステムとマウントターゲットの作成
NASファイルシステムのマウントターゲットと、ファイルシステムをマウントするポッドは、同じVPCに属している必要があります。そうでない場合、ポッドにファイルシステムをマウントすることはできません。ポッドで使用されるVPCとvSwitchにNASファイルシステムとファイルシステムのマウントターゲットがすでに存在する場合は、この手順をスキップできます。
ポッドで使用されているVPCとvSwitchのIDを取得します。
説明このセクションでは、ACSコンソールで実行する必要がある操作について説明します。
kubectl get cm -n kube-system acs-profile -o yaml
コマンドを実行して、acs-profile ConfigMapのYAMLファイルをクエリすることもできます。YAMLファイルでは、vpcId
パラメーターからVPC IDを、vSwitchIds
パラメーターからvSwitch IDを取得できます。ACSコンソールにログオンします。
クラスターで、クラスターのIDをクリックして、クラスター管理ページに移動します。
左側のナビゲーションペインで、
を選択します。ConfigMapページの上部にある[名前空間]ドロップダウンリストからkube-systemを選択します。表示されているacs-profile ConfigMapを見つけて、[アクション]列のYAMLの編集をクリックします。
[YAMLで表示]パネルで、
vpcId
パラメーターからVPC IDを、vSwitchIds
パラメーターからvSwitch IDを取得します。
NASファイルシステムとマウントターゲットを作成します。
NASコンソールにログオンします。
ファイルシステムを作成します。
ファイルシステムリストページで、ファイルシステムの作成をクリックします。次に、汎用NASファイルシステムの作成またはエクストリームNASファイルシステムの作成を選択します。
重要さまざまなタイプのNASファイルシステムの仕様、パフォーマンス、請求ルール、サポートされているリージョンとゾーンの詳細については、汎用NASファイルシステムとエクストリームNASファイルシステムを参照してください。
汎用NASファイルシステムとエクストリームNASファイルシステムでは、マウント接続、ファイルシステムの数、ファイル共有プロトコルの制限が異なります。詳細については、制限を参照してください。
表示されるパネルで、ファイルシステムパラメーターを構成し、今すぐ購入をクリックします。
この例では、汎用NASファイルシステムが作成されます。次の表に、ファイルシステムパラメーターの一部を示します。詳細については、ファイルシステムの作成を参照してください。
パラメーター
説明
リージョン
ACSクラスターが存在するリージョンを選択します。
ゾーン
手順1で取得したゾーンIDに基づいてゾーンを選択します。これにより、ファイルシステムがマウントするポッドと同じゾーンに作成されます。
ProtocolType
NFSを選択します。SMBプロトコルを使用するNASファイルシステムはマウントできません。
VPCとVswitchId
ファイルシステムをマウントするポッドで使用されるVPCとvSwitchを選択します。手順1で取得したVPC IDとvSwitch IDに基づいて、VPCコンソールでVPCとvSwitchを検索できます。
ファイルシステムのマウントターゲットのドメイン名を取得します。
説明システムは、汎用NASファイルシステムのマウントターゲットを自動的に作成します。ただし、エクストリームNASファイルシステムのマウントターゲットは手動で作成する必要があります。詳細については、マウントターゲットの管理を参照してください。
ファイルシステムリストページで、作成したファイルシステムのIDをクリックします。
ファイルシステムの詳細ページの左側のナビゲーションペインで、マウントターゲットをクリックします。
マウントターゲットセクションで、使用可能状態のマウントターゲットが存在するかどうかを確認します。
静的にプロビジョニングされたNASボリュームのマウント
kubectl
手順1:PVCの作成
ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するとCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。
nas-pvc.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc annotations: csi.alibabacloud.com/mountpoint: *******-mw***.cn-shanghai.nas.aliyuncs.com csi.alibabacloud.com/mount-options: nolock,tcp,noresvport spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi storageClassName: alibaba-cloud-nas
次の表に、上記のコードブロックのパラメーターを示します。
パラメーター
説明
csi.alibabacloud.com/mountpoint
マウントするNASファイルシステムのディレクトリ。
値をマウントターゲットのドメイン名(
****-****.<region>.nas.aliyuncs.com
など)に設定すると、NASファイルシステムのルートディレクトリ(/
)がマウントされます。マウントターゲットのドメイン名とサブディレクトリを含む値(
****-****.<region>.nas.aliyuncs.com:/dir
など)を指定すると、NASファイルシステムの/dir
ディレクトリがマウントされます。この場合、/dir
ディレクトリがNASファイルシステムに存在しない場合、システムはファイルシステムにディレクトリを自動的に作成します。
csi.alibabacloud.com/mount-options
NASファイルシステムのマウントに必要なパラメーター。値を
nolock,tcp,noresvport
に設定することをお勧めします。accessModes
PVCのアクセスモード。
storage
ポッドに割り当てられるストレージ容量。これは、NASボリュームの容量でもあります。
PVCを作成します。
kubectl create -f nas-pvc.yaml
PVを確認します。
kubectl get pv
次の出力は、作成したPVCの構成で指定されたNASファイルシステムに関する情報に基づいて、PVが自動的に作成されることを示しています。情報には、ファイルシステムのマウントターゲットが含まれます。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX Retain Bound default/nas-pvc alibaba-cloud-nas 1m58s
PVCを確認します。
kubectl get pvc
次の出力は、PVがPVCに自動的にバインドされることを示しています。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc Bound nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX alibaba-cloud-nas <unset> 2m14s
手順3:アプリケーションを作成し、NASファイルシステムをアプリケーションにマウントする
nas-test.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
次のコードブロックは、2つのポッドをプロビジョニングするDeploymentの構成を指定します。ポッドは、
nas-pvc
PVCを使用してストレージリソースを申請します。これは、ポッドの/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
Deploymentを作成し、NASファイルシステムをDeploymentにマウントします。
kubectl create -f nas-test.yaml
Deploymentによってプロビジョニングされたポッドがデプロイされているかどうかを確認します。
kubectl get pod | grep nas-test
次の出力は、2つのポッドが作成されたことを示しています。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s
マウントパス内のファイルを表示します。
次のコマンドを実行して、マウントパス内のファイルを表示します。NASファイルシステムのマウントディレクトリ内のデータが返されることが予期されます。デフォルトでは、データは返されません。
kubectl exec nas-test-****-***a -- ls /data
コンソール
手順1:PVCの作成
ACSコンソールにログオンします。
クラスターで、クラスターのIDをクリックして、クラスター管理ページに移動します。
クラスター管理ページの左側のナビゲーションペインで、
を選択します。永続ボリュームクレームページで、作成をクリックします。
[PVCの作成]ダイアログボックスで、パラメーターを構成し、作成をクリックします。
パラメーター
説明
例
PVCタイプ
NASを選択します。
NAS
名前
PVCのカスタム名を入力します。名前は、コンソールに表示される形式の要件を満たしている必要があります。
nas-pvc
割り当てモード
マウントターゲットドメイン名を使用を選択します。
マウントターゲットドメイン名を使用
ボリュームプラグイン
デフォルトでは、CSIが選択されています。
CSI
容量
ポッドに割り当てられるストレージ容量。これは、NASボリュームの容量でもあります。
20Gi
アクセスモード
ReadWriteManyまたはReadWriteOnceを選択できます。
ReadWriteMany
マウントターゲットドメイン名
マウントするNASファイルシステムのディレクトリ。
値をマウントターゲットのドメイン名(
****-****.<region>.nas.aliyuncs.com
など)に設定すると、NASファイルシステムのルートディレクトリ(/
)がマウントされます。マウントターゲットのドメイン名とサブディレクトリを含む値(
****-****.<region>.nas.aliyuncs.com:/dir
など)を指定すると、NASファイルシステムの/dir
ディレクトリがマウントされます。この場合、/dir
ディレクトリがNASファイルシステムに存在しない場合、システムはファイルシステムにディレクトリを自動的に作成します。
350514****-mw***.cn-shanghai.nas.aliyuncs.com
PVCを作成した後、永続ボリュームクレームページでPVCを表示できます。PVはPVCにマウントされます。PVに関する情報は、永続ボリュームページで表示できます。
手順2:アプリケーションを作成し、NASファイルシステムをアプリケーションにマウントする
クラスター管理ページの左側のナビゲーションペインで、
を選択します。デプロイメントタブで、イメージから作成をクリックします。
パラメーターを構成し、作成をクリックします。
次の表に、パラメーターの一部を示します。その他のパラメーターにはデフォルト値を使用します。詳細については、Deploymentを使用してステートレスアプリケーションを作成するを参照してください。
ウィザードページ
パラメーター
説明
例
基本情報
名前
Deploymentのカスタム名を入力します。名前は、コンソールに表示される形式の要件を満たしている必要があります。
nas-test
レプリカ
Deploymentによってプロビジョニングされるポッドレプリカの数。
2
コンテナー
イメージ名
アプリケーションのデプロイに使用されるイメージのアドレス。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
必要なリソース
アプリケーションに必要なvCoreの数とメモリの量を指定します。
0.25 vCoreと0.5 GiBのメモリ
ボリューム
PVCの追加をクリックして、パラメーターを構成します。
マウントソース:作成したPVCを選択します。
コンテナーパス:NASファイルシステムをマウントするコンテナーパスを指定します。
マウントソース:nas-pvc。
コンテナーパス:/data。
アプリケーションがデプロイされているかどうかを確認します。
デプロイメントページで、管理するアプリケーションの名前をクリックします。
ポッドタブで、ポッドが[実行中]状態かどうかを確認します。
NASファイルシステムに基づいてデータの共有と永続化が有効になっているかどうかを確認する
前の例で作成したDeploymentは2つのポッドをプロビジョニングし、NASファイルシステムがポッドにマウントされます。次の手順を実行して、データの共有と永続化が有効になっているかどうかをテストします。
1つのポッドにファイルを作成し、別のポッドからファイルにアクセスします。アクセスが成功した場合、データ共有は有効になっています。
Deploymentを再作成します。再作成されたポッドからNASボリュームにアクセスして、元のデータがNASファイルシステムにまだ存在するかどうかを確認します。データがまだ存在する場合、データの永続化は有効になっています。
ポッド情報を表示します。
kubectl get pod | grep nas-test
予期される出力:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s
データ共有が有効になっているかどうかを確認します。
ポッドにファイルを作成します。
この例では、
nas-test-****-***a
ポッドが使用されます。kubectl exec nas-test-****-***a -- touch /data/test.txt
別のポッドから作成したファイルにアクセスします。
この例では、
nas-test-****-***b
ポッドが使用されます。kubectl exec nas-test-****-***b -- ls /data
次の出力は、nas-test-****-***aポッドで作成した
test.txt
ファイルにnas-test-****-***bポッドからアクセスできることを示しています。test.txt
データの永続化が有効になっているかどうかを確認します。
Deploymentを再作成します。
kubectl rollout restart deploy nas-test
ポッドが再作成された後、再作成されたポッドを確認します。
kubectl get pod | grep nas-test
予期される出力:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s
再作成されたポッドにログオンし、ファイルがファイルシステムにまだ存在するかどうかを確認します。
この例では、
nas-test-c***
ポッドが使用されます。kubectl exec nas-test-****-***c -- ls /data
次の出力は、ファイルがまだNASボリュームに存在し、再作成されたポッドのマウントディレクトリからアクセスできることを示しています。
test.txt