PROJECT - π Deploying Reddit Clone Web App on Kubernetes Cluster: A Step-by-Step Guide
Table of contents
π Introduction:
Container orchestration with Kubernetes has become a standard for deploying and managing applications efficiently. In this detailed guide, we will walk you through the process of deploying a Reddit clone web application onto a Kubernetes cluster hosted on AWS. By following these steps, you will not only learn the deployment process but also gain insights into the power of Kubernetes for managing containerized applications.
Step 1: Provision AWS Instances π
Begin by accessing the AWS console and creating two instances with specific configurations:
Deployment Server:
AMI: Ubuntu
Type: t2.medium
Ensure that you name these instances accordingly for easy reference.
Step 2: Clone the Codeπ
π¦ On the machine, clone the codebase of your Reddit clone web application.
Link: https://github.com/sumanprasad007/reddit-clone-deployed-on-kubernetes-cluster.git
Step 3: Prerequisites π οΈ
On Deployment Server:
Update the server:
sudo apt-get update
Install Docker:
sudo apt-get install
docker.io
-y
Give permission to Docker:
sudo usermod -aG docker $USER && newgrp docker
Install Minikube and Kubectl:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube sudo snap install kubectl β classic minikube start β driver=docker
Step 4: Write a Dockerfile for the Project π³
Create a Dockerfile for your Reddit clone project with the following content:
FROM node:19-alpine3.15
WORKDIR /reddit-clone
COPY . /reddit-clone
RUN npm install
EXPOSE 3000
CMD [βnpmβ,βrunβ,βdevβ]
Step 5: Build and Push Docker Image π
Build the Docker image from the Dockerfile using the following command:
docker build . -t sumanprasad007/reddit-clone
After building the image, push it to Docker Hub by running:
docker login
# Enter your username and password
docker push sumanprasad007/reddit-clone
Step 6: Connect to Deployment Server π₯οΈ
SSH into the Deployment Server.
Step 7: Install Minikube and Kubectl
Ensure Minikube and Kubectl are installed on the Deployment Server.
Step 8: Deploy Docker Image π’
Now, it's time to deploy the Docker image from Docker Hub onto your Kubernetes cluster.
Step 9: Create a Kubernetes Folder π
Create a folder named "K8s" on the Deployment Server.
Step 10: Create a Deployment YAML File π
Inside the "K8s" folder, create a file named "Deployment.yml" and add the following content:
apiVersion: apps/v1
kind: Deployment
metadata:
name: reddit-clone-deployment
labels:
app: reddit-clone
spec:
replicas: 2
selector:
matchLabels:
app: reddit-clone
template:
metadata:
labels:
app: reddit-clone
spec:
containers:
- name: reddit-clone
image: trainwithshubham/reddit-clone
ports:
- containerPort: 3000
Step 11: Apply the Deployment File π
Apply the Deployment file to create pods:
kubectl apply -f Deployment.yml
Step 12: Verify Deployments π§
To ensure that the deployments are successful, use the following command:
kubectl get deployments
Step 13: Create a Kubernetes Service π
Now, you need to create a Service to provide an IP address for your application within the cluster.
Step 14: Create a Service YAML File π
Inside the "K8s" folder, create a file named "Service.yml" and add the following content:
apiVersion: v1
kind: Service
metadata:
name: reddit-clone-service
labels:
app: reddit-clone
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
nodePort: 31000
selector:
app: reddit-clone
Step 15: Apply the Service File π
Apply the Service file to create a service:
kubectl apply -f Service.yml
Step 16: Check the Service π
To verify that the service is created successfully, run:
kubectl get services
Step 17: Access the Application π
You can now access your application by visiting the URL provided by Minikube:
minikube service reddit-clone-service β url
Step 18: Expose the Application to the Internet π
To make your application accessible from the internet, you'll need to configure port forwarding.
Step 19: Port Forwarding π
Run the following command for port forwarding:
kubectl port-forward svc/reddit-clone-service 3000:3000
Step 20: Access Your Live Reddit Clone π
Visit your Reddit Clone web app at the provided domain or IP address, and it should now be accessible to the world.
π Conclusion
Congratulations! π You've successfully deployed a Reddit clone web app on a Kubernetes cluster hosted on AWS. This guide has covered the entire process, from provisioning AWS instances to advanced routing using Ingress. Kubernetes offers powerful capabilities for container orchestration, making it an essential tool for modern application deployment and management. Explore the various use cases to adapt this project to your specific needs.
π Checkout GitHub Repository for projects:
π github.com/sumanprasad007