Kubernetes : Use Persistent Storage
2018/04/15 |
Use 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 | | NFS Server | | | | | +----------------------+ +----------------------+ +----------------------+ |
[1] |
Run NFS Server on Master Node, refer to here.
On this example, configure [/var/lib/nfs-share] directory as NFS shared directory. |
[2] | Define 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: # 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: /var/lib/nfs/share 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 Bound default/nfs-pvc 2d apiVersion: v1 kind: PersistentVolumeClaim metadata: # any PVC name name: nfs-pvc spec: accessModes: # ReadWriteMany(RW from multi nodes), ReadWriteOnce(RW from a node), ReadOnlyMany(R from multi nodes) - ReadWriteMany resources: requests: # storage size to use storage: 1Gi 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 2d |
[3] | Create a Pod with PVC above. |
[root@dlp ~]#
vi nginx-nfs.yml apiVersion: v1 kind: Pod metadata: # any Pod name name: nginx-nfs labels: name: nginx-nfs spec: containers: - name: nginx-nfs image: fedora/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 ~]#
kubectl create -f nginx-nfs.yml pod "nginx-nfs" created # create a test file under the NFS shared directory [root@dlp ~]# echo 'NFS Persistent Storage Test' > /var/lib/nfs/share/index.html
kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-nfs 1/1 Running 0 3m 10.244.1.10 node01.srv.world # verify accessing [root@dlp ~]# curl 10.244.1.10 NFS Persistent Storage Test |