wikiv3:vol_nfs
Table of Contents
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
