Kubernetes effraie beaucoup de développeurs Python. Il y a de bonnes raisons à ça — c'est complexe, la courbe d'apprentissage est réelle, et la grande majorité des projets n'en ont pas besoin. Voici un guide honnête.
Quand NE PAS utiliser Kubernetes
Avant de parler de K8s, parlons des alternatives qui font 80% du travail pour 10% de la complexité :
- Fly.io : déploiement Docker en une commande, autoscaling, SSL automatique. Pour la plupart des startups en early stage, c'est la meilleure option.
- Railway : interface soignée, déploiement depuis GitHub en 2 minutes.
- Render : bon équilibre entre simplicité et contrôle.
- VPS + Docker Compose : un seul serveur bien dimensionné suffit souvent pour les premières années.
Passez à Kubernetes quand vous avez plusieurs équipes qui déploient indépendamment, un besoin d'autoscaling basé sur des métriques custom, ou des exigences de disponibilité qui justifient la complexité.
Les concepts fondamentaux (sans jargon inutile)
- Pod : l'unité de base. Un ou plusieurs conteneurs qui partagent le réseau. Éphémère par nature.
- Deployment : "je veux N replicas de ce pod, et si l'un crash, relances-en un".
- Service : adresse stable pour accéder à vos pods.
- Ingress : routing HTTP/HTTPS — l'équivalent nginx en face de vos apps.
Déployer Django sur K8s : le manifest minimal
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-app
spec:
replicas: 2
selector:
matchLabels:
app: django
template:
spec:
containers:
- name: django
image: registry/yannickabohthierry:latest
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: django-secrets
key: database-url
readinessProbe:
httpGet:
path: /health/
port: 8000
initialDelaySeconds: 10
Le readinessProbe est critique : K8s n'envoie du trafic au pod que quand il répond correctement.
Migrations Django sur K8s : le piège classique
Les migrations ne doivent pas tourner dans le conteneur principal. Utilisez un Job K8s déclenché avant le rollout du Deployment dans votre pipeline CI/CD.
Par où commencer concrètement
- Installez
minikubeou activez K8s dans Docker Desktop - Déployez votre app Django avec un Deployment + Service simple
- Ajoutez un Ingress avec nginx-ingress-controller
- Passez aux Secrets pour les variables sensibles
- Configurez les probes (readiness + liveness)
- Apprenez
kubectl logs,kubectl exec,kubectl describe
?
Dans le doute, commencez par Fly.io. L'investissement K8s vaut le coup si vous êtes dans le bon contexte.