Deploying 3-tier chat-app on MiniKube

3 min read

Installing MiniKube on Local
minikube start --driver=docker
minikube status # Verify if minikube is present
Now, pushing docker images of frontend and backend on DockerHub
In order to make deployment for frontend and backend, we need their images retrieved from Docker Hub, so after building images, we need to push them to Docker Hub
Login into CLI with your docker credentials
docker login
Building frontend image and pushing it to Docker Hub
docker build -t dakshsawhneyy/chatapp-frontend ./frontend
docker push dakshsawhneyy/chatapp-frontend
Building backend image and pushing it to Docker Hub
docker build -t dakshsawhneyy/chatapp-backend ./backend
docker push dakshsawhneyy/chatapp-backend
Starting with K8S
Creating Namespace of name chat-app
kubectl create namespace chat-app
Creating Frontend-Deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-deployment
namespace: chat-app
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend-cont
image: dakshsawhneyy/chatapp-frontend
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
env:
- name: NODE_ENV
value: production
Creating Frontend-Deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
namespace: chat-app
spec:
replicas: 1
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend-cont
image: dakshsawhneyy/chatapp-backend
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 5001
env:
- name: NODE_ENV
value: production
- name: MONGODB_URI # they are present in env of Docker File
value: "mongodb://mongoadmin:secret@mongodb"
- name: JWT_SECRET
value: your_jwt_secret
- name: PORT
value: 5001
Creating MongoDB-Deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-deployment
namespace: chat-app
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo-cont
image: mongo:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: root
- name: MONGO_INITDB_ROOT_PASSWORD
value: root
Creating Persistent-Volume and Persistent-Volume-Claim for MongoDB
Creating PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
namespace: chat-app
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /data # for MiniKube
Creating PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
namespace: chat-app
spec:
resources:
requests:
storage: 2Gi
accessModes:
- ReadWriteOnce
Now, putting these in deployment of MongoDB
Updating MongoDB Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-deployment
namespace: chat-app
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo-cont
image: mongo:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: root
- name: MONGO_INITDB_ROOT_PASSWORD
value: root
volumes:
- name: mongo-data
persistentVolumeClaim:
claimName: mongodb-pvc
Apply Both PV and PVC
kubectl apply -f mongodb-pv.yml
kubectl get pv -n chat-app
kubectl apply -f mongodb-pvc.yml
kubectl get pv -n chat-app
Apply Deployment of MongoDB
kubectl apply -f mongodb-deployment.yml
Error coming, we need to create service for backend, then weโll able to run frontend pod
Creating backend-service
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: chat-app
spec:
selector:
app: backend
ports:
- port: 5001
targetPort: 5001
Creating frontend-service
apiVersion: v1
kind: Service
metadata:
name: frontend
namespace: chat-app
spec:
selector:
app: frontend
ports:
- port: 80
targetPort: 80
Creating MongoDB Service
apiVersion: v1
kind: Service
metadata:
name: mongo-svc
namespace: chat-app
spec:
selector:
app: mongo
ports:
- port: 27017
targetPort: 27017
Apply ALL
And Chat-App is running fine on PORT 80 ๐๐๐๐
0
Subscribe to my newsletter
Read articles from Daksh Sawhney directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Daksh Sawhney
Daksh Sawhney
Aspiring DevOps & DevSecOps Engineer | Automating Infra with Terraform & Ansible | Kubernetes Enthusiast | Building Scalable Pipelines ๐คทโโ๏ธ