$ 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