はじめに
この実験では、Kubernetes において PersistentVolume (PV) を使用してアプリケーションデータを保存する方法を学びます。
PersistentVolume (PV) は、クラスター内のネットワークストレージの一部を表す Kubernetes リソースです。これを使用することで、コンテナのライフサイクルとは独立してアプリケーションデータを保存できます。つまり、コンテナが終了したり別のノードに移動したりしても、データは保持されます。
この実験では、PersistentVolume を作成し、それを使用してシンプルな Web アプリケーションのデータを保存します。次に、PersistentVolumeClaim (PVC) を使用して PersistentVolume にアクセスするようにアプリケーションを変更します。最後に、PVC を修正して特定のストレージリソースを要求する方法を学びます。
Minikube クラスターの起動
リソースを作成する前に、Kubernetes クラスターを起動する必要があります。Minikube は、ローカルマシン上で動作する軽量な Kubernetes 環境です。
作業ディレクトリへの移動:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube の起動:
Minikube を起動して Kubernetes クラスターを初期化します。
minikube start- このコマンドにより、ローカルマシン上にシングルノードの Kubernetes クラスターがセットアップされます。
- システムのパフォーマンスによっては、Minikube の起動に数分かかる場合があります。
Minikube の動作確認:
Minikube クラスターの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認してください。- クラスターが実行されていない場合は、再度
minikube startを実行してください。
Minikube の起動で問題が発生した場合は、必要に応じて minikube delete を使用して環境をリセットしてください。
PersistentVolume の作成
このステップでは、データの保存に使用できる PersistentVolume を作成します。以下の内容で pv.yaml という名前の YAML ファイルを作成してください。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /mnt/data
このファイルは、容量 1Gi、アクセスモード ReadWriteOnce の PersistentVolume を作成します。hostPath フィールドは、データがホストマシンの /mnt/data パスに保存されることを指定しています。persistentVolumeReclaimPolicy フィールドは Retain に設定されており、PersistentVolume が削除されてもデータが保持されることを意味します。
以下のコマンドを使用して、PersistentVolume をクラスターに適用します。
kubectl apply -f pv.yaml
シンプルな Web アプリケーションのデプロイ
このステップでは、ステップ 1 で作成した PersistentVolume にデータを保存するシンプルな Web アプリケーションをデプロイします。以下の内容で web-app.yaml という名前の YAML ファイルを作成してください。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: nginx
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html/data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvc
このファイルは、1 つのレプリカを持ち、nginx イメージを実行するコンテナを含む Deployment を作成します。volumeMounts フィールドは、コンテナが /usr/share/nginx/html/data パスに PersistentVolume をマウントするように指定しています。volumes フィールドは、コンテナが my-pvc という名前の PersistentVolumeClaim を使用するように指定しています。
以下のコマンドを使用して、Deployment をクラスターに適用します。
kubectl apply -f web-app.yaml
PersistentVolumeClaim の作成
このステップでは、ステップ 1 で作成した PersistentVolume からストレージを要求するための PersistentVolumeClaim (PVC) を作成します。以下の内容で pvc.yaml という名前の YAML ファイルを作成してください。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
このファイルは、アクセスモード ReadWriteOnce を持ち、PersistentVolume から 500Mi のストレージを要求する PersistentVolumeClaim を作成します。
以下のコマンドを使用して、PersistentVolumeClaim をクラスターに適用します。
kubectl apply -f pvc.yaml
データ永続性の確認
このステップでは、データが PersistentVolume に永続的に保存されていることを確認します。コンテナで実行されている Web アプリケーションにアクセスし、PersistentVolume にデータを書き込みます。
まず、以下のコマンドを実行して、アプリケーションを実行している Pod の名前を確認します。
kubectl get pods -l app=web-app
アプリケーションを実行している Pod が 1 つ表示されるはずです。その Pod 名をメモしてください。
次に、以下のコマンドを実行して、アプリケーションを実行しているコンテナ内のシェルセッションを開きます。
kubectl exec -it pod-name -- /bin/sh
pod-name は、先ほどメモした Pod 名に置き換えてください。
シェルセッションに入ったら、以下のコマンドを実行して test.txt ファイルを追加します。
echo "This is a test file." > /usr/share/nginx/html/data/test.txt
このコマンドにより、PersistentVolume のデータディレクトリ内に "This is a test file." というテキストを含む test.txt というファイルが作成されます。
以下のコマンドで Web アプリケーションを削除します。
kubectl delete deployment web-app
以下のコマンドで Web アプリケーションを再作成します。
kubectl apply -f web-app.yaml
以下のコマンドを使用して、データディレクトリに作成したファイルがまだ存在することを確認します。
kubectl get pods -l app=web-app
kubectl exec pod-name -- cat /usr/share/nginx/html/data/test.txt
pod-name は、先ほどメモした Pod 名に置き換えてください。
PVC ストレージリソースの変更
このステップでは、PVC を変更して PersistentVolume から特定のストレージリソースを要求するようにします。pvc.yaml ファイルを修正し、500Mi ではなく 1Gi のストレージを要求するように変更します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
StorageClass に allowVolumeExpansion: true フィールドを追加します。
kubectl edit storageclass standard

以下のコマンドを使用して、更新された PersistentVolumeClaim をクラスターに適用します。
kubectl delete deployment web-app
kubectl delete pvc my-pvc
kubectl apply -f web-app.yaml
kubectl apply -f pvc.yaml
まとめ
この実験では、Kubernetes において PersistentVolume を使用してアプリケーションデータを保存する方法を学びました。PersistentVolume を作成し、それを使用するシンプルな Web アプリケーションをデプロイし、PersistentVolume からストレージを要求するための PersistentVolumeClaim を作成し、特定のストレージリソースを要求するように PersistentVolumeClaim を変更しました。また、コンテナが終了したり別のノードに移動したりしても、データが PersistentVolume に永続的に保存されることを確認しました。


