ファイルストレージ NAS (NAS) は、Alibaba Cloud が提供する分散ファイルシステムです。NAS は共有アクセスと自動スケーリングをサポートしています。NAS は高信頼性と高性能を備えています。Alibaba Cloud が提供する CSI-Provisioner コンポーネントをセルフマネージド Kubernetes クラスタにデプロイした後、NAS ファイルシステムをクラスタ上のボリュームとしてマウントできます。NAS ファイルシステムは、静的にプロビジョニングされたボリュームまたは動的にプロビジョニングされたボリュームとしてマウントできます。このトピックでは、PersistentVolumeClaim (PVC) を使用して NAS ファイルシステムを Elastic Container Instance ベースの Pod にマウントする方法について説明します。
前提条件
VNode がセルフマネージド Kubernetes クラスタにデプロイされていること。
セルフマネージド Kubernetes クラスタのバージョンが v1.16 以降であり、CSI-Provisioner コンポーネントがセルフマネージド Kubernetes クラスタにデプロイされていること。
重要CSI-Provisioner コンポーネントのデプロイ方法については、alibaba-cloud-csi-driver を参照してください。コンポーネントのデプロイ時に問題が発生した場合は、GitHub で問題を提出してください。
セルフマネージド Kubernetes クラスタがデータセンターにデプロイされている場合は、データセンターが Alibaba Cloud に接続されていること。
注意事項
NAS は共有ストレージサービスです。NAS ファイルシステムは複数の Pod にマウントできます。NAS ファイルシステムが複数の Pod にマウントされている場合、ファイルシステム内のデータは Pod 間で共有されます。この場合、複数の Pod に対してデータ変更が行われたときに、アプリケーションはこれらの Pod 間でデータを同期できる必要があります。
NAS ファイルシステムをアンマウントする前に、マウントターゲットを削除しないでください。削除すると、オペレーティングシステムがハングする可能性があります。
静的にプロビジョニングされたボリュームとして NAS ファイルシステムをマウントする
NAS ファイルシステムを作成し、マウントターゲットを追加します。
NAS コンソール にログインします。
NAS ファイルシステムを作成し、マウントターゲットを追加します。
NAS ファイルシステムとマウントターゲットは、VNode と同じ VPC 内に存在する必要があります。詳細については、NAS ファイルシステムの作成 および マウントターゲットの管理 を参照してください。
永続ボリューム (PV) を作成します。
static-nas-pv.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。必要に応じて、テンプレート内のパラメータを変更します。
apiVersion: v1 kind: PersistentVolume metadata: name: static-nas-pv labels: alicloud-pvname: static-nas-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: static-nas-pv volumeAttributes: server: "2564f4****-ysu87.cn-beijing.nas.aliyuncs.com" path: "/test" mountOptions: - nolock,tcp,noresvport - vers=3次の表に、テンプレートのパラメータを示します。
パラメータ
説明
driver
使用するドライバのタイプ。この例では、パラメータは
nasplugin.csi.alibabacloud.comに設定されています。これは、NAS 用に Alibaba Cloud が提供する Container Storage Interface (CSI) プラグインが使用されていることを示します。volumeHandle
PV の一意の ID。値は、metadata で定義された名前と同じである必要があります。
server
NAS ファイルシステムのマウントポイント。
path
マウントする NAS ファイルシステムのサブディレクトリ。Extreme NAS ファイルシステムをマウントする場合は、パラメータを
/shareディレクトリのサブディレクトリに設定します。例:/share/path1。vers
NAS ファイルシステムのマウントに使用する Network File System (NFS) プロトコルのバージョン番号。NFS v3 を使用することをお勧めします。Extreme NAS は NFS v3 のみをサポートしています。
次のコマンドを実行して、PV を作成します。
kubectl create -f static-nas-pv.yaml
PVC を作成します。
static-nas-pvc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: static-nas-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 25Gi selector: matchLabels: alicloud-pvname: static-nas-pv次のコマンドを実行して、PVC を作成します。
kubectl create -f static-nas-pvc.yaml
NAS ファイルシステムを 2 つの Elastic Container Instance ベースの Pod にマウントします。
static-nas-test.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: apps/v1 kind: Deployment metadata: name: static-nas-test labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: k8s.aliyun.com/vnode: "true" tolerations: - key: k8s.aliyun.com/vnode operator: "Equal" value: "true" effect: "NoSchedule" containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: static-nas-pvc次のコマンドを実行して、Deployment を作成します。
kubectl create -f static-nas-test.yaml結果を表示します。
kubectl get pods -o wide次のコマンド出力が想定されます。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES static-nas-test-5c4b6d4bd-4kggt 1/1 Running 0 95s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none> static-nas-test-5c4b6d4bd-ql6m4 1/1 Running 0 95s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none>Pod 内のファイルディレクトリを確認し、NAS ファイルシステム用に
/dataマウントディレクトリが生成されていることを確認します。また、最初の Pod に書き込まれたファイルが 2 番目の Pod で表示できることを確認します。これは、2 つの Pod が NAS ファイルシステムを共有していることを示します。
動的にプロビジョニングされたボリュームとして NAS ファイルシステムをマウントする
NAS ファイルシステムを作成し、マウントターゲットを追加します。
NAS コンソール にログインします。
NAS ファイルシステムを作成し、マウントターゲットを追加します。
NAS ファイルシステムとマウントターゲットは、VNode と同じ VPC 内に存在する必要があります。詳細については、NAS ファイルシステムの作成 および マウントターゲットの管理 を参照してください。
StorageClass を作成します。
nas-sc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。必要に応じて、テンプレート内のパラメータを変更します。次の表に、テンプレートのパラメータを示します。
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パラメータ
説明
mountOptions
マウントオプション (NFS バージョンなど)。
volumeAs
PV タイプ。値 subpath はサブディレクトリを示します。この場合、CSI-Provisioner は NAS ファイルシステムのサブディレクトリを自動的に作成します。
server
volumeAs パラメータを subpath に設定した場合の NAS ファイルシステムのマウントターゲット。
provisioner
使用するドライバのタイプ。この例では、パラメータは
nasplugin.csi.alibabacloud.comに設定されています。これは、NAS 用に Alibaba Cloud が提供する CSI プラグインが使用されていることを示します。reclaimPolicy
PV の再利用ポリシー。デフォルト値: Delete。このパラメータを Retain に設定することもできます。
Delete: PVC が削除されると、関連する PV と NAS ファイルシステムも削除されます。
Retain: PVC が削除されると、関連する PV と NAS ファイルシステムは保持され、手動でのみ削除できます。
データセキュリティを強化する必要がある場合は、ユーザーエラーによるデータ損失を防ぐために、Retain モードを使用することをお勧めします。
次のコマンドを実行して、StorageClass を作成します。
kubectl create -f nas-sc.yaml
NAS タイプの PVC を作成します。
nas-pvc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-subpath resources: requests: storage: 25Gi次のコマンドを実行して、PVC を作成します。
kubectl create -f nas-pvc.yaml
NAS ファイルシステムを 2 つの Elastic Container Instance ベースの Pod にマウントします。
nas-test.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
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: nodeSelector: k8s.aliyun.com/vnode: "true" tolerations: - key: k8s.aliyun.com/vnode operator: "Equal" value: "true" effect: "NoSchedule" containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 volumeMounts: - name: pvc-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: nas-pvc次のコマンドを実行して、Deployment を作成します。
kubectl create -f nas-test.yaml結果を表示します。
kubectl get pods -o wide次のコマンド出力が想定されます。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nas-test-76c54d4b4-f7b88 1/1 Running 0 4m41s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none> nas-test-76c54d4b4-lqz4b 1/1 Running 0 4m41s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none>Pod 内のファイルディレクトリを確認し、NAS ファイルシステム用に
/dataマウントディレクトリが生成されていることを確認します。また、最初の Pod に書き込まれたファイルが 2 番目の Pod で表示できることを確認します。これは、2 つの Pod が NAS ファイルシステムを共有していることを示します。