How To Deploy Flask Application Using Docker On Kubernetes
There are some prerequisites that you need to install and setup in your system.
Prerequisites:
Step1. Create simple flask app
Flask is a python lightweight framwork for web application with minimal no of code you can develope your application in no time.
Create requirements.txt file that contains all library and package for your application and app.py file for your application.
requirements.txt
flask==3.0.2
app.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/", methods=["GET"])
def home():
data = {
"name": "Shani Kumar",
"age": 26,
"address": "Noida sector 15"
}
return jsonify(data), 200 # 200 is a status code
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Step2. Dockerize your application create a docker file for your application.
file name should be without any extention -> Dockerfile
FROM python:3.10-alpine3.18
RUN mkdir -p /opt/app
WORKDIR /opt/app
COPY . /opt/app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python3", "app.py"]
Step3. Create docker image for your application
docker build -t flaskapiimage .
Step 4. Create a container from this image that will run your app.
docker run --name flaskapicontainer -p 5000:5000 -it flaskapiimage
Step5. Push your image on docker hub .
Create docker hub account and login via your account credentials
docker login
docker tag flaskapiimage your_docker_hub_username/your_repo:v1
docker push your_username/your_repo:v1
Step 6. Now we will deploy our app on kubernetes via minikube.
Start minikube
minikube start
Create a deployment for your app
kubectl create deploy flaskapideploy --image=your_docker_hub_username/your_repo:v1
kubectl get deploy
Check list of pods
kubectl get pods
Deployement will automatic create pods.
this will take care of your pods it manage auto scaling and auto healing thats why your application will not go down.
Step 7. Create service for your deployment so that the app can be accessed by outside of minikube cluster.
kubectl expose deployment flaskapideploy --name=flaskapisvc --type=NodePort --port=80 --target-port=5000
kubectl get svc
To check Pods, Deployment etc on web app
minikube dashboard --url
To Access the application outside of cluster
minikube service flaskapisvc --url
Now access the url on browser.
If you want to access via your specific port no then you need to port forwarding.
kubectl port-forward svc/flaskapisvc 3000:80
Now open browser type 127.0.0.1:3000 you can access your app.
Next we will add ingress for this so that we can access our app without specify port no.
Thats great keep leaning keep shine!
Comments