NAS ボリュームは、共有アクセス、スケーラビリティ、高い信頼性、および高いパフォーマンスを提供する分散ファイルシステムです。このトピックでは、静的にプロビジョニングされた Alibaba Cloud NAS ボリュームを使用して、永続的な共有ストレージを実装する方法について説明します。
前提条件
Serverless Kubernetes クラスターが作成されていること。詳細については、「ACK Serverless クラスターの作成」をご参照ください。
NAS ファイルシステムが作成されていること。詳細については、「ファイルシステムの作成」をご参照ください。
NAS ボリューム内のデータを暗号化する場合は、NAS ファイルシステムを作成するときに暗号化タイプを設定する必要があります。
NAS マウントポイントが作成されていること。詳細については、「マウントポイントの管理」をご参照ください。
NAS マウントポイントは、クラスターノードと同じ VPC にある必要があります。
kubectl を使用してクラスターに接続済みであること。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
シナリオ
ディスク I/O に対する要件が高いアプリケーション。
ホスト間でファイル共有を実装できます。たとえば、NAS ボリュームをファイルサーバとして使用できます。
考慮事項
超高速型 NAS ファイルシステムを使用する場合、ボリュームの
pathは /share のサブディレクトリである必要があります。たとえば、Pod にマウントされる NAS ファイルシステムのサブディレクトリを /share/path1 に設定できます。NAS ファイルシステムは、同時に複数の Pod にマウントできます。この場合、Pod が同じデータを変更する可能性があります。アプリケーションはデータを同期できる必要があります。
説明NAS ファイルシステムの / ディレクトリの権限、オーナー、またはグループは変更できません。
アプリケーションテンプレートで securityContext.fsgroup パラメーターを設定すると、Kubelet はボリュームがマウントされた後に
chmodまたはchown操作を実行します。これにより、マウント時間が長くなります。説明securityContext.fsgroup パラメーターを設定し、マウント時間を短縮したい場合、詳細については、「NAS ボリュームのマウント時間が長くなる」をご参照ください。
コンソールで静的にプロビジョニングされた NAS ボリュームを使用する
ステップ 1: Persistent Volume (PV) の作成
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[アクション] 列の [詳細] をクリックします。クラスターの詳細ページが表示されます。
クラスター詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[Persistent Volume] ページで、右上隅にある [作成] をクリックします。
[Persistent Volume の作成] ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
ボリュームタイプ
この例では、NAS を選択します。
名前
PV の名前。名前はクラスター内で一意である必要があります。この例では、pv-nas が使用されます。
容量
PV の容量。NAS ファイルシステムには容量制限がないことに注意してください。このパラメーターは、NAS ファイルシステムの容量制限ではなく、PV の容量を指定します。
アクセスモード
ReadWriteMany または ReadWriteOnce を選択します。デフォルト値は ReadWriteMany です。
マウントポイントのドメイン名
[マウントターゲットの選択] を行うか、[カスタム] マウントターゲットをクラスターが NAS ファイルシステムにアクセスするためのマウントアドレスとして指定できます。
詳細オプション (オプション)
マウントパス
マウントする NAS ファイルシステム内のサブディレクトリ。
設定しない場合、デフォルトはルート (
/(汎用 NAS)、/share(超高速型 NAS)) になります。ディレクトリが存在しない場合は作成されます。
説明超高速型 NAS の場合、パスは
/shareで始まる必要があります (例:/share/data)。リクレームポリシー
デフォルト値は Retain です。これは、PVC が削除されても、関連する PV と NAS ファイルシステムは保持され、手動でのみ削除できることを示します。
マウントオプション
NFS プロトコルのバージョンを含む NAS マウントパラメーター。超高速型 NAS は NFS v3 のみをサポートするため、NFS v3 プロトコルの使用を推奨します。NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。
ラベル
PV にラベルを追加します。
パラメーターを設定したら、[作成] をクリックします。
ステップ 2: Persistent Volume Claim (PVC) の作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[Persistent Volume Claim] ページで、右上隅にある [作成] をクリックします。
[Persistent Volume Claim の作成] ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
ストレージ要求タイプ
この例では、NAS を選択します。
名前
PVC の名前。名前はクラスター内で一意である必要があります。
割り当てモード
既存のボリュームを選択します。
説明PV が作成されていない場合は、[割り当てモード] を [ボリュームの作成] に設定し、パラメーターを設定して PV を作成できます。詳細については、「PV の作成」をご参照ください。
既存のボリューム
[既存ボリュームの選択] をクリックし、ターゲット PV を見つけて、[アクション] 列の [選択] をクリックします。
容量
PV の容量。
説明PVC によって要求される容量は、PVC にバインドされている PV の容量を超えることはできません。
[作成] をクリックします。
PVC が作成されると、リストで表示できます。PVC のステータスが [Bound] に変わり、対応する PV にバインドされていることを示します。
ステップ 3: アプリケーションの作成
クラスター詳細ページの左側のナビゲーションウィンドウで、 に移動します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
アプリケーションのパラメーターを設定します。設定後、[作成] をクリックします。
次の表に、主要なパラメーターを示します。他のパラメーターにはデフォルト設定を使用します。詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
セクション
パラメーター
説明
例
基本情報
名前
Deployment のカスタム名を入力します。名前はコンソールに表示されるフォーマット要件を満たす必要があります。
nas-test
レプリカ
Pod レプリカの数。
2
コンテナー
イメージ名
コンテナーイメージ。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
必須リソース
CPU とメモリ。
0.25 Core, 512 MiB
ボリューム
[PVC の追加] をクリックしてパラメーターを設定します。
マウントソース: 作成した PVC を選択します。
コンテナーパス: NAS ファイルシステムをマウントするコンテナーパスを指定します。
マウントソース: pvc-nas
コンテナーパス: /data
アプリケーションのデプロイメントステータスを表示します。
[デプロイメント] ページで、アプリケーションの名前をクリックします。
[Pod] タブで、Pod が [実行中] 状態であることを確認します。
kubectl を使用して静的にプロビジョニングされた NAS ボリュームを使用する
次のコマンドを実行して、静的にプロビジョニングされた PV を作成します。
kubectl create -f pv-nas.yaml次のコードは、静的にプロビジョニングされた PV を作成するためのサンプル YAML ファイルです。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 5Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountOptions: - nolock,tcp,noresvport - vers=3パラメーター
説明
name
PV の名前。
labels
PV のラベル。
storage
NAS ファイルシステムの利用可能な容量。
accessModes
アクセスモード。
driver
ドライバーのタイプ。この例では、値は
nasplugin.csi.alibabacloud.comで、Alibaba Cloud NAS CSI プラグインが使用されることを示します。volumeHandle
PV の一意の ID。複数の PV を同時に使用する場合、このパラメーターの値は各 PV で一意である必要があります。
server
NAS マウントポイント。
path
マウントするサブディレクトリ。超高速型 NAS ファイルシステムの場合、サブディレクトリは /share のサブディレクトリである必要があります。
vers
NAS ボリュームのマウントに使用される NFS プロトコルのバージョン番号。v3 の使用を推奨します。超高速型 NAS ファイルシステムは v3 のみをサポートします。
次のコマンドを実行して、静的にプロビジョニングされた PVC を作成します。
NAS ファイルシステム用の PVC を作成します。
selectorフィールドを使用して PV をフィルターし、PVC を特定の PV にバインドします。kubectl create -f pvc-nas.yaml次のコードは、静的にプロビジョニングされた PVC を作成するためのサンプル YAML ファイルです。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nasパラメーター
説明
name
PVC の名前。
accessModes
アクセスモード。
storage
アプリケーションによって要求される容量。値は PV の総容量より大きくすることはできません。
matchLabels
関連付ける PV のラベル。
次のコマンドを実行して、nas-static という名前のアプリケーションを作成し、PVC をマウントします。
kubectl create -f nas.yaml次のコードは、nas-static アプリケーションを作成するためのサンプル 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: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: "/data" volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nasパラメーター
説明
mountPath
コンテナー内で NAS ボリュームがマウントされるパス。
claimName
バインドする PVC の名前。
次のコマンドを実行して、Pod 情報を表示します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
NAS ボリュームの永続化の確認
デプロイされたアプリケーションと NAS ファイルを表示します。
次のコマンドを実行して、デプロイされたアプリケーションの Pod の名前を表示します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s次のコマンドを実行して、アプリケーション Pod の 1 つの /data パスにあるファイルを表示します。このトピックでは、
nas-static-5b5cdb85f6-n****という名前の Pod を例として使用します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /dataコマンドは出力を返しません。これは、/data パスにファイルが存在しないことを示します。
次のコマンドを実行して、
nas-static-5b5cdb85f6-n****Pod の /data パスに nas という名前のファイルを作成します。kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas次のコマンドを実行して、
nas-static-5b5cdb85f6-n****Pod の /data パスにあるファイルを表示します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data期待される出力:
nas次のコマンドを実行して Pod を削除します。
kubectl delete pod nas-static-5b5cdb85f6-n****別のウィンドウで、次のコマンドを実行して、Pod の削除と Kubernetes による新しい Pod の作成を監視します。
kubectl get pod -w -l app=nginxPod が削除された後も、NAS ボリュームに作成されたファイルがまだ存在することを確認します。
次のコマンドを実行して、Kubernetes によって再作成された Pod の名前を表示します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s次のコマンドを実行して、
nas-static-5b5cdb85f6-n****Pod の /data パスにあるファイルを表示します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data期待される出力:
nasnas ファイルはまだ存在しており、NAS ボリューム内のデータが永続的であることを示しています。
NAS ボリュームの共有ストレージの確認
アプリケーションがデプロイされている Pod と NAS ファイルを表示します。
次のコマンドを実行して、アプリケーションがデプロイされている Pod の名前を表示します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s次のコマンドを実行して、2 つの Pod の /data パスにあるファイルを表示します。
kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data kubectl exec nas-static-c5bb4746c-4**** -- ls /data
次のコマンドを実行して、Pod の 1 つの /data パスに nas という名前のファイルを作成します。
kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas次のコマンドを実行して、2 つの Pod の /data パスにあるファイルを表示します。
次のコマンドを実行して、
nas-static-5b5cdb85f6-n****という名前の Pod の /data パスにあるファイルを表示します。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data期待される出力:
nas次のコマンドを実行して、
nas-static-c5bb4746c-4****という名前の Pod の /data パスにあるファイルを表示します。kubectl exec nas-static-c5bb4746c-4**** -- ls /data期待される出力:
nas1 つの Pod の /data パスに作成されたファイルが、もう 1 つの Pod の /data パスにも存在する場合、2 つの Pod が同じ NAS ボリュームを共有していることを示します。