Kubernetes : Configure Persistent Storage2020/08/19 |
Configure Persistent Storage in Kubernetes Cluster.
This example is based on the environment like follows.
For example, run NFS Server on Master Node and configure Pods can use NFS area as external storage.
-----------+---------------------------+--------------------------+------------ | | | eth0|10.0.0.30 eth0|10.0.0.51 eth0|10.0.0.52 +----------+-----------+ +-----------+----------+ +-----------+----------+ | [ dlp.srv.world ] | | [ node01.srv.world ] | | [ node02.srv.world ] | | Master Node | | Worker Node | | Worker Node | +----------------------+ +----------------------+ +----------------------+ |
[1] |
Run NFS Server on Master Node, refer to here.
On this example, configure [/home/nfsshare] directory as NFS share. |
[2] | Create PV (Persistent Volume) object and PVC (Persistent Volume Claim) object on Master Node. |
apiVersion: v1 kind: PersistentVolume metadata: # any PV name name: nfs-pv spec: capacity: # storage size storage: 10Gi accessModes: # Access Modes: # - ReadWriteMany (RW from multi nodes) # - ReadWriteOnce (RW from a node) # - ReadOnlyMany (R from multi nodes) - ReadWriteMany persistentVolumeReclaimPolicy: # retain even if pods terminate Retain nfs: # NFS server's definition path: /home/nfsshare server: 10.0.0.30 readOnly: false kubectl create -f nfs-pv.yml persistentvolume "nfs-pv" created root@dlp:~# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nfs-pv 10Gi RWX Retain Available 4s
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
# any PVC name
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
kubectl create -f nfs-pvc.yml persistentvolumeclaim "nfs-pvc" created root@dlp:~# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-pvc Bound nfs-pv 10Gi RWX 4s |
[3] | Create Pods with PVC above. |
root@dlp:~#
vi nginx-nfs.yml apiVersion: apps/v1 kind: Deployment metadata: # any Deployment name name: nginx-nfs labels: name: nginx-nfs spec: replicas: 3 selector: matchLabels: app: nginx-nfs template: metadata: labels: app: nginx-nfs spec: containers: - name: nginx-nfs image: nginx ports: - name: web containerPort: 80 volumeMounts: - name: nfs-share # mount point in container mountPath: /usr/share/nginx/html volumes: - name: nfs-share persistentVolumeClaim: # PVC name you created claimName: nfs-pvc
root@dlp:~#
root@dlp:~# kubectl create -f nginx-nfs.yml deployment.apps/nginx-nfs created kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-nfs-85754ccc84-7997c 1/1 Running 0 17s 10.244.2.4 node02.srv.world <none> <none> nginx-nfs-85754ccc84-l2mhf 1/1 Running 0 17s 10.244.1.6 node01.srv.world <none> <none> nginx-nfs-85754ccc84-xdrgd 1/1 Running 0 17s 10.244.1.7 node01.srv.world <none> <none>root@dlp:~# kubectl expose deployment nginx-nfs --type="NodePort" --port 80 service/nginx-nfs exposed root@dlp:~# kubectl get service nginx-nfs NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-nfs NodePort 10.100.149.182 <none> 80:32706/TCP 4s # create a test file under the NFS shared directory root@dlp:~# echo 'NFS Persistent Storage Test' > /home/nfsshare/index.html
# verify accesses root@dlp:~# curl 10.100.149.182 NFS Persistent Storage Test |
Sponsored Link |