Day 77: Project-6 (K8s)

Day 77: Project-6 (K8s)

Netflix Clone Deployment on Kubernetes

Introduction

This project focuses on the deployment of a Netflix Clone on a Kubernetes cluster, a widely used container orchestration platform that streamlines the management of containerized applications. The key tasks involve building Docker images for the web application and its prerequisites, followed by their deployment on the Kubernetes cluster through Kubernetes manifests. Leveraging Kubernetes delivers advantages like ensuring high availability, effortless scalability, and automatic failover for the application. Furthermore, the project will make use of Kubernetes tools such as kubectl, to supervise and govern the deployed application. In summary, this project serves as a demonstration of the robust capabilities and advantages of Kubernetes when it comes to deploying and managing containerized applications on a large scale.


Task-01

Get a Netflix clone from GitHub, and follow the below steps to deploy a Netflix Clone on the K8s cluster.


Step 1: Setup K8s cluster

Set up a Kubernetes cluster using Kubeadm.

Refer to the blog for complete instructions- Day 43: Deployment of a Microservices Application on K8s

Verify the connection using the command on the Master Node

kubectl get nodes

Step 2: Clone app from GitHub

Copy the Repository URL and us the clone command to clone the files from GitHub to Master node

git clone <URL_of_repository>

Step 3: Build an Image

Once the files are cloned, the image can be created using a docker file by command:

docker build -t amin/netflix-clone .

We have successfully created an image as mentioned below

Step 4: Push image

Log in to DockerHub, create a repository example- aminchivilkar/netflix-clone

Verify that the image you are trying to push is correctly tagged with the repository name. The tag should match your Docker Hub repository.

To re-tag an image, you can use the following command:

docker tag amin/netflix-clone:latest aminchivilkar/netflix-clone:latest
#docker tag local-image:tag dockerhub-repository:tag

Command to log in to DockerHub.

docker login -u username
#passsword prompt

Use the below command to push the image.

docker push aminchivilkar/netflix-clone:latest

The image is now on the DockerHub

Step 5: K8s Deployment

In Kubernetes (K8s), a deployment file is a configuration file that defines how to create and manage instances of your application. It specifies the desired state of your application, including the number of replicas, container images, and how updates should be rolled out. Deployment files are essential for orchestrating containerized applications in K8s.

Modify the Deployment file as per your requirements.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: netflix-app
  labels:
    app: netflix-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: netflix-app
  template:
    metadata:
      labels:
        app: netflix-app
    spec:
      containers:
      - name: netflix-app
        image: aminchivilkar/netflix-clone:latest
        ports:
        - containerPort: 80

To apply the configuration defined in the "deployment.yml" file use the below command.

It instructs K8s to create or update resources specified in the YAML file, such as deployments, pods, services, or other K8s objects. This command ensures that the desired state described in the YAML file is realized within the K8s cluster.

kubectl apply -f deployment.yml

Step 6: K8s Service

A "service.yml" file is used to define and create a Kubernetes Service object. A Service is an abstraction that enables network access to a set of Pods in K8s. This file specifies the desired state of the service, including details such as the type of service (ClusterIP, NodePort, LoadBalancer, or ExternalName), the selector for targeting pods, and port mappings.

 apiVersion: v1
 kind: Service
 metadata:
   name: netflix-app
   labels:
     app: netflix-app
 spec:
   type: NodePort
   ports:
   - port: 80
     targetPort: 80
     nodePort: 30007
   selector:
     app: netflix-app

The below command applies the configuration defined in the "service.yml" file to create or update a Kubernetes Service based on the specifications provided in the file. This command ensures that the desired state of the service is achieved within the K8s cluster, allowing for reliable network access to pods and load balancing of traffic.

kubectl apply -f service.yml

Step 7: Verify Deployment

The below commands will

  • Lists the Deployments within the current Kubernetes cluster.

  • Display the list of Pods running in the cluster.

  • Retrieve information about the Kubernetes Service named "netflix-app."

kubectl get deployment
kubectl get pods
kubectl get service netflix-app

Step 8: Access the application

Verify the application's availability by accessing the Public URL. Ensure that you've included a Custom TCP Rule for port 30007 on the worker node's security group. After adding the inbound rule, you should be able to access the Netflix Clone app through your web browser using the <worker_node_public_IP>:30007 address.

We have successfully deployed Netflix Clone in the Kubernetes Cluster.


Conclusion:

In this project, we've accomplished the deployment of a Netflix Clone on a Kubernetes cluster. This involved a series of tasks, including setting up the Kubernetes cluster, cloning the application from GitHub, building Docker images, pushing images to DockerHub, and defining deployment and service files. By following these steps, we've successfully demonstrated the power of Kubernetes for managing containerized applications. The Netflix Clone is now up and running, and it's accessible via the specified public URL. We hope you enjoyed this journey and found it informative.

Hope you like my post. Don't forget to like, comment, and share.