File Storage NAS (NAS) ファイルシステムを使用して、データを保持し、複数のポッド間でデータを共有できます。 このトピックでは、NASファイルシステムを使用してデータを保持および共有する方法について説明します。
前提条件
NASファイルシステムがNASファイルシステムコンソールで作成されます。 詳細については、「Linux ECSインスタンスへのNFSファイルシステムのマウント」をご参照ください。 NASファイルシステムとクラスターは同じゾーンにデプロイされます。
NASファイルシステムにマウントターゲットが追加されます。 詳細については、「マウントターゲットの管理」をご参照ください。 NASファイルシステムとクラスターは、同じ仮想プライベートクラウド (VPC) にデプロイされています。
背景情報
NASファイルシステムが複数のポッドにマウントされている場合、ファイルシステム内のデータはポッドによって共有されます。 この場合、複数のポッドでデータが変更された場合、アプリケーションはこれらのポッド間でデータを同期できる必要があります。
シナリオ
アプリケーションには高いディスクI/Oが必要です。
Object storage service (OSS) よりも高い読み取りおよび書き込みスループットを提供するストレージサービスが必要です。
異なるホスト間でファイルを共有。 たとえば、NAS ファイルシステムをサーバーとして使用したい場合です。
手順
NASファイルシステムとマウントターゲットを作成します。
永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成します。
次のセクションでは、Alibaba Cloudが提供するFlexVolumeプラグインを使用してPVとPVCを作成し、NASファイルシステムをマウントする方法について説明します。
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 the value with the mount target. path: "/k8s1" vers: "4.0"
パラメーター
説明
alicloud-pvname
PV の名前。
サーバー
NASファイルシステムのマウントターゲット。 マウントターゲットを取得するには、NASファイルシステムコンソールにログインします。 左側のナビゲーションウィンドウで、[ファイルシステムリスト] をクリックし、作成したファイルシステムを見つけて、[操作] 列の [管理] をクリックします。 表示されるページで、[ターゲットのマウント] をクリックします。 [マウントターゲット] セクションで、[マウントターゲットのIPアドレス] 列のマウントアドレスをコピーします。
パス
NASファイルシステムのマウントされたディレクトリ。 NASファイルシステムのサブディレクトリを指定できます。 サブディレクトリが存在しない場合、システムは自動的にサブディレクトリを作成します。
vers
ネットワークファイルシステム (NFS) プロトコルのバージョン番号。 このパラメーターはオプションです。 有効な値: 3と4.0。 デフォルト値:3
モード
マウントされたディレクトリにアクセスするための権限。 このパラメーターはオプションです。 デフォルトでは、このパラメータは空のままです。
説明NASファイルシステムのルートディレクトリにアクセスする権限を付与することはできません。
大量のデータを格納するNASファイルシステムに
mode
パラメーターを設定すると、NASファイルシステムのマウントに時間がかかるか、失敗することさえあります。 このパラメーターは空のままにすることを推奨します。
次のコマンドを実行してPVを作成します。
kubectl create -f pv-nas.yaml
期待される結果
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。
詳細ページの左側のナビゲーションウィンドウで、
を選択します。 新しく作成されたPVが表示されることを確認します。
PVC の作成
NASタイプのPVCを作成するときは、selector
パラメーターを設定して、PVを選択してPVCにバインドする方法を設定します。
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
期待される結果
[クラスター] ページで、管理するクラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。
詳細ページの左側のナビゲーションウィンドウで、
を選択します。 新しく作成されたPVCが表示されることを確認します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
アプリケーションの作成
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
期待される結果
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [アプリケーション] をクリックします。
クラスターの詳細ページの左側のナビゲーションウィンドウで、
を選択します。 新しく作成されたアプリケーションが表示されることを確認します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
データ共有の確認
次のコマンドを実行して、Deploymentが実行されているアプリケーションポッドを照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-r**** 1/1 Running 0 9m nas-static-f96b6b5d7-w**** 1/1 Running 0 9m
次のコマンドを実行して、/dataパスのファイルを照会します。
kubectl exec nas-static-f96b6b5d7-r**** -- ls /data
期待される出力:
kubectl exec nas-static-f96b6b5d7-w**** -- ls /data
説明出力は、/dataパスにファイルが存在しないことを示します。
次のコマンドを実行して、ポッドの /dataパスにnasという名前のファイルを作成します。
kubectl exec nas-static-f96b6b5d7-r**** -- touch /data/nas
ポッド内のクエリファイルをします。
次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。
kubectl exec nas-static-f96b6b5d7-r**** -- ls /data
期待される出力:
nas
次のコマンドを実行して、他のポッドの /dataパス内のファイルを照会します。
kubectl exec nas-static-f96b6b5d7-w**** -- ls /data
期待される出力:
nas
説明一方のポッドの /dataパスにファイルを作成すると、もう一方のポッドの /dataパスにもファイルを見つけることができます。 これは、NASファイルシステムのデータが2つのポッドで共有されていることを示します。
データ永続性の検証
次のコマンドを実行して、すべてのアプリケーションポッドを削除します。
kubectl delete pod nas-static-f96b6b5d7-r**** nas-static-f96b6b5d7-wthmb
期待される出力:
pod "nas-static-f96b6b5d7-r****" deleted pod "nas-static-f96b6b5d7-w****" deleted
次のコマンドを実行して、ポッドの削除と再作成方法を確認します。
kubectl get pod -w -l app=nginx
期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-r**** 1/1 Running 0 27m nas-static-f96b6b5d7-w**** 1/1 Running 0 27m nas-static-f96b6b5d7-r**** 1/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 0/1 Pending 0 0s nas-static-f96b6b5d7-w**** 0/1 Pending 0 0s nas-static-f96b6b5d7-w**** 0/1 ContainerCreating 0 0s nas-static-f96b6b5d7-w**** 1/1 Terminating 0 28m nas-static-f96b6b5d7-n**** 0/1 Pending 0 0s nas-static-f96b6b5d7-n**** 0/1 Pending 0 0s nas-static-f96b6b5d7-n**** 0/1 ContainerCreating 0 0s nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 1/1 Running 0 10s nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-n**** 1/1 Running 0 17s
次のコマンドを実行して、再作成されたポッドの名前を照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-n**** 1/1 Running 0 21s nas-static-f96b6b5d7-w**** 1/1 Running 0 21s
ポッド内のクエリファイルをします。
次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。
kubectl exec nas-static-f96b6b5d7-n**** -- ls /data
期待される出力:
nas
次のコマンドを実行して、他のポッドの /dataパス内のファイルを照会します。
kubectl exec nas-static-f96b6b5d7-w**** -- ls /data
期待される出力:
nas
説明nasファイルはまだ存在します。 これは、データがNASボリュームに永続化されていることを示します。