Wednesday, 15 October 2025

Deploying a Guestbook Application on Kubernetes: Redis & Frontend Setup Explained

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