Aller au contenu

Containerd

Mise à jour :

Containerd est un moteur de conteneurs léger, rapide et robuste, idéal pour gérer vos workloads en conteneurs. Initialement intégré à Docker, il est aujourd’hui un projet clé soutenu par la CNCF et parfaitement adapté à Kubernetes. Ce guide vous permettra d’apprendre à l’installer, le configurer et l’utiliser efficacement.

Un peu d’histoire

Containerd a vu le jour en 2015 comme un composant central de Docker, conçu pour gérer l’exécution et la supervision des conteneurs. À l’époque, Docker combinait plusieurs fonctionnalités : le build d’images, la gestion des conteneurs, et l’orchestration. Pour simplifier son architecture, Docker a choisi de découpler certaines de ces responsabilités, donnant naissance à containerd en tant que moteur dédié à la gestion des conteneurs.

En 2017, Docker a fait un pas décisif en transférant containerd à la Cloud Native Computing Foundation (CNCF). Cette décision a renforcé l’indépendance et l’adoption de containerd, le plaçant au centre de l’écosystème cloud-native. Depuis, il est devenu le runtime privilégié pour des outils comme Kubernetes, remplaçant l’ancien Docker-shim avec le support natif de l’interface CRI (Container Runtime Interface).

Aujourd’hui, containerd est utilisé par les principaux fournisseurs de services cloud et s’impose comme une référence incontournable dans la gestion des conteneurs grâce à sa stabilité et ses performances éprouvées. Une belle trajectoire pour un projet né dans l’ombre de Docker !

Quelles différences entre Docker et containerd ?

Bien que Docker et containerd soient souvent associés, leurs objectifs et fonctionnalités diffèrent sensiblement. Docker est une plateforme complète de gestion de conteneurs, regroupant des outils pour la création d’images, leur gestion, et leur orchestration. À l’inverse, containerd se concentre uniquement sur l’exécution des conteneurs, en servant de moteur minimaliste et performant.

Docker repose en grande partie sur containerd pour ses tâches d’exécution des conteneurs. Cependant, il y ajoute des fonctionnalités comme le build d’images avec Dockerfile, la gestion avancée des réseaux, et des outils comme Docker Compose pour orchestrer des applications multi-conteneurs. Docker vise à fournir une solution tout-en-un, accessible aux développeurs et facile à prendre en main.

De son côté, containerd est conçu pour être léger et modulaire, privilégiant l’intégration dans des environnements cloud-native comme Kubernetes. Son adoption massive s’explique notamment par son support natif de l’interface CRI (Container Runtime Interface), simplifiant son utilisation dans des clusters Kubernetes, où Docker est désormais déprécié.

Un autre point de divergence est l’interface utilisateur. Docker offre une CLI riche et conviviale, tandis que containerd propose des outils minimalistes comme ctr ou nerdctl, principalement destinés aux administrateurs et développeurs expérimentés.

En résumé, Docker est idéal pour démarrer avec les conteneurs ou pour des workflows complets, tandis que containerd s’adresse aux utilisateurs cherchant un runtime performant, modulaire, et parfaitement adapté à l’écosystème cloud-native.

Fonctionnalités principales de containerd

Voici les fonctionnalités clés qui font de containerd un outil puissant pour la gestion des conteneurs :

  • Support des spécifications OCI Compatible avec les images et runtime conformes aux normes OCI (Open Container Initiative), garantissant une interopérabilité maximale.
  • Gestion des images conteneurs Permet le téléchargement, la gestion et l’exécution d’images via des outils comme ctr, crictl ou nerdctl.
  • Interface CRI intégrée Fournit un support natif pour Kubernetes, simplifiant l’intégration comme runtime des nœuds.
  • Snapshots efficaces Gère les systèmes de fichiers avec des snapshots performants pour des performances optimales et une meilleure isolation des conteneurs.
  • Modularité Un design minimaliste et modulaire, permettant une intégration facile avec des outils tiers.
  • Support multi-plateforme Fonctionne sur les architectures Linux (amd64, arm64) et Windows.
  • Extensibilité Possède une API gRPC permettant aux développeurs de créer des outils personnalisés pour interagir avec le moteur.
  • Léger et performant Conçu pour exécuter des workloads conteneurs avec un faible overhead.

Installation de containerd

L’installation de containerd dépend de vos besoins. Si vous cherchez à simplement exécuter des conteneurs localement, vous pouvez installer containerd seul. Cependant, pour un environnement de développement plus complet avec des outils comme le build d’images, l’ajout de Docker peut être pertinent, car il inclut containerd comme composant interne.

Installation manuelle de containerd

  1. Télécharger les binaires : Rendez-vous sur la page des releases et téléchargez l’archive correspondant à votre architecture (amd64, arm64).

  2. Extraire les fichiers : Une fois l’archive téléchargée, extrayez-la dans /usr/local.

    Terminal window
    sudo tar Cxzvf /usr/local containerd-<VERSION>-linux-amd64.tar.gz
  3. Configurer le démarrage avec systemd (facultatif) : Téléchargez le fichier containerd.service depuis le dépôt officiel et placez-le dans /usr/local/lib/systemd/system/.

    Terminal window
    sudo systemctl daemon-reload
    sudo systemctl enable --now containerd

Containerd nécessite également :

  • runc : Runtime pour exécuter les conteneurs. Téléchargez-le depuis runc releases et installez-le :

    Terminal window
    sudo install -m 755 runc.amd64 /usr/local/sbin/runc
  • CNI plugins : Pour configurer le réseau des conteneurs. Téléchargez l’archive et extrayez-la dans /opt/cni/bin.

    Terminal window
    sudo mkdir -p /opt/cni/bin
    sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v<VERSION>.tgz

Installation avec un gestionnaire de paquets

Sur les distributions basées sur Debian/Ubuntu :

  1. Ajoutez le dépôt officiel Docker :

    Terminal window
    sudo apt-get update
    sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  2. Installez containerd.io :

    Terminal window
    sudo apt-get update
    sudo apt-get install containerd.io
Sur les distributions basées sur CentOS/Fedora/RHEL :
  1. Ajoutez le dépôt officiel Docker :

    Terminal window
    sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  2. Installez containerd.io :

    Terminal window
    sudo dnf install containerd.io
  3. Démarrez et activez le service :

    Terminal window
    sudo systemctl enable --now containerd

Configuration de containerd

La configuration de containerd est définie dans un fichier config.toml. Par défaut, ce fichier est situé dans /etc/containerd/config.toml. Cette configuration contrôle divers aspects, comme le chemin des sockets, les plugins activés ou désactivés, et les options réseau.

Voici une explication détaillée d’une configuration typique installé avec docker :

disabled_plugins = ["cri"]
#root = "/var/lib/containerd"
#state = "/run/containerd"
#subreaper = true
#oom_score = 0
#[grpc]
# address = "/run/containerd/containerd.sock"
# uid = 0
# gid = 0
#[debug]
# address = "/run/containerd/debug.sock"
# uid = 0
# gid = 0
# level = "info"
disabled_plugins = ["cri"]
  • Ce paramètre désactive le plugin CRI (Container Runtime Interface) utilisé pour intégrer containerd avec Kubernetes.

Personnalisation et activation

  1. Générer un fichier de configuration par défaut : Si le fichier config.toml n’existe pas, générez-le :

    Terminal window
    sudo containerd config default > /etc/containerd/config.toml
  2. Modifier le fichier : Éditez le fichier avec votre éditeur préféré :

    Terminal window
    sudo nano /etc/containerd/config.toml
  3. Redémarrer le service :

    Après toute modification, redémarrez containerd pour appliquer les changements :

    Terminal window
    sudo systemctl restart containerd

En ajustant cette configuration selon vos besoins, vous pouvez optimiser containerd pour votre environnement, qu’il s’agisse d’une utilisation en standalone ou intégré dans un cluster Kubernetes. 😊

Utilisation de la CLI ctr

La commande ctr est l’outil CLI natif fourni avec containerd. Bien qu’il soit principalement conçu pour le débogage et les tests, ctr offre un accès direct et granulaire à toutes les fonctionnalités de containerd. Ce n’est pas l’outil recommandé pour une utilisation en production, mais il reste essentiel pour les administrateurs systèmes et les développeurs souhaitant explorer ou interagir directement avec containerd.

  1. Lister les namespaces disponibles : Vérifiez quels namespaces existent sur votre instance de containerd :
Terminal window
sudo ctr namespace list
moby

Si vous voyez moby, cela signifie que Docker utilise ce namespace pour ses conteneurs.

  1. Lister les conteneurs actifs : Dans le namespace default, affichez les conteneurs actuellement en cours d’exécution :
Terminal window
sudo ctr containers list

Dans un autre namespace (par exemple, moby) :

Terminal window
sudo ctr --namespace moby containers list
  1. Télécharger une image : Pour récupérer une image depuis un registre Docker :
Terminal window
sudo ctr images pull docker.io/library/redis:alpine
  1. Lister les images disponibles :

Affichez les images déjà téléchargées :

Terminal window
sudo ctr images list
  1. Lancer un conteneur interactif : Pour exécuter un conteneur à partir d’une image :
Terminal window
sudo ctr run --rm -t docker.io/library/redis:alpine my-redis

Explications :

  • --rm : supprime le conteneur après l’exécution.
  • -t : lance un terminal interactif.
  • my-redis : nom du conteneur.
  1. Supprimer une image : Pour supprimer une image inutilisée :
Terminal window
sudo ctr images remove docker.io/library/redis:alpine
  • Inspecter un conteneur : Pour obtenir les métadonnées d’un conteneur :

    Terminal window
    sudo ctr containers info <CONTAINER_ID>

Conclusion

Containerd est un moteur léger et performant, essentiel dans l’écosystème des conteneurs. Que ce soit en standalone ou intégré à Docker et Kubernetes, il s’adapte à vos besoins grâce à sa modularité et ses fonctionnalités avancées.

Simple à configurer et puissant à utiliser, il constitue un atout majeur pour gérer vos workloads conteneurs avec fiabilité. Avec containerd, vous êtes prêt à optimiser vos environnements modernes en toute simplicité. 🚀