FlexVolume プラグインを用いて、Apsara File Storage NAS (NAS) ファイルシステムを Container Service for Kubernetes (ACK) クラスターにマウントします。本トピックでは、YAML ファイルおよび ACK コンソールによる永続ボリューム (PV) の作成方法を説明し、その後、永続ボリューム要求 (PVC) の作成と、NAS バックエンドストレージを利用する Pod のデプロイ手順について解説します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
マウントポイントが追加された NAS ファイルシステムが存在すること。NAS コンソールで作成できます。NAS コンソールへアクセスしてください。マウントポイントと ACK クラスターは、同一の仮想プライベートクラウド (VPC) 内にある必要があります。
NAS コンソールFlexVolume がクラスター内で最新バージョンにアップグレードされました。
kubectl がクラスターへの接続に正しく設定されていること。詳細については、「クラスターの kubeconfig ファイルを取得して kubectl を用いてクラスターに接続する」をご参照ください。
仕組み
NAS ファイルシステムを ACK クラスターにマウントするには、以下の 3 つのステップが必要です。
PV の作成 — クラスター管理者として、NAS ファイルシステムをバックエンドとする PV を定義します。この PV は、まだワークロードとは関連付けられていません。
PVC の作成 — PV を要求します。Kubernetes は、ストレージクラス、アクセスモード、および容量に基づいて、PVC を対応する PV にバインドします。
Pod のデプロイ — Deployment で PVC を参照します。指定したパスに NAS ファイルシステムがコンテナ内にマウントされます。
FlexVolume がクラスターにインストールされると、NFS プロトコルを用いてマウントおよびアンマウント操作を処理します。
ステップ 1:PV の作成
YAML ファイルまたは ACK コンソールを使用して PV を作成します。
オプション 1:YAML ファイルを使用
以下の内容を nas-pv.yaml として保存し、kubectl apply -f nas-pv.yaml を実行します。
<mount-target-domain> をご利用の NAS マウントポイントのドメイン名に置き換え、<subdirectory> をマウント対象の NAS ファイルシステム内のパス(例: /k8s)に置き換えてください。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nas
spec:
capacity:
storage: 5Gi
storageClassName: nas
accessModes:
- ReadWriteMany
flexVolume:
driver: "alicloud/nas"
options:
server: "<mount-target-domain>"
path: "<subdirectory>"
vers: "3"
options: "nolock,tcp,noresvport"PV が作成され、Available 状態であることを確認します。
kubectl get pv pv-nas期待される出力:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGE
pv-nas 5Gi RWX Retain Available nas 5sオプション 2:ACK コンソールを使用
ACK コンソール にログインします。
左側ナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスター名をクリックするか、[操作] 列の [詳細] をクリックします。
左側ナビゲーションウィンドウで、[ボリューム] > [永続ボリューム] を選択します。
右上隅の [作成] をクリックします。
[PV の作成] ダイアログボックスで、下表に記載されたパラメーターを設定します。
| パラメーター | 説明 | 必須 | デフォルト値 |
|---|---|---|---|
| PV タイプ | [NAS] を選択します。 | はい | — |
| ボリューム名 | クラスター内で一意となる PV の名前。例:pv-nas。 | はい | — |
| [ボリュームプラグイン] | [FlexVolume] を選択します。 | はい | — |
| 容量 | PV の容量。NAS ファイルシステムの容量を超えることはできません。 | はい | — |
| [アクセスモード] | アクセスモード。NAS ファイルシステムは ReadWriteMany をサポートしており、複数のノードが同時に読み取りおよび書き込みを行うことができます。 | はい | ReadWriteMany |
| [マウントポイントのドメイン名] | マウントポイントの管理NAS マウントポイントのドメイン名。詳細については、「」をご参照ください。 | はい | — |
| サブディレクトリ | NAS ファイルシステム内のサブディレクトリ(先頭に / を付ける)。該当のサブディレクトリが存在しない場合、自動的に作成されます。ルートディレクトリをマウントする場合は、このフィールドを空欄のままにしてください。超高速型 NAS ファイルシステムの場合は、パスは必ず /share で始める必要があります。 | いいえ | ルートディレクトリ |
| [権限] | マウントされたディレクトリに対するアクセス権限(例:755、644、777)。サブディレクトリをマウントする場合のみ適用されます。ディレクトリ内に多数のファイルが存在する場合、chmod コマンドの実行時間が長くなるため、このパラメーターの設定は避けてください。 | いいえ | 元の権限 |
| [chmod(モード変更)] | 権限変更の適用範囲: 非再帰的(マウントされたディレクトリのみに適用)または 再帰的(マウントされたディレクトリおよびすべてのサブディレクトリ・ファイルに適用)。FlexVolume のバージョンが V1.14.6.15-8d3b7e7-aliyun より前の場合、権限は常に再帰的に適用されます。V1.14.6.15-8d3b7e7-aliyun 以降のバージョンでは、このパラメーターで適用範囲を制御できます。 | いいえ | — |
| バージョン | NFS プロトコルのバージョン。NFSv3 を推奨します。超高速型 NAS ファイルシステムは NFSv3 のみをサポートします。 | いいえ | NFSv3 |
| ラベル | PV に追加するラベル。 | いいえ | — |
[作成] をクリックします。
多数のファイルを含むマウント済みディレクトリに対して [再帰的] を選択した場合、chmod コマンドの実行時間が非常に長くなり、マウントまたはアンマウント操作が失敗する可能性があります。
ステップ 2:PVC の作成
以下の内容を nas-pvc.yaml として保存し、kubectl apply -f nas-pvc.yaml を実行します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
storageClassName: nas
resources:
requests:
storage: 5GiKubernetes は、ストレージクラス、アクセスモード、および容量が一致することを基に、PVC を pv-nas PV にバインドします。バインド状態を確認します。
kubectl get pvc pvc-nas期待される出力:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-nas Bound pv-nas 5Gi RWX nas 5sSTATUS が Bound である場合、PVC が PV に正常にリンクされていることを示します。
ステップ 3:Pod のデプロイ
以下の内容を nas-pod.yaml として保存し、kubectl apply -f nas-pod.yaml を実行します。
NAS ファイルシステムは、コンテナ内の /data にマウントされます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nas-static
labels:
app: nginx
spec:
replicas: 1
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-nasPod が実行中であり、ボリュームが正しくマウントされていることを確認します。
kubectl get pods -l app=nginx期待される出力:
NAME READY STATUS RESTARTS AGE
nas-static-xxxxxxxxx-xxxxx 1/1 Running 0 30sコンテナ内での NAS ファイルシステムのマウントを確認するには、以下のコマンドを実行します。
kubectl exec -it <pod-name> -- df -h | grep /data出力には、/data に NAS ファイルシステムがマウントされていることが表示されます。