$ kubectl create namespace wiki namespace/wiki created storage-class.yaml --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: wiki-storage namespace: wiki provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer $ kubectl apply -f storage-class.yaml storageclass.storage.k8s.io/wiki-storage created $ kubectl get sc -n wiki NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE wiki-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 46s $ cat volume-local.yaml --- apiVersion: v1 kind: PersistentVolume metadata: name: pv-wiki namespace: wiki spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: wiki-storage local: path: /home/gean/data nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - kube-worker-01.juntotelecom.com.br $ kubectl apply -f volume-local.yaml persistentvolume/pv-wiki created $ kubectl get pv -n wiki NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv-wiki 1Gi RWO Retain Available wiki-storage 35s $ cat claim-local.yaml --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: volume-claim-wiki namespace: wiki spec: accessModes: - ReadWriteOnce storageClassName: wiki-storage resources: requests: storage: 1Gi $ kubectl apply -f claim-local.yaml persistentvolumeclaim/volume-claim-wiki created $ kubectl get sc,pv,pvc -n wiki NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE storageclass.storage.k8s.io/wiki-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 13m NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/pv-wiki 1Gi RWO Retain Available wiki-storage 5m27s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/volume-claim-wiki Pending wiki-storage 47s $ cat dokuwiki-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: dokuwiki name: dokuwiki namespace: wiki spec: replicas: 1 selector: matchLabels: app: dokuwiki strategy: {} template: metadata: labels: app: dokuwiki spec: containers: - image: docker.io/bitnami/dokuwiki:latest name: dokuwiki imagePullPolicy: IfNotPresent ports: - containerPort: 8080 - containerPort: 8443 volumeMounts: - mountPath: /bitnami/dokuwiki name: dokuwiki-data volumes: - name: dokuwiki-data persistentVolumeClaim: claimName: volume-claim-wiki $ kubectl apply -f dokuwiki-deployment.yaml deployment.apps/dokuwiki created $ kubectl get deploy -n wiki -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR dokuwiki 1/1 1 1 4m22s dokuwiki docker.io/bitnami/dokuwiki:20200729 app=dokuwiki $ kubectl get pods -n wiki -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dokuwiki-cbb8db749-j7p98 1/1 Running 5 (2m27s ago) 4m12s 10.85.0.5 kube-worker-01.juntotelecom.com.br $ cat dokuwiki-service.yaml apiVersion: v1 kind: Service metadata: labels: app: dokuwiki name: dokuwiki spec: ports: - name: "80" port: 80 targetPort: 8080 - name: "443" port: 443 targetPort: 8443 selector: app: dokuwiki status: loadBalancer: {} $ kubectl apply -f dokuwiki-service.yaml service/dokuwiki created $ kubectl patch svc dokuwiki -p '{"spec": {"ports": [{"port": 80},{"port": 443}],"type": "NodePort"}}' service/dokuwiki patched Ou: $ kubectl expose deploy dokuwiki --type="NodePort" --port 8080 -n wiki