A java application having a tomcat webserver and mysql database pods using namespace, configMap, secret, persistentVolume, service, label, selector and replicaset.
- Install 'kubectl'
- Install 'minikube'
- Before working on this project make sure you have setup single node cluster and it is running.
Go to the directory where you have kept all your yaml files.
- 1st create the images out of the Dockerfiles
Dockerfile-mysql
&Dockerfile-tomcat
.
docker build -t mysql:1.1 /path/to/dockerfile/Dockerfile-mysql .
docker build -t loginwebapp:1.2 /path/to/dockerfile/Dockerfile-tomcat .
- Create a namespace where you want to run your pod
kubectl create -f namespaceDefinition.yml
- Create configMap
kubectl create -f configmap-mysql.yml
- Create secret to secure the DB credentials
kubectl create -f secret-mysql.yml
- Create persistent volume and persistent volume claim
kubectl create -f mysql-pv.yml
- Now create pods using replicaset Note: The service and replicaset are added in one yaml file
kubectl create -f replicasetDefinition-tomcat.yml
kubectl create -f replicasetDefinition-mysqldb.yml
At this point your pods will be up and running.
Check pods and the services.
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get all --namespace=dev
NAME READY STATUS RESTARTS AGE
pod/mysqldb-replicaset-w5tgg 1/1 Running 6 6d12h
pod/tomcatweb-replicaset-kn8bz 1/1 Running 6 6d12h
pod/tomcatweb-replicaset-tdj4q 1/1 Running 6 6d12h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysqldb-service ClusterIP None <none> 3306/TCP 6d12h
service/tomcat-service NodePort 10.105.128.104 <none> 8080:30008/TCP 6d12h
NAME DESIRED CURRENT READY AGE
replicaset.apps/mysqldb-replicaset 1 1 1 6d12h
replicaset.apps/tomcatweb-replicaset 2 2 2 6d12h
To check configMap
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get configmap --namespace=dev
NAME DATA AGE
db-config 3 8d
To check secret
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get secret --namespace=dev
NAME TYPE DATA AGE
db-secret Opaque 2 9d
default-token-99hkl kubernetes.io/service-account-token 3 10d
Persisten Volume
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get pv --namespace=dev
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv-volume 2Gi RWO Retain Bound dev/mysql-pv-claim manual 8d
Persistent Volume Claim
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get pvc --namespace=dev
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pv-claim Bound mysql-pv-volume 2Gi RWO manual 8d
Check the pods
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get pods --namespace=dev
NAME READY STATUS RESTARTS AGE
mysqldb-replicaset-w5tgg 1/1 Running 6 6d12h
tomcatweb-replicaset-kn8bz 1/1 Running 6 6d12h
tomcatweb-replicaset-tdj4q 1/1 Running 6 6d12h
Check the services
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl get services --namespace=dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysqldb-service ClusterIP None <none> 3306/TCP 6d12h
tomcat-service NodePort 10.105.128.104 <none> 8080:30008/TCP 6d12h
Note: Here the namespace was create as dev. So you need to specify the namespace name while diplaying the details.
To view the application in your web browser, describe the service and get the LoadBalancer Ingress name and the NodePort
Ranjits-MacBook-Air:Desktop ranjitswain$ kubectl describe service tomcat-service --namespace=dev
Name: tomcat-service
Namespace: dev
Labels: <none>
Annotations: <none>
Selector: app=tomcatwebapp,type=front-end
Type: NodePort
IP: 10.101.111.123
LoadBalancer Ingress: localhost
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30008/TCP
Endpoints: 10.1.1.15:8080,10.1.1.17:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
i.e. http://localhost:30008/LoginWebApp/
LoginWebApp is your application name.