Task: Deploy Tomcat App on Kubernetes
Task Details
A new java-based application is ready to be deployed on a Kubernetes cluster. The development team had a meeting with the DevOps team share requirements and application scope. The team is ready to setup an application stack for it under their existing cluster. Below you can find the details for this:
Create a namespace named tomcat-namespace-nautilus.
Create a deployment for tomcat app which should be named tomcat-deployment-nautilus under the same namespace you created. Replicas count should be 1, the container should be named as tomcat-container-nautilus, its image should be gcr.io/kodekloud/centos-ssh-enabled:tomcat and its container port should be 8080.
Create a service for tomcat app which should be named as tomcat-service-nautilus under the same namespace you created. Service type should be NodePort. Port's protocol should be TCP, port should be 80, targetPort should be 8080 and nodePort should be 32227.
Before clicking on Finish button please make sure the application is up and running.
You can use any labels as per your choice.
Note: The kubectl on jump_host has been configured to work with the kubernetes cluster.
1. Run the following commands on the jump server to list namespaces and services
thor@jump_host /$ kubectl get namespace
NAME STATUS AGE
default Active 12m
kube-node-lease Active 12m
kube-public Active 12m
kube-system Active 12m
thor@jump_host /$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 12m
2. Create namespace as per the task request.
thor@jump_host /$ kubectl create namespace tomcat-namespace-nautilus
namespace/tomcat-namespace-nautilus created
thor@jump_host /$ kubectl get namespace
NAME STATUS AGE
default Active 13m
kube-node-lease Active 13m
kube-public Active 13m
kube-system Active 13m
tomcat-namespace-nautilus Active 9s
3. Create deploy.yaml file using --dry-run command and modify later as per your requirements.
thor@jump_host ~$ kubectl create deploy tomcat-namespace-nautilus --image=gcr.io/kodekloud/centos-ssh-enabled:tomcat --dry-run=client -o yaml > deploy.yaml
deploy.yml file would look like below after modification
thor@jump_host ~$ vi deploy.yaml
thor@jump_host ~$ cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment-nautilus
namespace: tomcat-namespace-nautilus
spec:
replicas: 1
selector:
matchLabels:
app: tomcat-deployment-nautilus
template:
metadata:
labels:
app: tomcat-deployment-nautilus
spec:
containers:
- image: gcr.io/kodekloud/centos-ssh-enabled:tomcat
name: tomcat-container-nautilus
ports:
- containerPort: 8080
Create a deployment
thor@jump_host ~$ kubectl apply -f deploy.yaml
deployment.apps/tomcat-deployment-nautilus created
thor@jump_host ~$ kubectl get deploy --all-namespaces
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 2/2 2 2 19m
tomcat-namespace-nautilus tomcat-deployment-nautilus 1/1 1 1 106s
thor@jump_host ~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-f9fd979d6-4t9x6 1/1 Running 0 19m
kube-system coredns-f9fd979d6-pwfp2 1/1 Running 0 19m
kube-system etcd-controlplane 1/1 Running 0 19m
kube-system kube-apiserver-controlplane 1/1 Running 0 19m
kube-system kube-controller-manager-controlplane 1/1 Running 0 19m
kube-system kube-flannel-ds-amd64-hx7nz 1/1 Running 0 19m
kube-system kube-flannel-ds-amd64-rb26q 1/1 Running 0 19m
kube-system kube-proxy-4qwmv 1/1 Running 0 19m
kube-system kube-proxy-dc7zt 1/1 Running 0 19m
kube-system kube-scheduler-controlplane 1/1 Running 0 19m
tomcat-namespace-nautilus tomcat-deployment-nautilus-59c4c6c6bd-657pd 1/1 Running 0 2m17s
4. Create service.yaml file using --dry-run command and modify file service.yaml as per your requirements.
thor@jump_host ~$ kubectl expose deploy tomcat-deployment-nautilus --namespace=tomcat-namespace-nautilus --name=tomcat-service-nautilus --type=NodePort --port=80 --target-port=8080 --dry-run=client -o yaml > service.yaml
service.yaml file would look like below after modification
thor@jump_host ~$ vi service.yaml
thor@jump_host ~$ cat service.yaml
apiVersion: v1
kind: Service
metadata:
name: tomcat-service-nautilus
namespace: tomcat-namespace-nautilus
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
nodePort: 32227
selector:
app: tomcat-deployment-nautilus
type: NodePort
Create a service
thor@jump_host ~$ kubectl apply -f service.yaml
service/tomcat-service-nautilus unchanged
thor@jump_host ~$ kubectl get service --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 29m
tomcat-namespace-nautilus tomcat-service-nautilus NodePort 10.100.134.191 <none> 80:32227/TCP 46s
Validations:
thor@jump_host ~$ kubectl get no -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
controlplane Ready master 30m v1.19.0 172.17.0.11 <none> Ubuntu 18.04.5 LTS 4.15.0-122-generic docker://19.3.13
node01 Ready <none> 29m v1.19.0 172.17.0.14 <none> Ubuntu 18.04.5 LTS 4.15.0-122-generic docker://19.3.13
thor@jump_host ~$ curl 172.17.0.14:32227
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<title>SampleWebApp</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h2>Welcome to xFusionCorp Industries!</h2>
<br>
</body>
</html>
No comments:
Post a Comment