Publié le : 03/06/2023 à 03:40

Vue d'ensemble des gestionnaires de déploiement dans Kubernetes, leurs fonctions et cas d'utilisation.

Introduction

Dans Kubernetes, les gestionnaires de déploiement orchestrent et automatisent le cycle de vie des applications conteneurisées. Ils assurent la montée en charge, la redondance et la gestion des ressources pour les applications, permettant ainsi une architecture scalable et tolérante aux pannes.

Deployment

Gestionnaire pour les applications stateless.

Présentation

Le Deployment permet de déployer et gérer les applications sans état. Il maintient le nombre souhaité de Pods actifs, gère les mises à jour et les rollbacks, et offre des options de scaling horizontal.

Cas d'utilisation

Utilisé pour les applications web, API ou tout service stateless qui peut facilement être reproduit sans dépendances sur un stockage persistant.

Exemple

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example
        image: nginx

ReplicaSet

Maintien du nombre de réplicas de Pods.

Présentation

Le ReplicaSet est utilisé pour maintenir un nombre constant de Pods identiques dans le cluster. Les Deployments s'appuient souvent sur ReplicaSets pour gérer la création et la mise à jour des Pods.

Cas d'utilisation

Utilisé en interne par les Deployments pour assurer un nombre de Pods stables en fonctionnement.

StatefulSet

Pour les applications nécessitant un stockage persistant.

Présentation

Le StatefulSet est utilisé pour les applications nécessitant une persistance de données. Chaque Pod dispose d'une identité unique, préservée lors de la recréation du Pod, et est associé à un volume de stockage dédié.

Cas d'utilisation

Bases de données, systèmes de fichiers distribués, ou toute application nécessitant un identifiant unique ou un état persistant.

Exemple

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: example-statefulset
spec:
  serviceName: "example"
  replicas: 3
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example
        image: mysql

DaemonSet

Assure qu'un Pod tourne sur chaque nœud.

Présentation

Un DaemonSet garantit l'exécution d'un Pod sur chaque nœud du cluster. Utilisé pour des tâches de surveillance, d'analyse des journaux ou de maintenance réseau.

Cas d'utilisation

Agents de monitoring, collecte des logs, et tout service nécessitant une présence sur chaque nœud.

Exemple

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
spec:
  selector:
    matchLabels:
      name: example
  template:
    metadata:
      labels:
        name: example
    spec:
      containers:
      - name: example
        image: fluentd

Job

Exécution de tâches ponctuelles.

Présentation

Le Job exécute des Pods pour accomplir une tâche ponctuelle, et s'arrête lorsque celle-ci est terminée. Il est particulièrement adapté pour les processus de traitement de données ou les scripts de maintenance.

Cas d'utilisation

Tâches ponctuelles comme des analyses de données ou des traitements de lot.

Exemple

apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  template:
    spec:
      containers:
      - name: example
        image: busybox
        command: ["echo", "Hello, Kubernetes!"]
      restartPolicy: Never

CronJob

Planification de tâches récurrentes.

Présentation

Un CronJob permet de planifier des tâches récurrentes selon une syntaxe crontab. Il est utile pour les sauvegardes, la génération de rapports, ou toute tâche périodique.

Cas d'utilisation

Tâches récurrentes comme les sauvegardes ou le nettoyage des données.

Exemple

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: example-cronjob
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: example
            image: busybox
            command: ["echo", "Hello from CronJob"]
          restartPolicy: OnFailure

Choisir un gestionnaire de déploiement

  • Pour des applications stateless : utilisez Deployment.
  • Pour des applications stateful nécessitant des identifiants persistants : préférez StatefulSet.
  • Pour les tâches à exécuter sur chaque nœud : optez pour un DaemonSet.
  • Pour des tâches ponctuelles : Job est recommandé.
  • Pour des tâches récurrentes : CronJob est idéal.
Lien copié dans le presse-papiers !