Kubernetes Service Hatoba:ニフクラNASを使った永続化ボリューム
ニフクラNASで作成したNAS領域(NFS)を永続化ボリュームとして使用する方法を説明します。
今回作成する環境は、下記の設定とします。
設定項目 | 設定値 |
---|---|
プライベートLANのIP範囲 | 192.168.0.0/16 |
クラスターのプライベートIP範囲 | 192.168.1.0/24 |
NASのプライベートIP | 192.168.100.1 |
nfs-subdir-external-provisionerを作成するnamespace | default |
ステップ1:NAS領域(NFS)の作成
ニフクラNASでNAS領域(NFS)を作成します。今回はHatobaクラスターと同一プライベートLAN上に作成します。
ステップ2:NASファイアウォールルール設定
NAS領域のNASファイアウォール上、クラスターの各ノードからの接続を許可します。
ステップ3:ファイアウォールルール設定
Hatoba側のファイアウォールルールを設定します。NASへの接続(NFS) に記載のルールを解放する必要があります。
下記のように指定のOUTルールを追加するか、OUTルールを設定しないようにすれば、疎通できるようになります。
ステップ4:Kubernetes NFS Subdir External Provisioner設定
Kubernetes NFS Subdir External Provisioner の手順を参考に、クラスターへデプロイします。
Helmを使う場合
nfs-subdir-external-provisioner インストール
NASのIPなどの設定値は環境に合わせて適宜修正してください。
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=192.168.100.1 --set nfs.path=/ --set storageClass.name=nifcloud-nas-nfs
Helmを使わない場合
Helmを使わずに適用する手順です。
RBAC作成
RBACを作成します。今回は default namespaceに適用しますが、別のnamespaceにnfs-subdir-external-provisionerを作成したい場合は、yamlの書き換えが必要なことに注意してください。
$ wget https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/rbac.yaml $ kubectl create -f rbac.yaml
Deployment用 yaml作成
下記のファイルを
deployment.yml
として作成します。NASのIPなどは環境に合わせて修正してください。--- kind: Deployment apiVersion: apps/v1 metadata: name: nfs-client-provisioner spec: replicas: 1 selector: matchLabels: app: nfs-client-provisioner strategy: type: Recreate template: metadata: labels: app: nfs-client-provisioner spec: serviceAccountName: nfs-client-provisioner containers: - name: nfs-client-provisioner image: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: nifcloud-nas-nfs - name: NFS_SERVER value: 192.168.100.1 - name: NFS_PATH value: / volumes: - name: nfs-client-root nfs: server: 192.168.100.1 path: /
StorageClass用 yaml作成
StorageClassを作成するymlを
storageclass.yml
として用意します。設定値は必要に応じて書き換えてください。--- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: nifcloud-nas-nfs provisioner: nifcloud-nas-nfs parameters: archiveOnDelete: "false"
Deployment/StorageClass作成
上記で作成した
deployment.yml
とstorageclass.yml
を適用します。$ kubectl create -f deployment.yml $ kubectl create -f storageclass.yml
ステップ5:永続化ボリューム作成
PVC用 yaml作成
下記のような
pvc.yml
を作成します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 1Mi storageClassName: nifcloud-nas-nfs
PVC作成
上記の
pvc.yml
を適用します。$ kubectl create -f pvc.yml
確認
下記のように永続化ボリュームが作成出来ていることが確認できます。
$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-800082f0-554b-42d4-85b5-919593428f2c 1Mi RWX Delete Bound default/test-claim nifcloud-nas-nfs 6m27s