ここでは、ステートフルサービス作成時に NAS ファイルシステムが必要となる典型的なシナリオ、および NAS ファイルシステムの使用方法を解説します。
シナリオと方法
複数のポッドに NAS ファイルシステムがマウントされている場合、ポッドは NAS ファイルシステム上のデータを共有します。 ポッドにより、NAS ファイルシステム上に保存されたデータが変更された後、ポッドがサポートするアプリケーションは、他のポッドに対し、変更されたデータを自動的に更新する必要があります。
NAS ファイルシステムを使用するシナリオ
- 高いディスク I/O パフォーマンスを要求するアプリケーションを作成。
- OSS よりも高い読み取りと書き込み性能を備えたストレージサービスが必要。
- 異なるホスト間でファイルを共有。 たとえば、NAS ファイルシステムをサーバーとして使用したい場合です。
NAS ファイルシステムの使用方法
- NAS ファイルシステムを手動で作成し、マウントポイントへ追加します。
- PV および PVC を手動で作成します。
ここでは、Alibaba Cloud により提供される flexvolume プラグインを使用し、PV/PVC モードでの Alibaba Cloud NAS サービスの使用方法を解説します。
前提条件
- Kubernetes クラスターの作成が必要です。 詳しくは、「Kubernetes クラスターの作成」をご参照ください。
- kubectl を利用して Kubernetes クラスターへ接続されている必要があります。「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
- NAS コンソールで NAS ファイルシステムが作成されている必要があります。 詳しくは、「ファイルシステムの作成」をご参照ください。 NAS ファイルシステムおよびお使いの Kubernetes クラスターが同一のゾーンにあることを確認する必要があります。
- 作成された NAS ファイルシステム上の Kubernetes クラスターのマウントポイントが追加されている必要があります。 詳しくは、「マウントポイントの追加」をご参照ください。 NAS ファイルシステムおよびお使いのクラスターが同一の VPC にあることを確認する必要があります。
PV の作成
- pv-nas.yaml ファイルの作成
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 5Gi accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "***-**.cn-hangzhou.nas.aliyuncs.com" ////Replace this value with your mount point. path: "/k8s1" vers: "4.0"
パラメーターの説明
alicloud-pvname
: PV 名です。server
: NAS のマウントポイントです。 お使いのマウントポイントを参照するには、NAS コンソールにログインし、左側のナビゲーションウィンドウから [ファイルシステムリスト] をクリックします。[操作] 列の [管理] をクリックし、[マウントポイント] エリアで [マウントアドレス] を参照します。 マウントアドレスはお使いの NAS ファイルシステムのマウントポイントです。path
: NAS マウントディレクトリです。 NAS サブディレクトリをお使いのクラスターにマウントすることもできます。 指定した NAS サブディレクトリが存在しない場合、システムにより自動的に NAS サブディレクトリが作成され、お使いのクラスターにマウントされます。vers
: (オプション) NFS マウントプロトコルのバージョンナンバーです。 NFS ファイルシステム V3.0 および V4.0 が利用できます。 デフォルトは、V4.0 です。mode
: (オプション) マウントディレクトリへのアクセス権限です。 デフォルトでは、このパラメーターは設定されていません。注- NAS ファイルシステムのルートディレクトリへのアクセス権限は設定できません。
- 大量のデータが保存された NAS ファイルシステムへ
mode
パラメーターを設定した場合、NAS ファイルシステムのクラスターへのマウント処理に極端に時間がかかったり、失敗することがあります。 このパラメーターを設定しないことを推奨します。
- 以下のコマンドを実行し、PV を作成します。
$ kubectl create -f pv-nas.yaml
結果
Kubernetes で、左側のナビゲーションウィンドウから
をクリックし、対象となるクラスターを選択し、作成した PV を参照します。PVC の作成
NAS ファイルシステムへ PVC を作成します。 特に、"selector"
フィールドを設定し、作成された PV へのフィルタリングをする必要があります。これにより、PVC が適切な PV と関連付けられます。
- "pvc-nas.yaml" ファイルを作成します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas
- 以下のコマンドを実行し、PVC を作成します。
$ kubectl create -f pvc-nas.yaml
結果
Kubernetes の左側ナビゲーションウィンドウから
をクリックします。対象となるクラスターおよび名前空間を選択し、作成した PVC を参照します。アプリケーションの作成
- nas.yaml を作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nas-static labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: "/data" volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas
- 以下のコマンドを実行し、デプロイを作成します。
$ kubectl create -f nas.yaml
結果
Kubernetes の左側ナビゲーションウィンドウから
をクリックします。対象となるクラスターおよび名前空間を選択し、作成されたデプロイを参照します。ポッドによる NAS ファイルシステムの共有を確認
- 以下のコマンドを実行し、作成されたデプロイがあるポッドを表示します。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-rcb2f 1/1 Running 0 9m nas-static-f96b6b5d7-wthmb 1/1 Running 0 9m
- 以下のコマンドを実行し、それぞれのポッドの "/data" パスにあるファイルを表示します。
$ kubectl exec nas-static-f96b6b5d7-rcb2f ls /data
$ kubectl exec nas-static-f96b6b5d7-wthmb ls /data
注 2 つの "/data" パスが空です。 - 以下のコマンドを実行し、1 のポッドの "/data" パスにファイル "nas" を作成します。
$ kubectl exec nas-static-f96b6b5d7-rcb2f touch /data/nas
- 以下のコマンドを実行し、それぞれのポッドの "/data" パスにあるファイルを表示します。
$ kubectl exec nas-static-f96b6b5d7-rcb2f ls /data nas
$ kubectl exec nas-static-f96b6b5d7-wthmb ls /data nas
注 1 つのポッドの "/data" パスにファイルを作成すると、2 つのポッドの "/data" パスの両方にファイルが存在します。 これは、2 つのポッドが NAS ファイルシステムを共有していることを意味しています。
NAS ファイルシステム上のデータが永続的に保存されることを確認
- 以下のコマンドを実行し、作成したアプリケーションのすべてのポッドを削除します。
$ kubectl delete pod nas-static-f96b6b5d7-rcb2f nas-static-f96b6b5d7-wthmb pod "nas-static-f96b6b5d7-rcb2f" deleted pod "nas-static-f96b6b5d7-wthmb" deleted
- もう 1 つの Kubernetes インターフェイスを開きます。以下のコマンドを実行し、元のポッドを削除した処理を表示します。さらに、Kubernetes により新しいポッドが作成されます。
$ kubectl get pod -w -l app=nginx NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-rcb2f 1/1 Running 0 27m nas-static-f96b6b5d7-wthmb 1/1 Running 0 27m nas-static-f96b6b5d7-rcb2f 1/1 Terminating 0 28m nas-static-f96b6b5d7-wnqdj 0/1 Pending 0 0s nas-static-f96b6b5d7-wnqdj 0/1 Pending 0 0s nas-static-f96b6b5d7-wnqdj 0/1 ContainerCreating 0 0s nas-static-f96b6b5d7-wthmb 1/1 Terminating 0 28m nas-static-f96b6b5d7-nwkds 0/1 Pending 0 0s nas-static-f96b6b5d7-nwkds 0/1 Pending 0 0s nas-static-f96b6b5d7-nwkds 0/1 ContainerCreating 0 0s nas-static-f96b6b5d7-rcb2f 0/1 Terminating 0 28m nas-static-f96b6b5d7-wthmb 0/1 Terminating 0 28m nas-static-f96b6b5d7-rcb2f 0/1 Terminating 0 28m nas-static-f96b6b5d7-rcb2f 0/1 Terminating 0 28m nas-static-f96b6b5d7-wnqdj 1/1 Running 0 10s nas-static-f96b6b5d7-wthmb 0/1 Terminating 0 28m nas-static-f96b6b5d7-wthmb 0/1 Terminating 0 28m nas-static-f96b6b5d7-nwkds 1/1 Running 0 17s
- 以下のコマンドを実行し、Kubernetes により作成された新しいポッドを表示します。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-nwkds 1/1 Running 0 21s nas-static-f96b6b5d7-wnqdj 1/1 Running 0 21s
- 以下のコマンドを実行し、それぞれのポッドの "/data" パスにあるファイルを表示します。
$ kubectl exec nas-static-f96b6b5d7-nwkds ls /data nas
$ kubectl exec nas-static-f96b6b5d7-wnqdj ls /data nas
注 作成されたファイル"nas"
が削除されていません。 これは、NAS ファイルシステム上のデータが永続的に保存されることを示しています。