Kubernetes (k8s) で永続ボリュームを作る

May 18, 2024, 7:09 AM
今回は、microAI のアプリで使用する Redis や MongoDB のデータを保持するための永続ボリュームを Kubernetes 上に構築していきます。

microAIのKubernetes Nodes

  • Raspberry Pi 4 ・・・ master-01 (Disk: 32G)
  • Raspberry Pi 3 B+ ・・・ worker-01 (Disk: 32G)
  • Raspberry Pi 3 B+ ・・・ worker-02 (Disk: 32G)
  • Raspberry Pi 3 B+ ・・・ worker-03 (Disk: 128G)
  • Jetson Orin Nano NX ・・・ jetson-01 (Disk: 1T)

現在のところ、この5台構成です。
worker-03 が NFS として動いています。構築時の手順は、
https://microai.jp/blog/72358784-fb27-4f63-b405-f6247982b2bf
を参照してください。

用語の説明

PersistentVolume (PV)

ストレージのこと。ただただ、ストレージなだけです。

PersistentVolumeClaim (PVC)

PVとコンテナをつなぐ役割を果たします。

StorageClassの作成

# nano microai-storage.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: microai-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

# kubectl apply -f microai-storage.yaml
storageclass.storage.k8s.io/microai-storage created

確認

# kubectl get storageclass
OR
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
microai-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 13s

間違ったときに削除

# kubectl delete storageclass {{ストレージクラス名}}

PersistentVolumeの作成

# nano microai-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: microai-pv
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
nfs:
path: /srv/nfs/share
server: 100.64.1.114
persistentVolumeReclaimPolicy: Retain
storageClassName: microai-storage

# kubectl apply -f microai-pv.yaml
persistentvolume/microai-pv created
あとからサイズ変更が難しいそうなので、大きめに確保しておきます。

PersistentVolumeClaimの作成

# nano microai-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: microai-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
volumeName: microai-pv
storageClassName: microai-storage

# kubectl apply -f microai-pvc.yaml
kubectl apply -f microai-pvc.yaml

ここまでで作成完了です。

正しく作れているか確認

# kubectl get pvc microai-pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
microai-pvc Bound microai-pv 50Gi RWX microai-storage <unset> 8m28s

# kubectl get pv microai-pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
microai-pv 50Gi RWX Retain Bound default/microai-pvc microai-storage <unset> 9m9s

Pod からマウントする方法

例:
apiVersion: v1
kind: Pod
metadata:
name: nfs-client-pod
spec:
containers:
- name: app
image: nginx
volumeMounts:
- name: nfs-storage
mountPath: /usr/share/nginx/html
volumes:
- name: microai-storage
persistentVolumeClaim:
claimName: microai-pvc
この設定では、NFSストレージがPodの/usr/share/nginx/htmlディレクトリにマウントされます。これにより、Pod内のアプリケーションはNFS上のデータにアクセスできるようになります。
Raspberry Pi 3 B+(Ubuntu) でNFSファイルサーバーを作る
Kubernetes から ワーカーノードを削除して、再度、JOINさせるKubernetes から ワーカーノードを削除して、再度、JOINさせる