Guestbook Application Deployment on Kubernetes
Objective
The Nautilus Application Development Team has completed the Guestbook application, ready for deployment. The DevOps team was tasked with deploying the backend and frontend components on the Kubernetes cluster.
Infrastructure Overview
Architecture
The Guestbook application consists of three main components:
- Redis Master (Backend Tier 1)
- Redis Slave (Backend Tier 2)
- Frontend (User Interface)
Each component runs as a separate Kubernetes Deployment and Service.
Deployment Details
1. Redis Master Deployment and Service
Deployment Name: redis-master
Replicas: 1
Container Name: master-redis-nautilus
Image: redis
Resources:
- CPU:
100m
- Memory:
100Mi
Port:6379
Service Name: redis-master
Type: ClusterIP
Port / TargetPort: 6379
YAML – redis-master
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
role: master
spec:
replicas: 1
selector:
matchLabels:
app: redis
role: master
template:
metadata:
labels:
app: redis
role: master
spec:
containers:
- name: master-redis-nautilus
image: redis
ports:
- containerPort: 6379
resources:
requests:
cpu: "100m"
memory: "100Mi"
---
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
app: redis
role: master
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: master
2. Redis Slave Deployment and Service
Deployment Name: redis-slave
Replicas: 2
Container Name: slave-redis-nautilus
Image: gcr.io/google_samples/gb-redisslave:v3
Environment Variable:
-
GET_HOSTS_FROM: dns
Resources: - CPU:
100m
- Memory:
100Mi
Port:6379
Service Name: redis-slave
Type: ClusterIP
Port / TargetPort: 6379
YAML – redis-slave
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-slave
labels:
app: redis
role: slave
spec:
replicas: 2
selector:
matchLabels:
app: redis
role: slave
template:
metadata:
labels:
app: redis
role: slave
spec:
containers:
- name: slave-redis-nautilus
image: gcr.io/google_samples/gb-redisslave:v3
ports:
- containerPort: 6379
env:
- name: GET_HOSTS_FROM
value: "dns"
resources:
requests:
cpu: "100m"
memory: "100Mi"
---
apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
app: redis
role: slave
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: slave
3. Frontend Deployment and Service
Deployment Name: frontend
Replicas: 3
Container Name: php-redis-nautilus
Image:
gcr.io/google-samples/gb-frontend@sha256:a908df8486ff66f2c4daa0d3d8a2fa09846a1fc8efd65649c0109695c7c5cbff
Environment Variable:
-
GET_HOSTS_FROM: dns
Resources: - CPU:
100m
- Memory:
100Mi
Port:80
Service Name: frontend
Type: NodePort
Port: 80
NodePort: 30009
YAML – frontend
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
app: guestbook
tier: frontend
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis-nautilus
image: gcr.io/google-samples/gb-frontend@sha256:a908df8486ff66f2c4daa0d3d8a2fa09846a1fc8efd65649c0109695c7c5cbff
ports:
- containerPort: 80
env:
- name: GET_HOSTS_FROM
value: "dns"
resources:
requests:
cpu: "100m"
memory: "100Mi"
---
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30009
selector:
app: guestbook
tier: frontend
Verification Steps
- Applied all manifests:
kubectl apply -f redis-master.yaml
kubectl apply -f redis-slave.yaml
kubectl apply -f frontend.yaml
- Checked pod status:
kubectl get pods -o wide
- Verified services:
kubectl get svc
Example output:
NAME TYPE CLUSTER-IP PORT(S) AGE
redis-master ClusterIP 10.96.128.12 6379/TCP 5m
redis-slave ClusterIP 10.96.47.45 6379/TCP 5m
frontend NodePort 10.96.78.133 80:30009/TCP 5m
Conclusion
All components of the Guestbook application were successfully deployed on the Kubernetes cluster.
The frontend, Redis master, and Redis slave tiers are operational and communicating correctly via internal services.
The application is accessible externally via NodePort 30009.
Top comments (0)