Nouveau : Datasets open source gratuits disponibles !Decouvrir →
☸️
Intermediaire 25 min Kubernetes

Migrer de Docker Compose vers Kubernetes

Pourquoi Migrer de Docker Compose vers Kubernetes ?

Dans un environnement moderne où les systèmes d'application deviennent plus complexes et distribués, Docker Compose est une solution populaire pour gérer des applications multi-conteneurs en local. Cependant, lorsque vous souhaitez déployer vos applications dans un environnement production à grande échelle, Kubernetes est souvent le choix préféré.

Le contexte réel de la migration vers Kubernetes est que les entreprises et les développeurs font face aux défis suivants :

  • Échelle : Avec Docker Compose, il est difficile d'écheller une application en ajoutant plus de conteneurs. Kubernetes permet une gestion efficace de l'infrastructure pour gérer des milliers d'instances.
  • Gestion de la configuration et du déploiement : Kubernetes offre un système de configuration centralisée et robuste, ce qui facilite le déploiement et la mise à jour des applications.
  • Maintenance : La maintenance quotidienne des conteneurs avec Docker Compose peut être complexe. Kubernetes fournit des fonctionnalités avancées pour automatiser les tâches administratives.

Un cas d'utilisation concret est un petit e-commerce en ligne qui nécessite une grande disponibilité et une haute performance. En utilisant Kubernetes, le développeur peut s'assurer que son service est disponible 24/7, même si certaines instances de conteneurs tombent en panne.

Prerequis

  • Connaissances Nécessaires :

    • Connaissance des bases de Docker et Docker Compose.
    • Compréhension des concepts fondamentaux de Kubernetes (Pods, Services, Deployments, ConfigMaps, Secrets).
    • Familiarité avec les outils de ligne de commande (kubectl, minikube).
  • Outils à Installer :

    • Docker
    • Minikube pour créer un cluster Kubernetes local.
    • Kubectl pour interagir avec le cluster Kubernetes.

Concepts Fondamentaux

Pods

Un Pod est le plus petit unité de déploiement dans Kubernetes. Il peut contenir plusieurs conteneurs, mais généralement, les Pods sont utilisés pour des services simples.

## my-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx:latest

Services

Un Service permet d'exposer un ensemble de Pods et d'offrir des services réseau. Ils sont utilisés pour assurer la haute disponibilité et l'équilibrage du charge.

## my-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

Deployments

Un Deployment permet de déployer et de gérer les réplicas d'un Pod. Il offre des fonctionnalités telles que l'auto-scalage, la mise à jour en滚动.

## my-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest
        ports:
        - containerPort: 80

Mise en Pratique : Projet Fil Rouge

Étape 1 : Créer un Projet Simple

Nous allons créer une application simple qui utilise Flask pour exposer une API de blog.

## Initialiser un nouveau projet Flask
mkdir my-flask-app
cd my-flask-app
echo "Flask==2.0.1" > requirements.txt
pip install -r requirements.txt

Étape 2 : Créer le Fichier app.py

## app.py
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/posts', methods=['GET'])
def get_posts():
    posts = [
        {'id': 1, 'title': 'Post 1'},
        {'id': 2, 'title': 'Post 2'}
    ]
    return jsonify(posts)

if __name__ == '__main__':
    app.run(debug=True)

Étape 3 : Créer le Fichier Dockerfile

## Dockerfile
FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

Étape 4 : Construire l'Image Docker et Lancer le Container

## Construire l'image Docker
docker build -t my-flask-app:latest .

## Lancer un container avec Docker Compose
docker-compose up -d

Étape 5 : Créer les Fichiers Kubernetes

my-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-flask-app-pod
spec:
  containers:
  - name: my-flask-app-container
    image: my-flask-app:latest
    ports:
    - containerPort: 5000

my-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-flask-app-service
spec:
  selector:
    app: my-flask-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000

my-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-flask-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-flask-app
  template:
    metadata:
      labels:
        app: my-flask-app
    spec:
      containers:
      - name: my-flask-app-container
        image: my-flask-app:latest
        ports:
        - containerPort: 5000

Étape 6 : Déployer sur Kubernetes

## Créer le cluster minikube
minikube start

## Appliquer les fichiers Kubernetes
kubectl apply -f my-pod.yaml
kubectl apply -f my-service.yaml
kubectl apply -f my-deployment.yaml

## Vérifier l'état des Pods et Services
kubectl get pods
kubectl get services

Étape 7 : Accéder à l'API

minikube service my-flask-app-service --url

Erreurs Frequentes et Debugging

  1. Erreur : Error from server (NotFound): services "my-flask-app-service" not found

    • Code Incorrect :
      apiVersion: v1
      kind: Service
      metadata:
        name: my-flask-app-service
      spec:
        selector:
          app: my-flask-app
        ports:
          - protocol: TCP
            port: 80
            targetPort: 5000
      
    • Code Correct :
      apiVersion: v1
      kind: Service
      metadata:
        name: my-flask-app-service
      spec:
        selector:
          app: my-flask-app
        ports:
          - protocol: TCP
            port: 80
            targetPort: 5000
      
  2. Erreur : Failed to pull image "my-flask-app:latest": no basic auth credentials

    • Code Incorrect :
      FROM python:3.8-slim
      
      WORKDIR /app
      
      COPY requirements.txt .
      RUN pip install -r requirements.txt
      
      COPY . .
      
      CMD ["python", "app.py"]
      
    • Code Correct :
      FROM python:3.8-slim
      
      WORKDIR /app
      
      COPY requirements.txt .
      RUN pip install -r requirements.txt
      
      COPY . .
      
      CMD ["python", "app.py"]
      
  3. Erreur : Unable to pull data from the repository

    • Code Incorrect :
      docker-compose up -d
      
    • Code Correct :
      kubectl apply -f my-pod.yaml
      kubectl apply -f my-service.yaml
      kubectl apply -f my-deployment.yaml
      

Pour Aller Plus Loi

  1. Utiliser des ConfigMaps et Secrets

  2. Automatiser le déploiement avec GitOps

  3. Utiliser des Metrics et Logging

Défi Pratique

Défi : Créer un Service avec une ConfigMap et un Secret

  1. Créez un fichier config.yaml pour les paramètres de configuration.
  2. Créez un fichier secret.yaml pour stocker des informations sensibles comme les mots de passe.
  3. Mettez à jour le Deployment pour utiliser la ConfigMap et le Secret.

Besoin d'aide sur Kubernetes ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quels sont les avantages de migrer de Docker Compose vers Kubernetes?
Kubernetes offre une meilleure échelle et la possibilité d'automatiser les déploiements, les mises à jour et les réductions en charge. Il permet également un meilleur contrôle et gestion des ressources pour de grandes applications.
Comment configurer Kubernetes pour migrer mes services Docker Compose?
Pour migrer vos services Docker Compose vers Kubernetes, vous devez d'abord créer une configuration YAML pour chaque service. Vous pouvez ensuite utiliser des outils comme `kompose` qui aide à convertir les fichiers Docker Compose en fichiers YAML Kubernetes.
Quels sont les défis potentiels lors de la migration depuis Docker Compose vers Kubernetes?
L'un des principaux défis est la complexité accrue avec Kubernetes. Il faut une meilleure connaissance du système et des concepts liés aux déploiements, aux services, aux nœuds, etc. De plus, la gestion des mises à jour et de la maintenance peut être plus complexe.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.