ファイルストレージ NAS (NAS) ボリュームは、ビッグデータ分析、データ共有、Web アプリケーション、ログストレージなどのシナリオに適しています。静的プロビジョニングに加えて、動的プロビジョニングを使用して、永続ボリューム要求 (PVC) と StorageClass に基づいて永続ボリューム (PV) を自動的に予約するようにシステムを構成できます。 subpath、sharepath、または filesystem モードを使用して、動的にプロビジョニングされた NAS ボリュームをマウントできます。
前提条件
CSI プラグインがクラスターにインストールされています。 csi-plugin と csi-provisioner の更新方法の詳細については、「csi-plugin と csi-provisioner を更新する」をご参照ください。
説明クラスターで FlexVolume を使用している場合は、FlexVolume は非推奨であるため、FlexVolume を CSI にアップグレードしてください。詳細については、「FlexVolume から CSI へのアップグレード」をご参照ください。 を選択し、[ストレージ] タブをクリックして、ストレージコンポーネントの種類を確認します。
kubectl クライアントがクラスターに接続されています。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
NAS がアクティブ化されています。
NAS の製品ページに初めてアクセスする場合は、指示に従ってアクティブ化してください。
制限事項
サーバー メッセージ ブロック (SMB) プロトコルを使用する NAS ファイルシステムはマウントできません。
NAS ファイルシステムを複数のポッドにマウントする場合、ポッドは同じ仮想プライベートクラウド (VPC) にデプロイする必要があります。異なる VPC のポッドに NAS ファイルシステムをマウントすることはできません。
説明NAS ファイルシステムは、同じ VPC 内の異なるゾーンにあるポッドにマウントできます。
汎用 NAS ファイルシステムと超高速型 NAS ファイルシステムでは、マウントのシナリオ、ファイルシステムの数、ファイル共有プロトコルに異なる制限があります。サポートされている状態の詳細については、「制限」をご参照ください。
使用上の注意
NAS は共有ストレージサービスです。 NAS ボリュームは複数のポッドにマウントできます。複数のポッドが同時にデータを書き込む場合、アプリケーションはデータの整合性を独自に確保する必要があります。 NAS への同時書き込みの制限の詳細については、「複数のプロセスまたはクライアントがログファイルに同時にデータを書き込むときに発生する可能性のある例外を防ぐにはどうすればよいですか?」および「NFS ファイルシステムへのデータ書き込みのレイテンシを解決するにはどうすればよいですか?」をご参照ください。
マウントポイントが作成された後、マウントポイントの [ステータス] が [使用可能] に変わるまで待ちます。マウントポイントは削除しないでください。削除すると、システムが応答しなくなります。
超高速型 NAS ファイルシステムをマウントするには、NAS ボリュームの
path
パラメーターを/share
のサブディレクトリに設定します。たとえば、0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/share/subpath
という値は、マウントされた NAS ファイルシステムのサブディレクトリが/share/subpath
であることを指定します。アプリケーションテンプレートで securityContext.fsgroup パラメーターが構成されている場合、kubelet はボリュームのマウント後に
chmod
またはchown
操作を実行するため、時間がかかります。 securityContext.fsgroup パラメーターが構成されている場合のマウントプロセスの高速化方法の詳細については、「NAS ボリュームのマウントに時間がかかるのはなぜですか?」をご参照ください。
マウントの説明
subpath、sharepath、または filesystem モードを使用して、動的にプロビジョニングされた NAS ボリュームをマウントできます。 subpath モードまたは sharepath モードを使用する場合は、事前に NAS ファイルシステムとマウントポイントを作成する必要があります。 filesystem モードを使用する場合は、事前に NAS ファイルシステムまたはマウントポイントを作成する必要はありません。
subpath モード: 複数のアプリケーションまたはポッドが同じ NAS ファイルシステムを使用してデータを共有する必要がある場合、または NAS ファイルシステムの異なるサブディレクトリを異なるポッドにマウントする場合は、subpath モードを使用します。
sharepath モード: NAS ファイルシステムを異なる名前空間に属する複数のポッドにマウントする場合は、sharepath モードを使用します。
filesystem モード: アプリケーションが NAS ファイルシステムとマウントポイントを動的に作成または削除する必要がある場合、コンテナー ストレージ インターフェース (CSI) プラグインは、PVC が作成されるときに NAS ファイルシステムとマウントポイントを自動的に作成します。 PVC が作成されると、NAS ファイルシステムが作成されます。 PVC が削除されると、マウントポイントと NAS ファイルシステムは動的に削除されます。 filesystem モードで NAS ボリュームをマウントするには、kubectl のみを使用できます。
手順 1: NAS ファイルシステムとマウントポイントを作成する
さまざまなタイプの NAS ファイルシステムが、さまざまなリージョンとゾーンで利用可能です。ビジネス要件、Container Service for Kubernetes (ACK) クラスターのリージョン、および ACK クラスター内のポッドで使用される VPC と vSwitch に基づいて、作成する NAS ファイルシステムとマウントポイントを指定します。
さまざまなタイプの NAS ファイルシステムの仕様、パフォーマンス、課金、およびサポートされているリージョンとゾーンの詳細については、「汎用 NAS ファイルシステム」および「超高速型 NAS ファイルシステム」をご参照ください。
汎用 NAS ファイルシステムと超高速型 NAS ファイルシステムでは、マウントの接続性、ファイルシステムの数、ファイル共有プロトコルに異なる制限があります。詳細については、「制限」をご参照ください。
NAS コンソール にログインします。
NAS ファイルシステムを作成します。詳細については、「ファイルシステムを作成する」をご参照ください。
[ファイルシステムリスト] ページで、[ファイルシステムの作成] をクリックします。次に、[汎用 NAS ファイルシステムの作成] または [超高速型 NAS ファイルシステムの作成] を選択します。
表示されるパネルで、ファイルシステムパラメーターを構成し、[今すぐ購入] をクリックします。
この例では、汎用 NAS ファイルシステムが作成されます。次の表に、ファイルシステムパラメーターの一部を示します。詳細については、「ファイルシステムを作成する」をご参照ください。
パラメーター
説明
[リージョン]
クラスターが配置されているリージョンを選択します。
[ゾーン]
ゾーンを選択します。
説明NAS ファイルシステムは、同じ VPC 内の異なるゾーンにあるポッドにマウントできます。パフォーマンスを向上させるために、1 つのゾーンのみを選択することをお勧めします。
[プロトコルタイプ]
[NFS] を選択します。 SMB プロトコルを使用する NAS ファイルシステムはマウントできません。
[VPC] と [vSwitch]
このパラメーターは、汎用 NAS ファイルシステムでのみ使用できます。
クラスター内のポッドで使用される VPC と vSwitch を選択します。
手順 2: 動的にプロビジョニングされた NAS ボリュームをマウントする
subpath モードを使用する
kubectl を使用する
1. 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: mountOptions フィールドに NAS ファイルシステムの options を設定します。たとえば、使用する NFS バージョンを指定できます。 */ /* volumeAs: subpath に設定します。有効な値: subpath: NAS ファイルシステムのサブディレクトリを PV としてマウントします。NAS ファイルシステムとマウントポイントを手動で作成する必要があります。PV は、NAS ファイルシステムのサブディレクトリに対応します。 */ /* server: NAS ファイルシステムのサブディレクトリを PV としてマウントする場合、NAS ファイルシステムのマウントポイント。このパラメーターを空のままにすると、デフォルトで / が使用されます。 */ /* provisioner: ドライバーのタイプ。この例では、パラメーターは nasplugin.csi.alibabacloud.com に設定されています。これは、Alibaba Cloud が提供する NAS CSI プラグインが使用されていることを示します。 */ /* reclaimPolicy: PV の再利用ポリシー。デフォルト値: Delete。値を Retain に設定することもできます。 */
パラメーター
説明
allowVolumeExpansion
このパラメーターは、パフォーマンス汎用型 NAS ファイルシステムでのみ使用できます。このパラメーターを true に設定すると、NAS ディレクトリクォータが StorageClass に基づいて動的にプロビジョニングされた PV に対して構成されます。PVC を変更してボリュームを拡張できます。
説明NAS ディレクトリクォータは非同期的に有効になります。 PV が動的にプロビジョニングされた後、ディレクトリクォータはすぐに有効にならず、短期間に大量のデータが書き込まれた場合、クォータを超える可能性があります。 NAS ディレクトリクォータの詳細については、「ディレクトリクォータを管理する」をご参照ください。
mountOptions
mountOptions
フィールドに NAS ファイルシステムのoptions
を設定します。たとえば、使用する NFS バージョンを指定できます。volumeAs
subpath
に設定します。有効な値:subpath
: NAS ファイルシステムのサブディレクトリを PV としてマウントします。 NAS ファイルシステムとマウントポイントを手動で作成する必要があります。 PV は NAS ファイルシステムのサブディレクトリに対応します。sharepath
: PV の作成時にディレクトリは作成されませんが、StorageClass で指定されたパスが使用されます。つまり、各 PV は同じ NAS ディレクトリに対応します。これは、名前空間間でディレクトリを共有するシナリオに適しています。filesystem
: プロビジョナーが NAS ファイルシステムを自動的に作成します。各 PV は NAS ファイルシステムに対応します。
server
NAS ファイルシステムのサブディレクトリを PV としてマウントする場合、NAS ファイルシステムのマウントポイント。このパラメーターを空のままにすると、デフォルトで / が使用されます。
重要実際のマウントポイントを指定する必要があります。マウントポイントのドメイン名のクエリ方法の詳細については、「マウントポイントを管理する」をご参照ください。
provisioner
ドライバーのタイプ。この例では、パラメーターは
nasplugin.csi.alibabacloud.com
に設定されています。これは、Alibaba Cloud が提供する NAS CSI プラグインが使用されていることを示します。reclaimPolicy
PV の再利用ポリシー。デフォルト値:
Delete
。値をRetain
に設定することもできます。Delete: このポリシーを使用する場合は、
archiveOnDelete
パラメーターも指定する必要があります。archiveOnDelete
パラメーターをtrue
に設定すると、PVC を削除した後、PVC に関連付けられた PV および NAS ファイルシステム内のファイルの名前が変更され、保持されます。archiveOnDelete
パラメーターをfalse
に設定すると、PVC を削除した後、PVC に関連付けられた PV および NAS ファイルシステム内のファイルが削除されます。説明NAS サブパスディレクトリとその中のファイルのみが削除されます。 NAS ファイルシステムを削除するには、「ファイルシステムを削除する」をご参照ください。
Retain: PVC が削除されると、関連付けられた PV および NAS ファイルシステム内のファイルは保持され、手動でのみ削除できます。
データセキュリティの要件が高い場合は、ユーザーエラーによるデータ損失を防ぐために、
Retain
ポリシーを使用することをお勧めします。archiveOnDelete
reclaimPolicy
パラメーターがDelete
に設定されている場合に、バックエンドストレージ内のファイルを削除するかどうかを指定します。 NAS は共有ストレージサービスです。データセキュリティを確保するには、reclaimPolicy パラメーターと archiveOnDelete パラメーターの両方を指定する必要があります。parameters
セクションでポリシーを構成します。デフォルト値:
true
。これは、PVC が削除されたときにサブディレクトリまたはファイルが削除されないことを示します。代わりに、サブディレクトリまたはファイルの名前はarchived-{pvName}.{timestamp}
の形式に変更されます。このパラメーターを
false
に設定すると、PVC が削除されたときにバックエンドストレージが削除されます。
説明サービスが大量のネットワークトラフィックを受信している場合は、このパラメーターを false に設定しないことをお勧めします。詳細については、「動的にプロビジョニングされた NAS ボリュームを使用しているときに、alicloud-nas-controller のタスクキューがいっぱいになり、PV を作成できない場合はどうすればよいですか?」をご参照ください。
バックエンドストレージからファイルデータを完全に削除するには、
parameters.archiveOnDelete
を追加し、kubectl
メソッドを使用してfalse
に設定する必要があります。
次のコマンドを実行して StorageClass を作成します。
kubectl create -f alicloud-nas-subpath.yaml
2. 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 の名前。 */ /* storage: PVC によって要求されるストレージ。 */
パラメーター
説明
name
PVC の名前。
accessModes
PV のアクセスモード。デフォルト値は
ReadWriteMany
です。値をReadWriteOnce
またはReadOnlyMany
に設定することもできます。storageClassName
PVC に関連付ける StorageClass の名前。
storage
PVC によって要求されるストレージ。
重要このパラメーターで設定された容量は、アプリケーションが使用できる実際の容量を制限するものではなく、自動スケーリングも許可しません。 NAS ディレクトリのクォータは、NAS ファイルシステムが汎用であり、StorageClass の
allowVolumeExpansion
パラメーターがtrue
に設定されている場合にのみ設定されます。詳細については、「動的にプロビジョニングされた NAS ボリュームを拡張する」をご参照ください。ディレクトリのクォータが有効になると、CSI は PVC 容量に基づいて NAS ディレクトリのクォータを設定します。 NAS ディレクトリクォータは GiB 単位で測定され、実際のクォータは PVC 容量を GiB 単位の最も近い整数に切り上げて計算されます。
PVC を作成します。
kubectl create -f pvc.yaml
3. アプリケーションを作成し、NAS ファイルシステムをアプリケーションにマウントする
nginx-1 と nginx-2 という名前の 2 つのアプリケーションをデプロイして、NAS ファイルシステムの同じサブディレクトリを共有します。
nginx-1.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 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 が使用されています。 */
mountPath
: コンテナ内の NAS ファイルシステムのマウントパス。claimName
: アプリケーションが NAS ファイルシステムのマウントに使用する PVC の名前。この例では、nas-csi-pvc
が使用されています。
nginx-2.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 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 に設定されています。 */
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-a**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
NAS ファイルシステムの
/data
サブディレクトリは異なるポッドにマウントされます。マウントポイントが0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/nas-79438493-f3e0-11e9-bbe5-00163e09****
である NAS ボリュームは、/データdeployment-nas-1-5b5cdb85f6-a****
アプリケーションとdeployment-nas-2-c5bb4746c-b****
アプリケーションの /data ディレクトリにマウントされます。/k8s
: StorageClass の構成で指定されているように、サブディレクトリは subpath モードでマウントされます。nas-79438493-f3e0-11e9-bbe5-00163e09****
: 自動的に作成された PV の名前。
説明NAS ファイルシステムの異なるサブディレクトリを異なるポッドにマウントするには、ポッドごとに個別の PVC を作成する必要があります。この例では、pvc-1 は nginx-1 用に作成され、pvc-2 は nginx-2 用に作成されます。
ACK コンソールを使用する
1. StorageClass を作成する
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[StorageClass] ページで、[作成] をクリックします。
[作成] ダイアログボックスで、StorageClass を構成し、[作成] をクリックします。
次の表にパラメーターを示します。
パラメーター
説明
例
[名前]
StorageClass の名前。コンソールに表示される形式の要件に従ってください。
alicloud-nas-subpath
[PV タイプ]
[NAS] を選択します。
NAS
[マウントポイントを選択]
NAS ファイルシステムのマウントポイント。マウントポイントのドメイン名のクエリ方法の詳細については、「マウントポイントを管理する」をご参照ください。
使用可能なマウントポイントがない場合は、最初に NAS ファイルシステムを作成します。詳細については、「NAS ファイルシステムとマウントポイントを作成する」をご参照ください。
0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/
[ボリュームモード]
ボリュームのアクセスモード。デフォルトでは [共有ディレクトリ] が選択されています。有効な値:
[共有ディレクトリ]: NAS ボリュームは sharepath モードでマウントされます。すべてのボリュームが同じパスを共有します。つまり、データは
<bucket>:<path>/
に保存されます。[サブディレクトリ]: NAS ボリュームは subpath モードでマウントされます。ボリュームを作成すると、マウントパスにサブディレクトリが自動的に作成されます。つまり、データは
<bucket>:<path>/<pv-name>/
に保存されます。説明[サブディレクトリ] モードは、CSI プラグインのバージョンが 1.31.4 以降の場合にのみ有効になります。それ以外の場合は、[共有ディレクトリ] モードが使用されます。
サブディレクトリ
[マウントパス]
NAS ファイルシステムのマウントパス。
指定したサブディレクトリが存在しない場合、システムは NAS ファイルシステムにサブディレクトリを自動的に作成し、そのサブディレクトリをクラスターにマウントします。
このパラメーターを構成しない場合、NAS ファイルシステムのルートディレクトリがマウントされます。
超高速型 NAS ファイルシステムをマウントする場合は、このパラメーターを
/share
ディレクトリのサブディレクトリに設定します。例:/share/data
。
/
[再利用ポリシー]
再利用ポリシー。有効な値: [削除] と [保持]。デフォルト値: [削除]。
説明archiveOnDelete
などのパラメーターは、コンソールを介して構成できません。したがって、バックエンド NAS ストレージ内のファイルを完全に削除することはできません。完全に削除するには、kubectl
メソッドを使用します。[削除]: このポリシーを使用する場合は、
archiveOnDelete
パラメーターを構成する必要があります。archiveOnDelete
パラメーターをtrue
に設定すると、PVC を削除した後、PVC に関連付けられた PV および NAS ファイルシステム内のファイルの名前が変更され、保持されます。archiveOnDelete
パラメーターをfalse
に設定すると、PVC を削除した後、PVC に関連付けられた PV および NAS ファイルシステム内のファイルが削除されます。
[保持]: PVC が削除されると、関連する PV および NAS ファイルシステム内のファイルは保持され、手動でのみ削除できます。
データセキュリティの要件が高い場合は、ユーザーエラーによるデータ損失を防ぐために、[保持] ポリシーを使用することをお勧めします。
保持
[マウントオプション]
マウントオプション (ネットワーク ファイル システム (NFS) バージョンなど)。
NFS v3 を使用することをお勧めします。超高速型 NAS ファイルシステムは NFS v3 のみをサポートしています。NFS プロトコルの詳細については、「NFS」をご参照ください。
デフォルト設定を保持します。
StorageClass を作成した後、[StorageClass] ページで StorageClass を表示できます。
2. PVC を作成する
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[永続ボリューム要求] ページで、[作成] をクリックします。
[PVC の作成] ダイアログボックスで、パラメーターを構成し、[作成] をクリックします。
パラメーター
説明
例
[PVC タイプ]
NAS を選択します。
NAS
[名前]
PVC の名前。名前はクラスター内で一意である必要があります。
pvc-nas
[割り当てモード]
[StorageClass を使用する] を選択します。
StorageClass を使用する
[既存の Storage Class]
[選択] をクリックします。 [Storage Class の選択] ダイアログボックスで、使用する StorageClass を見つけ、[アクション] 列の [選択] をクリックします。
前の手順で作成した alicloud-nas-subpath StorageClass を選択します。
[容量]
PVC によって要求される容量。このパラメーターの値は、アプリケーションで使用できる最大容量の制限を指定するものではありません。
重要このパラメーターで設定された容量は、アプリケーションが使用できる実際の容量を制限するものではなく、自動スケーリングも許可しません。 NAS ディレクトリのクォータは、NAS ファイルシステムが汎用であり、StorageClass の
allowVolumeExpansion
パラメーターがtrue
に設定されている場合にのみ設定されます。詳細については、「動的にプロビジョニングされた NAS ボリュームを拡張する」をご参照ください。ディレクトリのクォータが有効になると、CSI は PVC 容量に基づいて NAS ディレクトリのクォータを設定します。 NAS ディレクトリクォータは GiB 単位で測定され、実際のクォータは PVC 容量を GiB 単位の最も近い整数に切り上げて計算されます。
20Gi
[アクセスモード]
デフォルト値: [ReadWriteMany]。値を [ReadWriteOnce] または [ReadOnlyMany] に設定することもできます。
ReadWriteMany
3. アプリケーションを作成し、NAS ファイルシステムをアプリケーションにマウントする
deployment-nas-1 と deployment-nas-2 という名前のアプリケーションを作成するには、次の操作を実行します。アプリケーションが NAS ファイルシステムの同じサブディレクトリを共有していることを確認します。
詳細ページの左側のナビゲーションウィンドウで、
を選択します。[デプロイメント] タブで、[イメージから作成] をクリックします。
アプリケーションパラメーターを構成します。
次の表に主要なパラメーターを示します。その他のパラメーターにはデフォルト設定を使用します。詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。
項目
パラメーター
説明
例
[基本情報]
[名前]
デプロイメントのカスタム名を入力します。名前はコンソールに表示される形式の要件に従う必要があります。
deployment-nas-1
[レプリカ]
デプロイメントのレプリカ数。
2
[コンテナー]
[イメージ名]
アプリケーションのデプロイに使用されるイメージのアドレス。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
[必要なリソース]
必要な vCPU とメモリリソース。
0.25 vCores と512 MiB
ボリューム
[PVC を追加] をクリックし、パラメーターを構成します。
[マウント ソース]: 作成した PVC を選択します。
[コンテナー パス]: NAS ファイルシステムをマウントするコンテナー パスを指定します。
マウント ソース: pvc-nas
コンテナ パス: /data
次のコマンドを実行して、アプリケーションのデプロイメントの進行状況をクエリします。
[デプロイメント] ページで、管理するアプリケーションの名前をクリックします。
[ポッド] タブで、ポッドが [実行中] 状態であるかどうかを確認します。
共有パスモードを使用する
kubectl を使用する
1. StorageClass を作成する
alicloud-nas-sharepath.yaml という名前のファイルを作成し、次の内容をファイルにコピーして、ビジネス要件に基づいてパラメーターを変更します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-sharepath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: sharepath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/data" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
パラメーター
説明
mountOptions
ネットワーク ファイル システム (NFS) バージョンなどのマウント オプション。
NFS v3 を使用することをお勧めします。超高速型 NAS ファイルシステムは NFS v3 のみをサポートします。NFS プロトコルについて詳しくは、「NFS」をご参照ください。
volumeAs
sharepath
に設定します。有効な値:subpath
: NAS ファイルシステムのサブディレクトリを PV としてマウントします。NAS ファイルシステムとマウント ターゲットを手動で作成する必要があります。PV は、NAS ファイルシステムのサブディレクトリに対応します。sharepath
: PV の作成時にディレクトリは作成されませんが、StorageClass で指定されたパスが使用されます。これは、各 PV が同じ NAS ディレクトリに対応することを意味し、名前空間間でディレクトリが共有されるシナリオに適しています。filesystem
: プロビジョナーが NAS ファイルシステムを自動的に作成します。各 PV は NAS ファイルシステムに対応します。
server
NAS ファイルシステムのサブディレクトリを PV としてマウントする場合、NAS ファイルシステムのマウント ターゲットとマウント パス。マウント パスを設定しない場合、デフォルトで
/
が使用されます。重要実際のマウント ターゲットを指定する必要があります。マウント ターゲットのドメイン名を表示する方法について詳しくは、「マウント ターゲットの管理」をご参照ください。
provisioner
ドライバーのタイプ。この例では、パラメーターは
nasplugin.csi.alibabacloud.com
に設定されています。これは、Alibaba Cloud が NAS 用に提供する CSI プラグインが使用されていることを示します。reclaimPolicy
sharepath
モードを使用する場合は、Retain
を選択する必要があります。StorageClass を作成します。
kubectl create -f alicloud-nas-sharepath.yaml
2. 異なる名前空間で PVC を作成する
NAS ファイルシステムを異なる名前空間のポッドにマウントするには、2 つの名前空間を作成する必要があります。
次のコマンドを実行して、ns1 と ns2 という名前の名前空間を作成します。
kubectl create ns ns1 kubectl create ns ns2
pvc.yaml という名前のファイルを作成し、次の内容をファイルにコピーして、ビジネス要件に基づいてパラメーターを変更します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc namespace: ns1 spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-sharepath resources: requests: storage: 20Gi --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc namespace: ns2 spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-sharepath resources: requests: storage: 20Gi
パラメーター
説明
name
PVC の名前。
accessModes
PV のアクセス モード。デフォルト値は
ReadWriteMany
です。ReadWriteOnce
またはReadOnlyMany
に設定することもできます。storageClassName
PVC に関連付ける StorageClass の名前。
storage
PVC によって要求されるストレージ。
重要sharepath モードを使用する場合、このパラメーターは有効になりません。
PVC を作成します。
kubectl create -f pvc.yaml
3. アプリケーションを作成し、NAS ファイルシステムをアプリケーションにマウントする
異なる名前空間にアプリケーションを作成し、対応する名前空間に作成された PVC をマウントします。アプリケーションは、StorageClass で定義された NAS ボリュームを共有します。
nginx.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。このファイルには 2 つのデプロイメントが含まれています。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: ns1 spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: ns2 spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 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
が使用されています。
アプリケーションを作成します。
kubectl create -f nginx.yaml
ポッド情報を確認します。
kubectl get pod -A -l app=nginx
予想される出力:
NAMESPACE NAME READY STATUS RESTARTS AGE ns1 nginx-5b5cdb85f6-a**** 1/1 Running 0 32s ns2 nginx-c5bb4746c-b**** 1/1 Running 0 32s
NASファイルシステムの
/data
サブディレクトリを、異なる名前空間のポッドにマウントします。 マウント対象が0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/data
であるNASボリュームは、nginx-5b5cdb85f6-a****
およびnginx-c5bb4746c-b****
アプリケーションの/dataディレクトリにマウントされます。
ACK コンソールを使用する
1. StorageClass を作成する
ACK コンソール にログインします。左側のナビゲーション ウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[StorageClass] ページで、[作成] をクリックします。
[作成] ダイアログ ボックスで、StorageClass を設定し、[作成] をクリックします。
次の表にパラメーターを示します。
パラメーター
説明
例
[名前]
StorageClass の名前。コンソールに表示される形式の要件に従ってください。
alicloud-nas-sharepath
[PV タイプ]
[NAS] を選択します。
NAS
[マウント ターゲットを選択]
NAS ファイルシステムのマウント ターゲット。マウント ターゲットのドメイン名のクエリ方法について詳しくは、「マウント ターゲットの管理」をご参照ください。
使用可能なマウント ターゲットがない場合は、最初に NAS ファイルシステムを作成します。詳細については、「NAS ファイルシステムとマウント ターゲットを作成する」をご参照ください。
0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/data
[ボリューム モード]
ボリュームのアクセス モード。デフォルトでは [共有ディレクトリ] が選択されています。有効な値:
[共有ディレクトリ]: NAS ボリュームは sharepath モードでマウントされます。PV の作成時にディレクトリは作成されませんが、StorageClass で指定されたパスが使用されます。これは、各 PV が同じ NAS ディレクトリに対応することを意味し、名前空間間でディレクトリが共有されるシナリオに適しています。
[サブディレクトリ]: NAS ボリュームは subpath モードでマウントされます。NAS ファイルシステムのサブディレクトリを PV としてマウントします。NAS ファイルシステムとマウント ターゲットを手動で作成する必要があります。PV は、NAS ファイルシステムのサブディレクトリに対応します。
共有ディレクトリ
[マウント パス]
NAS ファイルシステムのマウント パス。
指定されたサブディレクトリが存在しない場合、システムは NAS ファイルシステムにサブディレクトリを自動的に作成し、そのサブディレクトリをクラスターにマウントします。
このパラメーターを設定しない場合、NAS ファイルシステムのルート ディレクトリがマウントされます。
超高速型 NAS ファイルシステムをマウントする場合、このパラメーターを
/share
ディレクトリのサブディレクトリに設定します。例:/share/data
。
/
[再利用ポリシー]
sharepath
モードを使用する場合は、Retain
を選択する必要があります。Retain
[マウント オプション]
ネットワーク ファイル システム (NFS) バージョンなどのマウント オプション。
NFS v3 を使用することをお勧めします。超高速型 NAS ファイルシステムは NFS v3 のみをサポートします。NFS プロトコルについて詳しくは、「NFS」をご参照ください。
デフォルト設定を保持します。
StorageClass を作成した後、[StorageClass] ページで StorageClass を表示できます。
2. PVC を作成する
名前空間間で共有ディレクトリをマウントするには、コンソールで ns1 と ns2 の名前空間を作成する必要があります。
ns1 と ns2 の名前空間を作成します。詳細については、「名前空間とリソース クォータの管理」をご参照ください。
詳細ページの左側のナビゲーション ウィンドウで、 を選択します。
[永続ボリューム クレーム] ページで、[名前空間] セクションの [ns1] を選択し、[作成] をクリックします。
[PVC の作成] ダイアログ ボックスで、パラメーターを設定し、[作成] をクリックします。
パラメーター
説明
例
[PVC タイプ]
NAS を選択します。
NAS
[名前]
PVC の名前。名前はクラスター内で一意である必要があります。
pvc-nas
[割り当てモード]
PVC の割り当てモード。この例では、[StorageClass を使用する] が選択されています。
StorageClass を使用する
[既存の StorageClass]
[選択] をクリックします。[StorageClass の選択] ダイアログ ボックスで、使用する StorageClass を見つけ、[アクション] 列の [選択] をクリックします。
前の手順で作成した alicloud-nas-sharepath StorageClass を選択します。
[容量]
PVC によって要求される容量。
20Gi
[アクセス モード]
デフォルト値: [ReadWriteMany]。[ReadWriteOnce] または [ReadOnlyMany] に設定することもできます。
ReadWriteMany
上記の手順を実行して、ns2 名前空間に pvc-nas を作成します。
3. アプリケーションを作成し、NAS ファイルシステムをアプリケーションにマウントする
詳細ページの左側のナビゲーション ウィンドウで、
を選択します。[デプロイメント] ページの上部で、[名前空間] セクションの [ns1] を選択し、[イメージから作成] をクリックします。
アプリケーション パラメーターを設定します。
次の表に主要なパラメーターを示します。その他のパラメーターについては、デフォルト設定を使用します。詳細については、「デプロイメントを使用してステートレス アプリケーションを作成する」をご参照ください。
項目
パラメーター
説明
例
[基本情報]
[名前]
デプロイメントのカスタム名を入力します。名前は、コンソールに表示される形式の要件に従う必要があります。
nginx
[レプリカ]
デプロイメントのレプリカ数。
2
[コンテナー]
[イメージ名]
アプリケーションのデプロイに使用されるイメージのアドレス。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
[必要なリソース]
必要な vCPU とメモリー リソース。
0.25 vCore と 512 MiB のメモリー
[ボリューム]
[PVC を追加] をクリックして、パラメーターを設定します。
[マウント ソース]: 作成した PVC を選択します。
[コンテナー パス]: NAS ファイルシステムをマウントするコンテナー パスを指定します。
マウント ソース: pvc-nas
コンテナー パス: /data
上記の手順を実行して、ns2 名前空間に nginx という名前のアプリケーションを作成します。
次のコマンドを実行して、アプリケーションのデプロイメントの進行状況をクエリします。
[デプロイメント] ページで、管理するアプリケーションの名前をクリックします。
[ポッド] タブで、ポッドが [実行中] 状態であるかどうかを確認します。
ステップ 3:NAS のストレージパフォーマンスを確認する
前のステップで作成したデプロイメントには、2 つのポッドが含まれています。2 つのポッドは、同じ NAS ファイルシステムにマウントされています。次のいずれかの方法を使用して、NAS ボリュームがデータを永続化および共有できることを確認できます。
ポッドを再作成します。再作成されたポッドから NAS ボリュームにアクセスし、元のデータが NAS ファイルシステムにまだ存在するかどうかを確認します。データがまだ存在する場合、データの永続性は有効になっています。
1 つのポッドにファイルを作成し、もう 1 つのポッドからそのファイルにアクセスします。ファイルにアクセスできる場合、データ共有は有効になっています。
NAS ファイルシステムを使用してデータを永続化できることを確認する
次のコマンドを実行して、アプリケーション用に作成されたポッドをクエリします。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-a**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
ポッドにファイルを作成します。
アプリケーションにマウントされている
/data
パスにファイルが存在するかどうかを確認します。この例では、ポッド
deployment-nas-1-5b5cdb85f6-a****
を使用します。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data
出力は返されません。これは、/data パスにファイルが存在しないことを示します。
次のコマンドを実行して、ポッドの
/data
パスに nas という名前のファイルを作成します。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- touch /data/nas
別のポッドから作成したファイルにアクセスします。
この例では、ポッド
deployment-nas-2-c5bb4746c-b****
を使用します。kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data
期待される出力:
nas
ポッドを再作成します。
ポッドを削除します。
kubectl delete pod deployment-nas-1-5b5cdb85f6-a****
別のコマンドラインインターフェイス ( CLI ) を開き、ポッドがどのように削除および再作成されるかを確認します。
kubectl get pod -w -l app=nginx
ポッドの削除後もファイルがまだ存在することを確認します。
再作成されたポッドをクエリします。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdm2g5-c**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
再作成されたポッドの
/data
パスのファイルをクエリします。この例では、ポッド deployment-nas-1-5b5cdm2g5-c**** を使用します。
kubectl exec deployment-nas-1-5b5cdm2g5-c**** -- ls /data
期待される出力:
nas
nas
ファイルは、/data パスにまだ存在します。これは、データが NAS ファイルシステムに永続化されていることを示します。
NAS ファイルシステムのデータがポッド間で共有できることを確認する
NAS ボリュームを複数のポッドにマウントできます。1 つのポッドでデータが変更されると、変更は他のポッドに自動的に同期されます。次の例では、NAS ファイルシステムのデータがポッド間で共有できることを確認する方法について説明します。
アプリケーション用に作成されたポッドと、マウントされた NAS ファイルシステム内のファイルをクエリします。
次のコマンドを実行して、アプリケーション用に作成されたポッドをクエリします。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-a**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
2 つのポッドの
/data
パスのファイルを表示します。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data
出力は返されません。これは、
/data
パスにファイルが存在しないことを示します。
ポッドの
/data
パスに nas という名前のファイルを作成します。この例では、ポッド
deployment-nas-1-5b5cdb85f6-a****
を使用します。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- touch /data/nas
2 つのポッドの
/data
パスのファイルを表示します。次のコマンドを実行して、ポッド
deployment-nas-1-5b5cdb85f6-a****
の/data
パスのファイルをクエリします。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data
期待される出力:
nas
次のコマンドを実行して、ポッド
deployment-nas-2-c5bb4746c-b****
の/data
パスのファイルをクエリします。kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data
期待される出力:
nas
1 つのポッドの
/data
パスにファイルを作成した後、もう 1 つのポッドの/data
パスにもファイルが見つかります。これは、NAS ファイルシステムのデータが 2 つのポッドによって共有されていることを示します。
よくある質問
NAS ファイルシステムでユーザー分離またはユーザーグループ分離を有効にするにはどうすればよいですか?
異なるユーザーとユーザーグループ間でデータのセキュリティを確保するには、次の手順を実行して NAS ファイルシステムでユーザーまたはユーザーグループを分離します。
次の YAML テンプレートを使用してアプリケーションを作成します。アプリケーションのコンテナーは nobody ユーザーとしてプロセスを開始し、ディレクトリを作成します。 nobody ユーザーのユーザー識別子 (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 # コンテナーはnobodyユーザーとしてディレクトリを作成します。nobodyユーザーのUIDとGIDは65534です。 fsGroupChangePolicy: "OnRootMismatch" # 権限と所有権は、ルートディレクトリの権限と所有権がボリュームの要件を満たしていない場合にのみ変更されます。 containers: - name: busybox image: busybox command: - sleep - "3600" securityContext: runAsUser: 65534 # コンテナー内のすべてのプロセスは、nobodyユーザー(UID 65534)として実行されます。 runAsGroup: 65534 # コンテナー内のすべてのプロセスは、nobodyユーザー(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 ユーザーが使用されていることを示しています。
ファイルシステムモードを使用して動的にプロビジョニングされた NAS ボリュームをマウントするにはどうすればよいですか?
アプリケーション用に NAS ファイルシステムとマウントポイントを動的に作成または削除する場合、ファイルシステムモードを使用して動的にプロビジョニングされた NAS ボリュームをマウントできます。 CSI プラグインは、PVC が作成されると NAS ファイルシステムとマウントポイントを自動的に作成します。 PVC が削除されると、マウントポイントと NAS ファイルシステムは動的に削除されます。 ファイルシステムモードで NAS ボリュームをマウントするポッドに対しては、1 つのファイルシステムと 1 つのマウントポイントのみを作成できます。
参照資料
TLS が有効になっている NAS ファイルシステムをマウントする方法の詳細については、「CSI を使用して TLS が有効になっている NAS ファイルシステムをマウントする方法」をご参照ください。
CNFS を使用して NAS ファイルシステムを管理する方法の詳細については、「CNFS を使用して NAS ファイルシステムを管理する(推奨)」をご参照ください。
NAS ボリュームを動的に拡張する方法の詳細については、「CNFS を使用して NAS ボリュームを自動的に拡張する」をご参照ください。
NAS のディレクトリクォータ機能を使用してボリュームのストレージ容量を管理する方法の詳細については、「動的にプロビジョニングされた NAS ボリュームを拡張する」をご参照ください。