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.

  1. 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.



  2. 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.

  3. 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.

  1. 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.



  2. 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.

  1. 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é.



  2. 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.

  3. 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.

  1. 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.



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

  3. 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.

  1. 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.



  2. Cas d'utilisation
    Tâches ponctuelles comme des analyses de données ou des traitements de lot.

  3. 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.

  1. 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.



  2. Cas d'utilisation
    Tâches récurrentes comme les sauvegardes ou le nettoyage des données.

  3. 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.

Date de publication: 2023-06-03T09:40:00+08:00
Date de modification: 2024-10-30T14:47:31
Auteur:
  • Martin LEKPA : Tech Lead et formateur Observabilité