Cloud Native Resource Monitoring Python App on K8s!

Cloud Native Resource Monitoring Python App on K8s!


Things used in project ??

  1. Python and How to create Monitoring Application in Python using Flask and psutil
  2. How to run a Python App locally.
  3. Learn Docker and How to containerize a Python applicationi. Creating Dockerfileii. Building DockerImageiii. Running Docker Containervi. Docker Commands
  4. Create ECR repository using Python Boto3 and pushing Docker Image to ECR
  5. Learn Kubernetes and Create EKS cluster and Nodegroups
  6. Create Kubernetes Deployments and Services using Python! Prerequisites !(Things to have before starting the projects)

  • AWS Account.
  • Programmatic access and AWS configured with CLI.
  • Python3 Installed.
  • Docker and Kubectl installed.
  • Code editor (Vscode)

?Let’s Start the Project ?

Project Architecture Diagram


Part 1: Deploying the Flask application locally

Step 1: Clone the code

Clone the code from the repository:

git clone <repository_url>
        

Step 2: Install dependencies

The application uses the psutil and Flask, Plotly, boto3 libraries. Install them using pip:

pip3 install -r requirements.txt
        

Step 3: Run the application

To run the application, navigate to the root directory of the project and execute the following command:

python3 app.py
        

This will start the Flask server on localhost:5000. Navigate to https://localhost:5000/ on your browser to access the application.

Part 2: Dockerizing the Flask application

Step 1: Create a Dockerfile

Create a Dockerfile in the root directory of the project with the following contents:

# Use the official Python image as the base image
FROM python:3.9-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the requirements file to the working directory
COPY requirements.txt .

RUN pip3 install --no-cache-dir -r requirements.txt

# Copy the application code to the working directory
COPY . .

# Set the environment variables for the Flask app
ENV FLASK_RUN_HOST=0.0.0.0

# Expose the port on which the Flask app will run
EXPOSE 5000

# Start the Flask app when the container is run
CMD ["flask", "run"]
        

Step 2: Build the Docker image

To build the Docker image, execute the following command:

docker build -t <image_name> .
        

Step 3: Run the Docker container

To run the Docker container, execute the following command:

docker run -p 5000:5000 <image_name>
        

This will start the Flask server in a Docker container on localhost:5000. Navigate to https://localhost:5000/ on your browser to access the application.

Part 3: Pushing the Docker image to ECR

Step 1: Create an ECR repository

Create an ECR repository using Python:

import boto3

# Create an ECR client
ecr_client = boto3.client('ecr')

# Create a new ECR repository
repository_name = 'my-ecr-repo'
response = ecr_client.create_repository(repositoryName=repository_name)

# Print the repository URI
repository_uri = response['repository']['repositoryUri']
print(repository_uri)
        

Step 2: Push the Docker image to ECR

Push the Docker image to ECR using the push commands on the console:

docker push <ecr_repo_uri>:<tag>
        

Part 4: Creating an EKS cluster and deploying the app using Python

Step 1: Create an EKS cluster

Create an EKS cluster and add node group

Step 2: Create a node group

Create a node group in the EKS cluster.

Step 3: Create deployment and service

from kubernetes import client, config

# Load Kubernetes configuration
config.load_kube_config()

# Create a Kubernetes API client
api_client = client.ApiClient()

# Define the deployment
deployment = client.V1Deployment(
    metadata=client.V1ObjectMeta(name="my-flask-app"),
    spec=client.V1DeploymentSpec(
        replicas=1,
        selector=client.V1LabelSelector(
            match_labels={"app": "my-flask-app"}
        ),
        template=client.V1PodTemplateSpec(
            metadata=client.V1ObjectMeta(
                labels={"app": "my-flask-app"}
            ),
            spec=client.V1PodSpec(
                containers=[
                    client.V1Container(
                        name="my-flask-container",
                        image="568373317874.dkr.ecr.us-east-1.amazonaws.com/my-cloud-native-repo:latest",
                        ports=[client.V1ContainerPort(container_port=5000)]
                    )
                ]
            )
        )
    )
)

# Create the deployment
api_instance = client.AppsV1Api(api_client)
api_instance.create_namespaced_deployment(
    namespace="default",
    body=deployment
)

# Define the service
service = client.V1Service(
    metadata=client.V1ObjectMeta(name="my-flask-service"),
    spec=client.V1ServiceSpec(
        selector={"app": "my-flask-app"},
        ports=[client.V1ServicePort(port=5000)]
    )
)

# Create the service
api_instance = client.CoreV1Api(api_client)
api_instance.create_namespaced_service(
    namespace="default",
    body=service
)        

make sure to edit the name of the image on line 25 with your image Uri.

  • Once you run this file by running “python3 eks.py” deployment and service will be created.
  • Check by running following commands:

kubectl get deployment -n default (check deployments)
kubectl get service -n default (check service)
kubectl get pods -n default (to check the pods)        

Once your pod is up and running, run the port-forward to expose the service

kubectl port-forward service/<service_name> 5000:5000        

要查看或添加评论,请登录

Harshada Chaudhari的更多文章

  • Launching a static website on Amazon S3 and configuring the DNS with Amazon Route 53

    Launching a static website on Amazon S3 and configuring the DNS with Amazon Route 53

    Launching a static website on Amazon S3 and configuring the DNS with Amazon Route 53 involves several steps. Here's a…

  • AWS Elastic Beanstalk Available in AWS GovCloud (US)

    AWS Elastic Beanstalk Available in AWS GovCloud (US)

    AWS Elastic Beanstalk is an easy-to-use service for deploying, scaling, and managing applications and services…

  • AWS Elastic Beanstalk

    AWS Elastic Beanstalk

    Amazon has offered a wide range of web services that can help in boosting up your IT business to attain new heights…

  • AWS Configuration

    AWS Configuration

    AWS Configure at Amazon is used to track all the configurations from the AWS resources that are interlinked with your…

  • Introduction To AWS CLI

    Introduction To AWS CLI

    AWS CLI( Command Line Interface) The AWS Command Line Interface is a combination of tools to manage all the Amazon Web…

  • Introduction to Amazon Elastic File System

    Introduction to Amazon Elastic File System

    Amazon Elastic File System Generally, the Amazon EFS will support the various network file system versions like 4.1 and…

  • Top 10 Cloud Computing Tools

    Top 10 Cloud Computing Tools

    Table of Content - Top 10 Cloud Computing Tools Cloudability Cloudyn Informatica CloudHub Chef Puppet AtomSphere…

  • What is Cloud Computing - Introduction to Cloud Computing

    What is Cloud Computing - Introduction to Cloud Computing

    Introduction to Cloud Computing - Table of Contents What is Cloud Computing? Businesses Opting for Cloud Computing…

    1 条评论
  • AWS DevOps Tutorial - A Complete Guide

    AWS DevOps Tutorial - A Complete Guide

    Several Advanced Technologies, like cloud computing, and DevOps, are developed to empower software professionals to…

    3 条评论
  • Types of Cloud Computing - Cloud Services

    Types of Cloud Computing - Cloud Services

    Businesses consider cloud computing to store and retrieve their data. Clouds can assist businesses in lowering their IT…

    1 条评论

社区洞察

其他会员也浏览了