--- title: Read Write ManyなPVが作れないKubernetes環境でRead Write ManyなPVを作れるようにするメモ tags: ["Kubernetes", "kind", "NFS", "NFS Ganesha server and external provisioner"] categories: ["Dev", "CaaS", "Kubernetes", "NFS"] date: 2023-09-05T05:34:29Z updated: 2023-09-05T05:34:29Z --- Kindなど、Read Write ManyなPVが作れないKubernetes環境でRead Write ManyなPVを作れるようにするメモ。 [NFS Ganesha server and external provisioner](https://github.com/kubernetes-sigs/nfs-ganesha-server-and-external-provisioner)はInternal NFS Server兼NFS Provisionerとして利用できます。 このNFS Provisionerを使ってRead Write ManyでPVを作成できます。 Helmでインストールします。 ``` helm repo add nfs-ganesha-server-and-external-provisioner https://kubernetes-sigs.github.io/nfs-ganesha-server-and-external-provisioner/ helm upgrade nfs-server-provisioner nfs-ganesha-server-and-external-provisioner/nfs-server-provisioner \ --set persistence.enabled=true \ --set persistence.size=10Gi \ --install \ -n nfs \ --create-namespace \ --wait ``` 次のPodが作成されます。 ``` $ kubectl get pod -n nfs NAME READY STATUS RESTARTS AGE nfs-server-provisioner-0 1/1 Running 0 33s ``` `nfs`というStorageClassも作成されます。 ``` $ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs cluster.local/nfs-server-provisioner Delete Immediate true 1m19s standard (default) rancher.io/local-path Delete WaitForFirstConsumer false 25h ``` 次のようなPVCを作成します。 ```yaml kubectl apply -f- << EOF --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-dynamic-volume-claim spec: storageClassName: "nfs" accessModes: - ReadWriteMany resources: requests: storage: 1Gi --- EOF ``` RWXでPVを作成できました。 ``` $ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-dynamic-volume-claim Bound pvc-1f062a6f-3955-427a-ae6e-8b25ff17e670 1Gi RWX nfs 31s ``` 確認できたらPVCを削除します。 ``` kubectl delete pvc test-dynamic-volume-claim ```