by Anish
Posted on Thursday Jnauary 17, 2019
In this article we will learn how to to setup wordpress in kubernetes cluster using helm
Helm: Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured Kubernetes resources.
root@kube-master:# helm init
root@kube-master:# kubectl create serviceaccount --namespace kube-system tiller
root@kube-master:# kubectl create clusterrolebinding tiller-cluster-rule \
--clusterrole=cluster-admin --serviceaccount=kube-system:tiller
root@kube-master:# kubectl patch deploy --namespace kube-system tiller-deploy \
-p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
root@kube-master:/home/ansible# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcdf6894-jvmlb 1/1 Running 0 1h
coredns-78fcdf6894-xstbn 1/1 Running 0 1h
etcd-kube-master 1/1 Running 0 1h
kube-apiserver-kube-master 1/1 Running 0 1h
kube-controller-manager-kube-master 1/1 Running 0 1h
kube-flannel-ds-5gzn9 1/1 Running 0 1h
kube-flannel-ds-tlc8j 1/1 Running 0 1h
kube-proxy-kl4fg 1/1 Running 0 1h
kube-proxy-krt6n 1/1 Running 0 1h
kube-scheduler-kube-master 1/1 Running 0 1h
tiller-deploy-85744d9bfb-wh98g 1/1 Running 0 1h
Once titler pod is up and running, deploying wordpress uses bitnami docker images, for this we need to go and create PersistentVolume and PersistentVolumeClaim
Define the PersistentVolume for mariadb-pv where the mariadb data to be stored. The hostPath tells the mysql directory is in /bitnami/mariadb location
root@kube-master:# cat mariadb-hostpath.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mariadb-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /bitnami/mariadb
root@kube-master:# kubectl create -f mariadb-hostpath.yaml
persistentvolume/mariadb-pv created
root@kube-master:# cat wordpress-hostpath.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /data
root@kube-master:# kubectl create -f wordpress-hostpath.yaml
persistentvolume/wordpress-pv created
root@kube-master:# cat wordpress-mariadb-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-wordpress-mariadb-0
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
root@kube-master:# cat wordpress-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: wordpress-wordpress
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
root@kube-master:# kubectl create -f wordpress-mariadb-pvc.yaml
root@kube-master:# kubectl create -f wordpress-pvc.yaml
root@kube-master:# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-wordpress-mariadb-0 Bound mariadb-pv 1Gi RWO,ROX 1d
wordpress-wordpress Bound wordpress-pv 1Gi RWO,ROX 1d
root@kube-master:/home/ansible# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mariadb-pv 1Gi RWO,ROX Retain Bound default/data-wordpress-mariadb-0 1d
wordpress-pv 1Gi RWO,ROX Retain Bound default/wordpress-wordpress
while setting up wordpress cluster the persistence.existingClaim=wordpress-wordpressc
is set which we have created earlier for manual change use the below setting
root@kube-master:# helm install --name wordpress \
--set wordpressUsername=admin,wordpressPassword=adminpassword,mariadb.mariadbRootPassword=secretpassword,persistence.existingClaim=wordpress-wordpress,allowEmptyPassword=false \
stable/wordpress
NAME: wordpress
LAST DEPLOYED: Thu Jan 17 11:03:43 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress-mariadb ClusterIP 10.106.188.168 <none> 3306/TCP 2s
wordpress-wordpress LoadBalancer 10.98.185.111 <pending> 80:31086/TCP,443:31639/TCP 2s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
wordpress-wordpress 1 1 1 0 2s
==> v1beta1/StatefulSet
NAME DESIRED CURRENT AGE
wordpress-mariadb 1 1 2s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
wordpress-wordpress-7b74f59c78-l7qvz 0/1 ContainerCreating 0 2s
wordpress-mariadb-0 0/1 ContainerCreating 0 2s
==> v1/Secret
NAME TYPE DATA AGE
wordpress-mariadb Opaque 2 2s
wordpress-wordpress Opaque 1 2s
==> v1/ConfigMap
NAME DATA AGE
wordpress-mariadb 1 2s
wordpress-mariadb-tests 1 2s
NOTES:
1. Get the WordPress URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w wordpress-wordpress'
export SERVICE_IP=$(kubectl get svc --namespace default wordpress-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "WordPress URL: http://$SERVICE_IP/"
echo "WordPress Admin URL: http://$SERVICE_IP/admin"
2. Login with the following credentials to see your blog
echo Username: admin
echo Password: $(kubectl get secret --namespace default wordpress-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
helm install stable/wordpress \
--set mariadb.enabled=false,externalDatabase.host=myexternalhost,externalDatabase.user=myuser,externalDatabase.password=mypassword,externalDatabase.database=mydatabase,externalDatabase.port=3306
root@kube-master:# kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
wordpress-mariadb-0 1/1 Running 0 51s
wordpress-wordpress-7b74f59c78-l7qvz 0/1 Running 0 51s
Once the wordpress POD is up and running , your wordpress is ready to use
To get your wordpress admin password run
root@kube-master:# kubectl get secret --namespace default wordpress-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode
adminpassword
root@kube-master:# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d
wordpress-mariadb ClusterIP 10.106.188.168 <none> 3306/TCP 1m
wordpress-wordpress LoadBalancer 10.98.185.111 <pending> 80:31086/TCP,443:31639/TCP 1m
31086
Thanku for reading !!! Give a Share for Support
Instead of directly asking for donations, I'm thrilled to offer you all nine of my books for just $9 on leanpub By grabbing this bundle you not only help cover my coffee, beer, and Amazon bills but also play a crucial role in advancing and refining this project. Your contribution is indispensable, and I'm genuinely grateful for your involvement in this journey!
Any private key value that you enter or we generate is not stored on this site, this tool is provided via an HTTPS URL to ensure that private keys cannot be stolen, for extra security run this software on your network, no cloud dependency