CentOS 7
Sponsored Link

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.
# create PV definition

[root@dlp ~]#
vi nfs-pv.yml
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

[root@dlp ~]#
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

# create PVC definition

[root@dlp ~]#
vi nfs-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  # any PVC name
  name: nfs-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
     requests:
       storage: 10Gi

[root@dlp ~]#
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 ~]#
kubectl apply -f nginx-nfs.yml

deployment.apps/nginx-nfs created
[root@dlp ~]#
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
Matched Content