KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順

 

★悩み★
・KubernetesでNFSをマウントして永続ボリュームを作成する利点は何?
・KubernetesでNFSをマウントして永続ボリューム(PV/PVC)を作成したい。
・そもそもKubernetesの「永続ボリューム(PV/PVC)」って何?


こういった「悩み」に答えます。
 

★本記事の内容★
① Kubernetesの「永続ボリューム(PV/PVC)」の違いをご紹介
② KubernetesでNFSをマウントした永続ボリュームを作成する利点をご紹介
③ KubernetesでNFSを使い永続ボリュームを作成するための準備をご紹介
④ KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順をご紹介


これからご紹介する「KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順」を実践したことで、1時間以内で「KubernetesでNFSをマウント(mount)した永続ボリューム(PV/PVC)を作成」できました。

記事の前半では「KubernetesでNFSをマウントした永続ボリューム(PV/PVC)を作成する利点」を解説しつつ、記事の後半では「KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順」を紹介します。

この記事を読み終えることで、「KubernetesでNFSをマウント(mount)した永続ボリューム(PV/PVC)を使える」状態になります。
 

★Kubernetesとは★
Kubernetesを利用することで、マイクロサービスなシステムを構築できます。Kubernetesを利用したマイクロサービスに関して知りたい方は、以下の記事をご覧ください。
 
Kubernetesとマイクロサービスについて



ちなみに、「Kubernetesを体系的に学習したい」方には、以下の記事がお勧めです。
 


 

 


 

【PR】この記事には広告を含む場合があります

Kubernetesの「永続ボリューム(PV/PVC)」の違い


「Kubernetesの「永続ボリューム(PV/PVC)」の違い」に関しては、以下の記事をご覧ください。
 

 

上記記事では、Kubernetesにおける「永続ボリューム/PV/PVC」の違いを図で解説しています。

 


以上が、「Kubernetesの「永続ボリューム(PV/PVC)」の違い」となります。
 

KubernetesでNFSをマウントした永続ボリュームを作成する利点


「KubernetesでNFSをマウントした永続ボリュームを作成する利点」に関してご紹介します。
 

Kubernetesで「NFSをマウント(mount)した永続ボリューム(PV/PVC)を作成する利点」を図で解説しますね。


結論から述べますと、「どのサーバにPodがデプロイ(配備)されても永続化されたデータを参照できる」となります。以降で、上記に関して紐解いていきますね。


例えば、サーバ2にデプロイされたPod上で、ファイルAを永続ボリューム内に作成したとしましょう。



「システムの再起動」や「Podの再起動」などでサーバ3にPodがデプロイされた場合、ファイルAを参照できません。これは、永続ボリュームを各サーバ内に存在するストレージに紐付けしているためです。
 



NFSをマウントした永続ボリューム(PV/PVC)を作成することで、上記の問題を解消できます。NFSをマウントした永続ボリューム(PV/PVC)を作成することで、下図のように他サーバにあるストレージを参照できます。
 

 



以上が、「KubernetesでNFSをマウントした永続ボリュームを作成する利点」となります。
 

「どのサーバにPodが配備されても、永続化されたデータを参照できるようにしたい」場合、NFSをマウントした永続ボリューム(PV/PVC)を作成しましょう。

 

KubernetesでNFSを使い永続ボリュームを作成するための準備


「KubernetesでNFSを使い永続ボリュームを作成するための準備」に関してご説明します。

★KubernetesでNFSを使い永続ボリュームを作成するための準備の流れ★
手順1:Kubernetesクラスタを構築
手順2:構築したKubernetesクラスタの状態確認


上記の流れで、「KubernetesでNFSを使い永続ボリュームを作成するための準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月25日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「KubernetesでNFSを使い永続ボリュームを作成するための準備の流れ」の各手順に関してご説明します。
 

手順1:Kubernetesクラスタを構築

「手順1:Kubernetesクラスタを構築」に関してご説明します。
 

KubernetesでNFSをマウント(mount)した永続ボリューム(PV/PVC)を作成するために、Kubernetesクラスタを構築しましょう。


「Kubernetesクラスタの構築手順」に関しては、以下の記事をご覧ください。
 


上記手順を実施することで、以下のKubernetesクラスタを構築できます。
 



以降の手順では、上図のKubernetesクラスタを想定として手順を解説します。
  

既にKubernetesクラスタを構築済みである場合、本手順を省略してください。


以上で、「手順1:Kubernetesクラスタを構築」は完了です。
 

手順2:構築したKubernetesクラスタの状態確認

「手順2:構築したKubernetesクラスタの状態確認」に関してご説明します。
 

構築したKubernetesクラスタに永続ボリューム(PV/PVC)を作成できる状態になっているかを確認しましょう。



「構築したKubernetesクラスタの状態確認」に関しては、以下の記事「手順2:構築したKubernetesクラスタの状態確認」をご覧ください。
 


以上で、「手順2:構築したKubernetesクラスタの状態確認」は完了です。
 

上記の流れで、KubernetesでNFSをマウント(mount)した永続ボリューム(PV/PVC)を作成するための準備ができました。

 

KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順


「KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順」に関してご紹介します。

★KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する流れ★
手順1:Kubernetesを構成する全サーバにNFSライブラリをインストール
手順2:NFSをマウント(mount)するPersistentVolume(PV)を作成
手順3:PersistentVolumeClaim(PVC)の作成
手順4:NFSをマウントした永続ボリュームを使うPodの作成(起動)
手順5:NFSをマウントした永続ボリュームを使うPodの動作確認


上記手順を実施することで、下図の「NFSをマウント(mount)した永続ボリューム(PV/PVC)を使用するKubernetes」を作成できます。
 

 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月25日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する流れ」の各手順に関してご説明します。
 

手順1:Kubernetesを構成する全サーバにNFSライブラリをインストール

「手順1:Kubernetesを構成する全サーバにNFSライブラリをインストール」に関してご説明します。
 

NFSをマウント(mount)した永続ボリューム(PV/PVC)を作成したい場合、全サーバにNFSライブラリが必要です


「サーバにNFSライブラリをインストールする手順」に関しては、以下の記事をご覧ください。
 


以上で、「手順1:Kubernetesを構成する全サーバにNFSライブラリをインストール」は完了です。
 

手順2:NFSをマウント(mount)するPersistentVolume(PV)を作成

「手順2:NFSをマウント(mount)するPersistentVolume(PV)を作成」に関してご説明します。
 

Pod内のデータをコンテナ外に保存するためにNFSをマウント(mount)したPersistentVolume(PV)を作成しましょう。


NFSをマウント(mount)するPersistentVolume(PV)を作成するために、以下の定義ファイルを作成しましょう。定義ファイル内の「適宜変更」と書いてある部分は、自分用に書き換えてください。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
  annotations:
    volume.beta.kubernetes.io/storage-class: "slow"
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 192.168.10.150 # NFSサーバのIPを指定(適宜変更)
    path: /nfs_dir # NFSサーバ上にあるフォルダを指定(適宜変更)


上記の定義を「nfs-pv.yaml」というファイル名で保存しましょう。

保存後、サーバ1(マスター)の「端末」または「ターミナル」上で、NFSをマウントしたPersistentVolume(PV)を作成するために以下のコマンドを実行します。

# kubectl create -f nfs-pv.yaml
persistentvolume/nfs-pv created
#


コマンド実行後、「created」が表示された場合、「Kubernetesクラスタ上にNFSをマウント(mount)したPersistentVolume(PV)を作成できた」と判断できます。
 

作成した「PersistentVolume(PV)」を削除したい場合は、以下のコマンドを実行します。
削除コマンド:kubectl delete -f nfs-pv.yaml


以上で、「手順2:NFSをマウント(mount)するPersistentVolume(PV)を作成」は完了です。
 

手順3:PersistentVolumeClaim(PVC)の作成

「手順3:PersistentVolumeClaim(PVC)の作成」に関してご説明します。
 

Pod内のデータをコンテナ外に保存するためにPVCを作成しましょう。


「PersistentVolumeClaim(PVC)を作成する手順」に関しては、以下の記事「手順2:PersistentVolumeClaim(PVC)の作成」をご覧ください。
 


参考までに、筆者が作成したPersistentVolumeClaim(PVC)の定義ファイルを下記に掲載します。
 


以上で、「手順3:PersistentVolumeClaim(PVC)の作成」は完了です。
 

手順4:NFSをマウントした永続ボリュームを使うPodの作成(起動)

「手順4:NFSをマウントした永続ボリュームを使うPodの作成(起動)」に関してご説明します。
 

以下のPodを作成しましょう。
・PodからNFSをマウントした永続ボリュームを使用できること。


「NFSをマウント(mount)した永続ボリュームを使う」Podを作成(起動)するために、以下の定義ファイルを作成してください。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-with-pvc
spec:
  containers:
    - name: nginx-with-pvc
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: pod-nfs-pvc
  nodeSelector:
        type: node2
  volumes:
    - name: pod-nfs-pvc
      persistentVolumeClaim:
       claimName: nfs-pvc


上記の定義を「pod.yaml」というファイル名で保存しましょう。

保存後、サーバ1(マスター)の「端末」または「ターミナル」上で、Podを作成(起動)するために以下のコマンドを実行します。

# kubectl create -f pod.yaml
pod/nginx-with-pvc created
# kubectl get po
NAME                READY   STATUS      RESTARTS   AGE
nginx-with-pvc      1/1     Running     0          15s
# kubectl describe po | grep node2
Node:         node2/192.168.10.151
# 


コマンド実行後、「Running」が表示された場合、「NFSをマウント(mount)した永続ボリュームを使うPodの作成ができた」と判断できます。

また、「Node: node2/192.168.10.151」が表示されたため、「Podがサーバ2(ワーカー)で起動している」と把握できます。

以上で、「手順4:NFSをマウントした永続ボリュームを使うPodの作成(起動)」は完了です。
 

手順5:NFSをマウントした永続ボリュームを使うPodの動作確認

「手順5:NFSをマウントした永続ボリュームを使うPodの動作確認」に関してご説明します。
 

NFSをマウントした永続ボリュームを使うPodを操作してみましょう。


NFSをマウントした永続ボリュームを使う」Podにログインし、永続ボリュームにファイルを作成するために、サーバ1(マスター)で以下のコマンドを実行してください。

# kubectl exec -it nginx-with-pvc /bin/bash
root@nginx-with-pvc:/# ls
bin  boot  dev docker-entrypoint.d  docker-entrypoint.sh  etc home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@nginx-with-pvc:/# ls /usr/share/nginx/html
root@nginx-with-pvc:/# cd /usr/share/nginx/html
root@nginx-with-pvc:/usr/share/nginx/html# touch a
root@nginx-with-pvc:/usr/share/nginx/html# exit
exit
#


NFSをマウントした永続ボリュームにファイルを作成後、Podを停止するために、以下のコマンドを実行しましょう。

# kubectl delete -f pod.yaml
pod "nginx-with-pvc" deleted
# 


コマンド実行後、「deleted」が表示された場合、「Podを停止できた」と判断できます。

続いて、Pod定義ファイル(pod.yaml)を以下のように編集し、サーバ3(ワーカー)でPodが起動するようにしてください。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-with-pvc
spec:
  containers:
    - name: nginx-with-pvc
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: pod-nfs-pvc
  nodeSelector:
        type: node3 # サーバ3でPodを起動するように設定
  volumes:
    - name: pod-nfs-pvc
      persistentVolumeClaim:
       claimName: nfs-pvc


編集後、サーバ1(マスター)の「端末」または「ターミナル」上で、Podを作成(起動)するために以下のコマンドを実行します。

# kubectl create -f pod.yaml
pod/nginx-with-pvc created
# kubectl get po
NAME                READY   STATUS      RESTARTS   AGE
nginx-with-pvc      1/1     Running     0          15s
# kubectl describe po | grep node3
Node:         node3/192.168.10.152
# 


コマンド実行後、「Node: node3/192.168.10.152」が表示されたため、「Podがサーバ3(ワーカー)で起動している」と把握できます。


Pod再起動前に作成したファイルが存在することを確認するために、以下のコマンドを順に実行してください。

# kubectl exec -it nginx-with-pvc /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx-with-pvc:/#  ls /usr/share/nginx/html/
a
root@nginx-with-pvc:/# exit
exit
#


コマンド実行後、「a」が表示された場合、「PodからNFSをマウントした永続ボリュームを正常に使えた」と判断できます。

以上で、「手順5:NFSをマウントした永続ボリュームを使うPodの動作確認」は完了です。
 

上記の流れで、NFSをマウント(mount)した永続ボリューム(PV/PVC)を使うことができました。

 

ちなみに、「Kubernetesの永続ボリュームのアーキテクチャをもっと知りたい」方は、以下の参考書がオススメです。


動画で学びたいという方には、以下がオススメです。

Kubernetes入門@udemy

 

【まとめ】KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順


今回の記事を通して、「KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順」をご紹介することで、以下の悩みを解消しました。

★悩み★
・KubernetesでNFSをマウントして永続ボリュームを作成する利点は何?
・KubernetesでNFSをマウントして永続ボリューム(PV/PVC)を作成したい。
・そもそもKubernetesの「永続ボリューム(PV/PVC)」って何?


「KubernetesでNFSを使い永続ボリューム(PV/PVC)を作成する手順?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。


 

 


 

コメント