Our course you can check :- Udemy course
Ques:-
Application development team has finished development of one of the applications and it is ready for deployment. It is a guestbook application that will be used to manage entries for guests/visitors. As per discussion with the DevOps team, they have finalized the infrastructure that will be deployed on Kubernetes cluster. Below you can find more details about it.
BACK-END TIER
Create a deployment named redis-master for Redis master.
a.) Replicas count should be 1.
b.) Container name should be master-redis-datacenter and it should use image redis.
c.) Request resources as CPU should be 100m and Memory should be 100Mi.
d.) Container port should be redis default port i.e 6379.
Create a service named redis-master for Redis master. Port and targetPort should be Redis default port i.e 6379.
Create another deployment named redis-slave for Redis slave.
a.) Replicas count should be 2.
b.) Container name should be slave-redis-datacenter and it should use gcr.io/google_samples/gb-redisslave:v3 image.
c.) Requests resources as CPU should be 100m and Memory should be 100Mi.
d.) Define an environment variable named GET_HOSTS_FROM and its value should be dns.
e.) Container port should be Redis default port i.e 6379.
Create another service named redis-slave. It should use Redis default port i.e 6379.
FRONT END TIER
Create a deployment named frontend.
a.) Replicas count should be 3.
b.) Container name should be php-redis-datacenter and it should use gcr.io/google-samples/gb-frontend@sha256:a908df8486ff66f2c4daa0d3d8a2fa09846a1fc8efd65649c0109695c7c5cbff image.
c.) Request resources as CPU should be 100m and Memory should be 100Mi.
d.) Define an environment variable named as GET_HOSTS_FROM and its value should be dns.
e.) Container port should be 80.
Create a service named frontend. Its type should be NodePort, port should be 80 and its nodePort should be 30009.
Ans:-
Here's the complete set of Kubernetes YAML manifests for deploying the guestbook application as described:
raj@jumphost ~$ cat pod.yaml
---
#Redis Master Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-master
spec:
replicas: 1
selector:
matchLabels:
app: redis-master
template:
metadata:
labels:
app: redis-master
spec:
containers:
- name: master-redis-datacenter
image: redis
resources:
requests:
cpu: "100m"
memory: "100Mi"
ports:
- containerPort: 6379
---
#Redis Master Service
apiVersion: v1
kind: Service
metadata:
name: redis-master
spec:
selector:
app: redis-master
ports:
- port: 6379
targetPort: 6379
---
#Redis Slave Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-slave
spec:
replicas: 2
selector:
matchLabels:
app: redis-slave
template:
metadata:
labels:
app: redis-slave
spec:
containers:
- name: slave-redis-datacenter
image: gcr.io/google_samples/gb-redisslave:v3
resources:
requests:
cpu: "100m"
memory: "100Mi"
env:
- name: GET_HOSTS_FROM
value: "dns"
ports:
- containerPort: 6379
---
#Redis Slave Service
apiVersion: v1
kind: Service
metadata:
name: redis-slave
spec:
selector:
app: redis-slave
ports:
- port: 6379
targetPort: 6379
---
#Frontend Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 3
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: php-redis-datacenter
image: gcr.io/google-samples/gb-frontend@sha256:a908df8486ff66f2c4daa0d3d8a2fa09846a1fc8efd65649c0109695c7c5cbff
resources:
requests:
cpu: "100m"
memory: "100Mi"
env:
- name: GET_HOSTS_FROM
value: "dns"
ports:
- containerPort: 80
---
#Frontend Service
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
type: NodePort
selector:
app: frontend
ports:
- port: 80
targetPort: 80
nodePort: 30009
raj@jumphost ~$ kubectl apply -f pod.yaml
deployment.apps/redis-master created
service/redis-master created
deployment.apps/redis-slave created
service/redis-slave created
deployment.apps/frontend created
service/frontend created
raj@jumphost ~$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/frontend-6bb8bc956b-7gjmg 1/1 Running 0 64s
pod/frontend-6bb8bc956b-hqkj5 1/1 Running 0 64s
pod/frontend-6bb8bc956b-ptgnf 1/1 Running 0 64s
pod/redis-master-686856dd49-qf9lh 1/1 Running 0 64s
pod/redis-slave-668f85fd-bbqgj 1/1 Running 0 64s
pod/redis-slave-668f85fd-pfd49 1/1 Running 0 64s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/frontend NodePort 10.96.151.213 <none> 80:30009/TCP 64s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21m
service/redis-master ClusterIP 10.96.207.252 <none> 6379/TCP 64s
service/redis-slave ClusterIP 10.96.17.4 <none> 6379/TCP 64s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/frontend 3/3 3 3 64s
deployment.apps/redis-master 1/1 1 1 64s
deployment.apps/redis-slave 2/2 2 2 64s
NAME DESIRED CURRENT READY AGE
replicaset.apps/frontend-6bb8bc956b 3 3 3 64s
replicaset.apps/redis-master-686856dd49 1 1 1 64s
replicaset.apps/redis-slave-668f85fd 2 2 2 64s
raj@jumphost ~$
Conclusion:-
Learn how to deploy a complete guestbook application on a Kubernetes cluster using Redis for backend data storage and a PHP-based frontend. This hands-on tutorial walks you through creating deployments and services for Redis master, Redis slave, and the frontend application. You'll understand how to configure container resources, environment variables, and expose services using NodePort.
✅ What you'll learn:
- Creating Kubernetes deployments for Redis master and slave
- Setting resource requests for containers
- Defining environment variables in pods
- Exposing services with ClusterIP and NodePort
- Deploying a frontend application connected to Redis
Perfect for DevOps engineers, SREs, and developers looking to gain practical experience with Kubernetes application deployment.
No comments:
Post a Comment