今回は、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 として動いています。構築時の手順は、
を参照してください。
用語の説明
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上のデータにアクセスできるようになります。