0% found this document useful (0 votes)
7 views12 pages

Dev Ops Assignment Steps

Uploaded by

2023mt03601
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views12 pages

Dev Ops Assignment Steps

Uploaded by

2023mt03601
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Birla Institute of Technology & Science, Pilani

Work Integrated Learning Programmes Division


First Semester 2024-2025
Devops for Cloud (S1-24_CCZG507) Course Assignment

Name : Kowshalyaa Kumaraguru


Roll No: 2023mt03601

Task 1: Create the Backend Application using FastAPI

Steps followed:

1. Created and moved to directory using the commands below.


mkdir app-2023mt03601
cd app-2023mt03601
2. Created Virtual Env and installed required libraries.
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn
3. Created the python application using FastAPI - main.py.
from fastapi import FastAPI
import os

# Create the FastAPI app instance


app = FastAPI()

# Retrieve app_version and app_title from environment variables, with default values if not set
app_version = os.getenv("APP_VERSION", "1.0")
app_title = os.getenv("APP_TITLE", "Welcome to Kowshalyaa's FastAPI Application")

@app.get("/get_info")
def get_info():
return {"app_version": app_version, "app_title": app_title}
4. Set Environment variables.
export APP_VERSION=1.0
export APP_TITLE="Welcome to Kowshalyaa's FastAPI Application"
5. Run the FastAPI application locally using Uvicorn
uvicorn main:app --reload

Screenshots, incl. Output:


Task 2: Dockerize the Backend Application

Steps followed:
Pre-requisites - Docker installed.

1. Create Dockerfile.
# Step 1: Use a base image with Python 3
FROM python:3.9-slim
# Step 2: Set the working directory inside the container
WORKDIR /app
# Step 3: Copy the requirements file into the container
COPY requirements.txt .
# Step 4: Install dependencies from the requirements file
RUN pip install --no-cache-dir -r requirements.txt
# Step 5: Copy the entire application into the container
COPY . .
# Step 6: Expose port 8000 to allow access from the host machine
EXPOSE 8000
# Step 7: Define the command to run the FastAPI app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

2. Create requirements.txt.
fastapi
uvicorn
3. Build Docker Image.
docker build -t img-2023mt03601 .
4. Verify Docker Image creation using below command.
docker images

Screenshots, incl. Output:

Task 3: Run the Docker Container

Steps followed:

1. We have created a Docker image in the previous step, running it using below command.
docker run -d --name cnr-2023mt03601 -p 8000:8000 img-2023mt03601

Screenshots, incl. Output:


[Stopping the container and checking for output - unable to connect as expected]

Task 4: Deploy the Docker Image to a Kubernetes Cluster

Steps followed:
Pre-requisites - Minikube and kubectl installed.
1. Start Minikube
minikube start

2. Create a ConfigMap file and apply it.


vi config-2023mt03601.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: config-2023mt03601
data:
app_version: "1.0"
app_title: "Welcome to Kowshalyaa's FastAPI Application"

kubectl apply -f config-2023mt03601.yaml

3. Create a Deployment YAML file and apply it.


vi deployment-2023mt03601.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: fastapi-deployment
spec:
replicas: 2
selector:
matchLabels:
app: fastapi
template:
metadata:
labels:
app: fastapi
spec:
containers:
- name: fastapi-app
image: img-2023mt03601 # Docker image
ports:
- containerPort: 8000
envFrom:
- configMapRef:
name: config-2023mt03601 # Reference to the ConfigMap
created earlier
kubectl apply -f deployment-2023mt03601.yaml

4. Expose the Deployment using Service.


vi service-2023mt03601.yaml

apiVersion: v1
kind: Service
metadata:
name: fastapi-service
spec:
selector:
app: fastapi
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: NodePort

kubectl apply -f service-2023mt03601.yaml

5. Use the following commands to verify.


kubectl get deployments
kubectl get pods
​kubectl get services

Screenshots, incl. Output:


Issue observed - Failed to pull image.
Workaround - Added image to Dockerhub, and pulled image as kowshalyaa/img-2023mt03601
[We can see pods running in the second next screenshot.]

Task 5: Configure Networking with a Load Balancer in the Kubernetes Cluster


Steps followed:
1. Edit service YAML to change type to LoadBalancer.
apiVersion: v1
kind: Service
metadata:
name: fastapi-service
spec:
selector:
app: fastapi
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer # This is the key change!

2. Edit the service.


kubectl expose deployment fastapi-deployment --type=LoadBalancer
--name=fastapi-service

Screenshots, incl. Output:


Task 6: Configure Prometheus for Metrics Collection

Steps followed:
Pre-requisites - Prometheus Helm added.

1. Modify main.py to expose metrics.


from prometheus_fastapi_instrumentator import Instrumentator

instrumentator = Instrumentator()

@app.on_event("startup")
def on_startup():
instrumentator.instrument(app).expose(app)
2. Add Prometheus Scrape Config.
scrape_configs:
- job_name: 'fastapi-app'
static_configs:
- targets: ['<fastapi-service-name>:8001']

kubectl apply -f prometheus-config.yaml

Issue Observed - Version Compatibility conflict when installing requirements. Fixed Prometheus
Version.
FastAPI shown as targets.
[/metrics shows requests_total, cpu_usage etc.]
[requests_total metric on Prometheus UI over time]

You might also like