Kubernetes : Configure Persistent Storage2018/04/15 |
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 apply -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 apply -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 apply -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-96f55949-bkqz2 1/1 Running 0 37s 10.244.1.5 node01.srv.world <none> <none> nginx-nfs-96f55949-kl6q5 1/1 Running 0 37s 10.244.1.6 node01.srv.world <none> <none> nginx-nfs-96f55949-pr5xl 1/1 Running 0 37s 10.244.2.5 node02.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.111.90.200 <none> 80:32419/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.111.90.200 NFS Persistent Storage Test |
Sponsored Link |