Skip to main content

Command Palette

Search for a command to run...

Reddit Application deploy on k8s ingress controller

Published
2 min read
Reference Video: https://youtu.be/9tl0A_rwgu4 [Shubham]
#steps:
Step 1: Application code files in Github
Step 2: Launch 2 EC2 (Ubuntu-T2Medium) servers 1st for [Docker], 2nd for [Minikube & Kubectl]
Step 3: Open Ports 22, 80, 443, 3000, 31000 ports in 1st EC2 and 22, 80 in 2nd
Step 4: Install docker on 1st EC2, (docker + minikube + kubectl) on 2nd EC2
Step 5: build docker image from Dockerfile on 1st EC2
Step 6: write all needed kubernetes related files [deployement, services….etc .yml files] on 2nd EC2
Step 7: run the below listed commands and check the Reditt App in browser {2nd EC2PublicIP:3000}
# Steps:- # For Docker Installation on Docker-Server [1st EC2]
sudo apt-get update
sudo apt-get install docker.io -y
sudo usermod -aG docker $USER && newgrp docker git clone https://github.com/LondheShubham153/reddit-clone-k8s-ingress.git
#docker build -t <DockerHub_Username>/<Imagename> .
docker build -t xxxxxxx/redit-app:1.0 .
docker login and give your username & password 
#docker push <DockerHub_Username>/<Imagename>
docker push xxxxxxx/redit-app:1.0
#Dockerfile [on 1st EC2]: 
FROM node:19-alpine3.15
WORKDIR /reddit-clone
COPY . /reddit-clone
RUN npm install
EXPOSE 3000
CMD ["npm","run","dev"]
# For Minikube & Kubectl on Deployment-Server [2nd EC2] 
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
kubectl apply -f Deployment.yml
kubectl apply -f Service.yml
kubectl get deployment
kubectl get services
minikube addons enable ingress
minikube addons list
kubectl apply -f ingress.yml
kubectl get ingress ingress-reddit-app
kubectl expose deployment reddit-clone-deployment --type=NodePort
curl -L http://192.168.49.2:31000
kubectl port-forward svc/reddit-clone-service 3000:3000 --address 0.0.0.0 &
# check the Application with EC2 Public IP:3000 in browser
# In Deployment.yml file: 
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
# In Service.yml File : 
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
#In ingress.yml file :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-reddit-app
spec:
  rules:
  - host: "domain.com"
    http:
      paths:
      - pathType: Prefix
        path: "/test"
        backend:
          service:
            name: reddit-clone-service
            port:
              number: 3000
  - host: "*.domain.com"
    http:
      paths:
      - pathType: Prefix
        path: "/test"
        backend:
          service:
            name: reddit-clone-service
            port:
              number: 3000

More from this blog