User Tools

Site Tools


wikiv3:vol_nfs

Criar Volumes Persistente com NFS

NFS server

# yum install nfs-utils
# systemctl start rpcbind
# systemctl start nfs-server
# systemctl enable rpcbind
# systemctl enable nfs-server
# mkdir /var/nfs
# mkdir /var/nfs/app
# mkdir /var/nfs/data
# cat /etc/exports
/var/nfs/app    177.75.176.32/27(rw,no_root_squash)
/var/nfs/data   177.75.176.32/27(rw,no_root_squash)
# exportfs -arv
exporting 177.75.176.32/27:/var/nfs/data
exporting 177.75.176.32/27:/var/nfs/app
# exportfs  -s
/var/nfs/app  177.75.176.32/27(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/var/nfs/data  177.75.176.32/27(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --permanent --add-service=rpc-bind
# firewall-cmd --reload

Kubernets workers

$ sudo apt install nfs-common
$ sudo showmount -e 172.20.64.11
Export list for 172.20.64.11:
/var/nfs/data 177.75.176.32/27
/var/nfs/app  177.75.176.32/27

Kubernetes controller

storage-class.yaml
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
  namespace: 4labs
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
$ kubectl apply -f lab03/storage-class.yaml
storageclass.storage.k8s.io/local-storage unchanged
volume-app.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: volume-nfs-app
  namespace: 4labs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 172.20.64.11
    path: /var/nfs/app
 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim-nfs-app
  namespace: 4labs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10G
$ kubectl apply -f lab03/volume-app.yaml
persistentvolume/volume-nfs-app created
persistentvolumeclaim/claim-nfs-app created
volume-mysql.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: volume-nfs-mysql
  namespace: 4labs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 172.20.64.11
    path: /var/nfs/data
 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim-nfs-mysql
  namespace: 4labs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10G
$ kubectl apply -f lab03/volume-mysql.yaml
persistentvolume/volume-nfs-mysql created
persistentvolumeclaim/claim-nfs-mysql created
$ kubectl get sc -n 4labs
NAME            PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-storage   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  17h
$ kubectl get pv -n 4labs
NAME               CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS    REASON   AGE
pv-deploy          1Gi        RWO            Retain           Bound    default/volume-claim-local   local-storage            17h
volume-nfs-app     10Gi       RWX            Recycle          Bound    4labs/claim-nfs-app                                   2m49s
volume-nfs-mysql   10Gi       RWO            Recycle          Bound    4labs/claim-nfs-mysql                                 40s
$ kubectl get pvc -n 4labs
NAME              STATUS   VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS   AGE
claim-nfs-app     Bound    volume-nfs-app     10Gi       RWX                           3m
claim-nfs-mysql   Bound    volume-nfs-mysql   10Gi       RWO                           51s

Atualizar Aplicação PHP com Volumes NFS

memcached1-deploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: memcached1
  name: memcached1
  namespace: 4labs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: memcached1
  strategy: {}
  template:
    metadata:
      labels:
        app: memcached1
    spec:
      containers:
      - image: memcached:latest
        imagePullPolicy: IfNotPresent
        name: memcached1
        ports:
        - containerPort: 11211
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: memcached1
  name: memcached1
  namespace: 4labs
spec:
  clusterIP: None
  ports:
  - port: 11211
    protocol: TCP
    targetPort: 11211
  selector:
    app: memcached1
$ kubectl apply -f lab03/memcached1-deploy.yaml
deployment.apps/memcached1 created
service/memcached1 created
memcached2-deploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: memcached2
  name: memcached2
  namespace: 4labs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: memcached2
  strategy: {}
  template:
    metadata:
      labels:
        app: memcached2
    spec:
      containers:
      - image: memcached:latest
        imagePullPolicy: IfNotPresent
        name: memcached2
        ports:
        - containerPort: 11211
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: memcached2
  name: memcached2
  namespace: 4labs
spec:
  clusterIP: None
  ports:
  - port: 11211
    protocol: TCP
    targetPort: 11211
  selector:
    app: memcached2
$ kubectl apply -f lab03/memcached2-deploy.yaml
deployment.apps/memcached2 created
service/memcached2 created
$ kubectl get all -l app=memcached1 -n 4labs
NAME                              READY   STATUS    RESTARTS   AGE
pod/memcached1-6487bb895f-t5wrh   1/1     Running   0          2m55s
 
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
service/memcached1   ClusterIP   None         <none>        11211/TCP   2m55s
 
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/memcached1   1/1     1            1           2m55s
 
NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/memcached1-6487bb895f   1         1         1       2m55s
$ kubectl get all -l app=memcached2 -n 4labs
NAME                              READY   STATUS    RESTARTS   AGE
pod/memcached2-56fb6d54cf-2jkzj   1/1     Running   0          40s
 
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
service/memcached2   ClusterIP   None         <none>        11211/TCP   40s
 
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/memcached2   1/1     1            1           40s
 
NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/memcached2-56fb6d54cf   1         1         1       40s
dep-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: app
  name: app
  namespace: 4labs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  strategy: {}
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - image: instrutordocker/4linux-app:latest
        name: app
        env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: app-configmaps
              key: DB_HOST
        - name: DB_PORT
          valueFrom:
            configMapKeyRef:
              name: app-configmaps
              key: DB_PORT
        - name: DB_USER
          valueFrom:
            configMapKeyRef:
              name: app-configmaps
              key: DB_USER
        - name: DB_NAME
          valueFrom:
            configMapKeyRef:
              name: app-configmaps
              key: DB_NAME
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: DB_PASS

        volumeMounts:
        - name: claim-nfs-app
          mountPath: "/app"
        - name: config-volume-php
          mountPath: "/app/php-ini/"

      volumes:
        - name: claim-nfs-app
          persistentVolumeClaim:
            claimName: claim-nfs-app
        - name: config-volume-php
          configMap:
            name: php-config
$ kubectl replace -f lab03/dep-app.yaml
deployment.apps/app configured
dep-mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: 4labs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  strategy: {}
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.7
        imagePullPolicy: IfNotPresent
        name: mysql
        env:
        - name: MYSQL_DATABASE
          valueFrom:
            configMapKeyRef:
              name: mysql-configmaps
              key: MYSQL_DATABASE
        - name: MYSQL_USER
          valueFrom:
            configMapKeyRef:
              name: mysql-configmaps
              key: MYSQL_USER
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secrets
              key: MYSQL_ROOT_PASSWORD
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secrets
              key: MYSQL_PASSWORD

        volumeMounts:
        - name: claim-nfs-mysql
          mountPath: /var/lib/mysql

        - name: mysql-db-config
          mountPath: /docker-entrypoint-initdb.d/

        - name: dump-usuarios
          mountPath: /dump/

      volumes:
        - name: claim-nfs-mysql
          persistentVolumeClaim:
            claimName: claim-nfs-mysql

        - name: mysql-db-config
          configMap:
            name: mysql-db-config

        - name: dump-usuarios
          configMap:
            name: dump-usuarios
$ kubectl replace -f lab03/dep-mysql.yaml
deployment.apps/mysql configured
$ kubectl get all -n 4labs -o wide
NAME                              READY   STATUS    RESTARTS   AGE   IP               NODE                                 NOMINATED NODE   READINESS GATES
pod/app-577658dc67-9dvmc          1/1     Running   0          44m   172.16.213.140   kube-worker-02.juntotelecom.com.br   <none>           <none>
pod/memcached1-6487bb895f-t5wrh   1/1     Running   0          50m   172.16.213.139   kube-worker-02.juntotelecom.com.br   <none>           <none>
pod/memcached2-56fb6d54cf-2jkzj   1/1     Running   0          48m   172.16.101.74    kube-worker-01.juntotelecom.com.br   <none>           <none>
pod/mysql-9bcb6fb76-xzcpb         1/1     Running   0          41m   172.16.101.75    kube-worker-01.juntotelecom.com.br   <none>           <none>
 
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE   SELECTOR
service/app          NodePort    10.102.86.152    <none>        8080:31541/TCP   2d    app=app
service/memcached1   ClusterIP   None             <none>        11211/TCP        50m   app=memcached1
service/memcached2   ClusterIP   None             <none>        11211/TCP        48m   app=memcached2
service/mysql        ClusterIP   10.101.224.168   <none>        3306/TCP         2d    app=mysql
 
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                              SELECTOR
deployment.apps/app          1/1     1            1           2d    app          instrutordocker/4linux-app:latest   app=app
deployment.apps/memcached1   1/1     1            1           50m   memcached1   memcached:latest                    app=memcached1
deployment.apps/memcached2   1/1     1            1           48m   memcached2   memcached:latest                    app=memcached2
deployment.apps/mysql        1/1     1            1           2d    mysql        mysql:5.7                           app=mysql
 
NAME                                    DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                              SELECTOR
replicaset.apps/app-577658dc67          1         1         1       44m   app          instrutordocker/4linux-app:latest   app=app,pod-template-hash=577658dc67
replicaset.apps/app-6df548778d          0         0         0       20h   app          instrutordocker/4linux-app:latest   app=app,pod-template-hash=6df548778d
replicaset.apps/app-f549cf775           0         0         0       2d    app          instrutordocker/4linux-app:latest   app=app,pod-template-hash=f549cf775
replicaset.apps/memcached1-6487bb895f   1         1         1       50m   memcached1   memcached:latest                    app=memcached1,pod-template-hash=6487bb895f
replicaset.apps/memcached2-56fb6d54cf   1         1         1       48m   memcached2   memcached:latest                    app=memcached2,pod-template-hash=56fb6d54cf
replicaset.apps/mysql-56b679f667        0         0         0       20h   mysql        mysql:5.7                           app=mysql,pod-template-hash=56b679f667
replicaset.apps/mysql-9bcb6fb76         1         1         1       41m   mysql        mysql:5.7                           app=mysql,pod-template-hash=9bcb6fb76
replicaset.apps/mysql-cc8b4bdf7         0         0         0       2d    mysql        mysql:5.7                           app=mysql,pod-template-hash=cc8b4bdf7
wikiv3/vol_nfs.txt · Last modified: by 127.0.0.1