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


  1. Installez minikube ou activez K8s dans Docker Desktop
  2. Déployez votre app Django avec un Deployment + Service simple
  3. Ajoutez un Ingress avec nginx-ingress-controller
  4. Passez aux Secrets pour les variables sensibles
  5. Configurez les probes (readiness + liveness)
  6. 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.