Table of Contents
Deploying Flask applications efficiently requires understanding how to use containerization and orchestration tools. Docker and Kubernetes are popular choices that streamline the deployment process, making applications scalable and manageable.
Introduction to Flask, Docker, and Kubernetes
Flask is a lightweight Python web framework used to build web applications quickly. Docker allows you to package your application and its dependencies into containers, ensuring consistency across environments. Kubernetes is an orchestration platform that manages container deployment, scaling, and networking.
Prerequisites
- Python and Flask installed
- Docker installed and running
- Kubernetes cluster (local or cloud-based)
- kubectl configured to access your cluster
Step 1: Create Your Flask Application
Start by building a simple Flask app. Save it as app.py.
Example:
app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask with Docker and Kubernetes!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
Step 2: Containerize Your Application with Docker
Create a Dockerfile in the same directory as your Flask app.
Dockerfile:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"]
Also, create a requirements.txt file with:
flask
Build the Docker image:
docker build -t flask-app .
Run the container locally to test:
docker run -p 5000:5000 flask-app
Step 3: Prepare Kubernetes Deployment
Create a deployment configuration file named deployment.yaml.
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: flask-deployment
spec:
replicas: 3
selector:
matchLabels:
app: flask
template:
metadata:
labels:
app: flask
spec:
containers:
- name: flask
image: flask-app:latest
ports:
- containerPort: 5000
Create a service to expose your deployment:
apiVersion: v1
kind: Service
metadata:
name: flask-service
spec:
type: LoadBalancer
selector:
app: flask
ports:
- protocol: TCP
port: 80
targetPort: 5000
Step 4: Deploy to Kubernetes
Apply the deployment and service configurations:
kubectl apply -f deployment.yaml
Check the status of your deployment:
kubectl get pods
Access your Flask app through the external IP provided by the service.
Conclusion
Using Docker and Kubernetes simplifies deploying Flask applications at scale. Containerization ensures consistency, while orchestration manages deployment, scaling, and networking. With these tools, you can deploy robust web applications efficiently and reliably.