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

 

★悩み★
・Kubernetesで永続ボリューム(PV/PVC)を作成する手順を知りたいな。
・Kubernetesで永続ボリューム(PV/PVC)を削除する手順を知りたいな
・そもそもKubernetesの「永続ボリューム(PV/PVC)」って何?


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

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


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

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

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

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



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


 

 


 

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


「Kubernetesの「永続ボリューム(PV/PVC)」の違い」をご紹介します。
 

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


下図の①から⑤を経て、KubernetesのあるPod内で永続ボリュームを使えます。
 


Kubernetesにおける「永続ボリューム」の定義に関して、以下に記載します。
 

★Kubernetesにおける「永続ボリューム」とは★
永続ボリュームは、KubernetesのPersistentVolume(PV)とPersistentVolumeClaim(PVC)の機能を用いた機能のことです。永続ボリュームを使うことで、Pod内で作成したデータをコンテナの外に保存できます。Podを削除(停止)してもPod内で作成したデータを残せます。

出典:Kubernetes公式ドキュメント


Kubernetesにおける「PersistentVolume(PV)」の定義に関して、以下に記載します。
 

★Kubernetesにおける「PersistentVolume(PV)」とは★
PersistentVolume(PV)は、Podがデータを保存するストレージ(永続化領域)を定義するリソースです。一般的には、Kubernetesの管理者が「ストレージ」や「PersistentVolume(PV)」を用意します。

出典:Kubernetes公式ドキュメント


Kubernetesにおける「PersistentVolumeClaim(PVC)」の定義に関して、以下に記載します。
 

★Kubernetesにおける「PersistentVolumeClaim(PVC)」とは★
PersistentVolumeClaim(PVC)は、永続化領域の要求を行うリソースです。PodはPVC経由で永続化領域を使用できます。一般的には、Kubernetesの利用者がPersistentVolumeClaim(PVC)」を定義します。

出典:Kubernetes公式ドキュメント


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

永続ボリューム/PV/PVCを使い、Pod内のデータを消えないようにしましょう。

 

Kubernetesで永続ボリューム(PV/PVC)を作成するための準備


「Kubernetesで永続ボリューム(PV/PVC)を作成するための準備」に関してご紹介します。

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


上記の流れで、「Kubernetesで永続ボリューム(PV/PVC)を作成するための準備」ができます。
 

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


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

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

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

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


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


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


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

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


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

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

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

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


以下のコマンドをマスターで実行し、ワーカーノードが存在することを確認してください。

# kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
node1   Ready    control-plane,master   3m47s   v1.20.5
node2   Ready    <none>                 2m55s   v1.20.5
node3   Ready    <none>                 2m55s   v1.20.5


コマンド実行結果において、上記のように「worker」が存在しない場合、ワーカーノードを割り当てるために、以下のコマンドをマスターで実行しましょう。

# kubectl label node node2 node-role.kubernetes.io/worker=worker
# kubectl label node node3 node-role.kubernetes.io/worker=worker


ワーカーノードが割り当たったことを確認するために、以下のコマンドをマスターで実行してください。

# kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
node1   Ready    control-plane,master   3m47s   v1.20.5
node2   Ready    worker                 2m55s   v1.20.5
node3   Ready    worker                 2m55s   v1.20.5


コマンド実行結果において、上記のように「worker」が出力された場合、「無事にワーカーノードを割り当てられた」と判断できます。

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

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

 

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


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

★Kubernetesで永続ボリューム(PV/PVC)を作成するまでの流れ★
手順1:PersistentVolume(PV)の作成
手順2:PersistentVolumeClaim(PVC)の作成
手順3:永続ボリュームを使うPodの作成(起動)
手順4:永続ボリュームを使うPodの動作確認


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

 

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


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

手順1:PersistentVolume(PV)の作成

「手順1:PersistentVolume(PV)の作成」に関してご説明します。
 

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


PersistentVolume(PV)を作成するために、以下の定義ファイルを作成してください。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: hostpath-pv
spec:
  capacity:
    storage: 15Gi
  persistentVolumeReclaimPolicy: Retain
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data"


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

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

# kubectl apply -f hostpath-pv.yaml
persistentvolume/hostpath-pv created
#


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

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


以上で、「手順1:PersistentVolume(PV)の作成」は完了です。
 

手順2:PersistentVolumeClaim(PVC)の作成

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

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


PersistentVolumeClaim(PVC)を作成するために、以下の定義ファイルを作成してください。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: hostpathpvc
  annotations:
    volume.beta.kubernetes.io/persistent-volume: hostpath-pv
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi


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

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

# kubectl apply -f hostpath-pvc.yaml
persistentvolumeclaim/hostpathpvc created
# 


コマンド実行後、「created」が表示された場合、「Kubernetesクラスタ上にPersistentVolumeClaim(PVC)の作成できた」と判断できます。
 

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


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

手順3:永続ボリュームを使うPodの作成(起動)

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

以下のPodを作成しましょう。
・Podは「サーバ2(ワーカー)」で起動すること。
・Podから永続ボリュームを使用できること。


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

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: hostpath-pvc-pod
  name: hostpath-pv-pod1
spec:
  affinity:     #起動制限
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: node-role.kubernetes.io/worker
              operator: In
              values:
                - worker   #起動ノード指定
  containers:
  - name: hostpath-pv-busybox
    image: busybox
    command: ["/bin/sh", "-c"]
    args: [ "tail -f /dev/null" ]
    volumeMounts:
    - name: hostpath-vol1
      mountPath: /var/lib/busybox
      readOnly: false
  nodeSelector:
        type: node2 # node2でPodを起動する設定
  volumes:
  - name: hostpath-vol1
    persistentVolumeClaim:
      claimName: hostpathpvc


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

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

# kubectl get nodes -L type
NAME    STATUS   ROLES                  AGE     VERSION   TYPE
node1   Ready    control-plane,master   3d11h   v1.20.5
node2   Ready    worker                 3d11h   v1.20.5
node3   Ready    worker                 3d11h   v1.20.5
# kubectl label nodes node2 type=node2
node/node2 labeled
# kubectl get nodes -L type
NAME    STATUS   ROLES                  AGE     VERSION   TYPE
node1   Ready    control-plane,master   3d11h   v1.20.5
node2   Ready    worker                 3d11h   v1.20.5   node2
node3   Ready    worker                 3d11h   v1.20.5
# kubectl apply -f pod-pvc.yaml
pod/hostpath-pv-pod1 created
# kubectl get po
NAME               READY   STATUS    RESTARTS   AGE
hostpath-pv-pod1   1/1     Running   0          6s
# 


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

以上で、「手順3:永続ボリュームを使うPodの作成(起動)」は完了です。
 

手順4:永続ボリュームを使うPodの動作確認

「手順4:永続ボリュームを使うPodの動作確認」に関してご説明します。
 

永続ボリュームを使うPodを操作してみましょう。


永続ボリュームを使うPodにログインし、永続ボリュームにファイルを作成するために、「端末」または「ターミナル」で以下のコマンドを実行してください。

# kubectl exec -it hostpath-pv-pod1 /bin/ash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # echo hello >> /var/lib/busybox/test.txt
/ # exit


永続ボリュームにファイルを作成後、永続ボリュームを使うPodを再起動するために、以下のコマンドを順に実行しましょう。

# kubectl delete -f pod-pvc.yaml
pod "hostpath-pv-pod1" deleted
# kubectl apply -f pod-pvc.yaml
pod/hostpath-pv-pod1 created
# kubectl get po
NAME               READY   STATUS    RESTARTS   AGE
hostpath-pv-pod1   1/1     Running   0          6s
# 


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

# kubectl exec -it hostpath-pv-pod1 /bin/ash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # cat /var/lib/busybox/test.txt
hello
/ # exit
# ssh node2 ls /data/
test.txt


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

以上で、「手順4:永続ボリュームを使うPodの動作確認」は完了です。
 

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

 

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

 

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

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

★悩み★
・Kubernetesで永続ボリューム(PV/PVC)を作成する手順を知りたいな。
・Kubernetesで永続ボリューム(PV/PVC)を削除する手順を知りたいな
・そもそもKubernetesの「永続ボリューム(PV/PVC)」って何?


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


 

 


 

コメント