Comment installer le CRI-O Container Runtime sur Ubuntu 22.04

CRI-O est un runtime de conteneur léger, une alternative à Docker pour Kubernetes. C’est une implémentation de Kubernetes CRI (Container Runtime Interface) et une conformité avec le runtime OCI (Open Container initiative). CRI-O permet à Kubernetes d’exécuter directement les conteneurs sans outils supplémentaires ni ajustements du code.

CRI-O prend en charge plusieurs formats d’image, notamment le format d’image Docker. Il fournit également des fonctionnalités pour gérer les images de conteneurs, comme la gestion de la couche d’image, les systèmes de fichiers superposés, la gestion du cycle de vie des processus de conteneurs, la surveillance et la journalisation des conteneurs, et fournit également l’isolation des ressources.

Ce tutoriel te guidera dans l’installation du CRI-O Container Runtime sur le serveur Ubuntu 22.04. Il explique également comment configurer le plugin CNI avec CRI-O et l’utilisation de base de« cri-tools » pour gérer les Pods et les conteneurs.

Conditions préalables

Avant de commencer, tu dois avoir les conditions suivantes :

  • Un serveur Ubuntu 22.04 – Ce guide utilise le serveur Ubuntu avec le nom d’hôte « server-ubuntu » et l’adresse IP du serveur « 192.168.5.10 ».
  • Un utilisateur non root avec des privilèges root/administrateur.

Installation du CRI-O Container Runtime

CRI-O peut être installé de différentes manières : via la commande APT ou en construisant et en installant CRI-O à partir de la source. Dans cet exemple, tu vas installer le CRI-O Container Runtime via le dépôt tiers.

Avant de commencer l’installation, exécute la commande suivante pour configurer les variables d’environnement« $OS » et« $CRIO_VERSION« . Pour cet exemple, nous allons installer le CRI-O v1.24.0 pour Ubuntu 22.04.

export OS=xUbuntu_22.04
export CRIO_VERSION=1.24

Exécute maintenant la commande suivante pour ajouter le référentiel CRI-O pour le serveur Ubuntu 22.04.

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

Ajoute la clé GPG pour le référentiel CRI-O à l’aide de la commande suivante.

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -

ajoute le référentiel et la clé cri-o

Mets maintenant à jour ton dépôt Ubuntu et rafraîchis l’index des paquets. Tu devrais voir que le dépôt CRI-O est ajouté à la liste de ton index de paquets.

sudo apt update

Référentiel de mise à jour

Ensuite, vérifie la version du paquet CRI-O à l’aide de la commande ci-dessous. Comme tu peux le voir, tu vas installer la dernière version du paquet CRI-O v1.24.

sudo apt info cri-o

paquet info cri-o

Installe maintenant le CRI-O container runtime à l’aide de la commande apt ci-dessous. Entre Y pour confirmer l’installation et appuie sur ENTER pour continuer, et l’installation commencera.

sudo apt install cri-o cri-o-runc

installer cri-o

Une fois l’installation terminée, démarre le service CRI-O et active-le à l’aide de la commande« systemctl » ci-dessous.

sudo systemctl start crio
sudo systemctl enable crio

Enfin, contrôle et vérifie le service CRI-O à l’aide de la commande ci-dessous. Tu devrais voir que le service CRI-O est activé et qu’il s’exécutera automatiquement au démarrage du système. Et l’état actuel du service CRI-O est en cours d’exécution.

sudo systemctl status crio

Commence à activer le service crio

Installation du plugin CNI (Container Network Interface)

Le CNI (Container Network Interface) est nécessaire pour le runtime de conteneur CRI-O. Le plugin CNI te permet de configurer le réseau sur le conteneur et les Pods. Tu installeras le plugin CNI à partir du dépôt officiel ubuntu et le configureras avec le runtime de conteneur CRI-O.

Le paquet« containernetworking-plugins » est principalement disponible sur la distribution Linux. Pour l’installer, exécute la commande apt ci-dessous, et l’installation commencera.

sudo apt install containernetworking-plugins

installer containernetworking-plugin

Une fois l’installation terminée, modifie le fichier de configuration de CRI-O« /etc/crio/crio.conf » à l’aide de la commande suivante.

sudo nano /etc/crio/crio.conf

Dans la section « [crio.network] », décommente l’option« network_dir » et« plugin_dirs« . Veille également à ajouter le répertoire du plugin CNI« /usr/lib/cni/ » à l’option« plugin_dirs« .

# The crio.network table containers settings pertaining to the management of
# CNI plugins.
[crio.network]

# The default CNI network name to be selected. If not set or "", then
# CRI-O will pick-up the first one found in network_dir.
# cni_default_network = ""

# Path to the directory where CNI configuration files are located.
network_dir = "/etc/cni/net.d/"

# Paths to directories where CNI plugin binaries are located.
plugin_dirs = [
        "/opt/cni/bin/",
        "/usr/lib/cni/",
]

Lorsque tu as terminé, enregistre et ferme le fichier.

Ensuite, supprime la confgiuration CNI bridge par défaut« /etc/cni/net.d/100-crio-bridge.conf« . Ensuite, télécharge la nouvelle configuration CNI du pont dans« /etc/cni/net.d/11-crio-ipv4-bridge.conf« .

La nouvelle configuration CNI du pont activera uniquement IPv4 pour les Pods et les conteneurs.

rm -f /etc/cni/net.d/100-crio-bridge.conf
sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conf https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf

configurer le plugin de mise en réseau des conteneurs

Redémarre maintenant le service CRI-O pour appliquer les nouvelles modifications aux paramètres du plugin CNI.

sudo systemctl restart crio

Enfin, vérifie à nouveau le service CRI-O à l’aide de la commande ci-dessous. Tu devrais voir que le service CRI-O fonctionne avec la nouvelle configuration CNI du pont.

sudo systemctl status crio

vérifier le service crio

Installation du paquet CRI-Tools

Tu as terminé l’installation du CRI-O container runtime et maintenant il fonctionne avec le plugin CNI correct. Tu vas maintenant installer le paquet « cri-tools » qui comprend l’utilitaire de ligne de commande « crictl » qui peut être utilisé pour interagir avec le CRI-O container runtime.

Le paquet« cri-tools » peut être utilisé avec plusieurs runtimes de conteneurs tels que containerd, dockershim, CRI-O et cri-dockerd.

Exécute la commande apt ci-dessous pour installer le paquet« cri-tools« . L’installation commencera automatiquement.

sudo apt install cri-tools

installe cri-tools

Une fois l’installation terminée, exécute la commande« crictl » ci-dessous pour vérifier la version actuelle du runtime. Tu verras que le runtime de conteneur actuel que tu utilises est un CRI-O v1.24.

crictl version

Ensuite, exécute la commande« crictl » ci-dessous pour vérifier l’état du Container Runtime actuel et du CNI Network Plugin. Tu devrais voir que le CRI-O Container Runtime est« RuntimeReady » et que le CNI Plugin est« NetworkReady« .

crictl info

info de contrôle crictl

La commande crictl fournit une auto-complétion pour ton shell, qui peut être générée manuellement. Exécute la commande crictl suivante pour générer la complétion de commande pour le shell Bash dans le fichier« /etc/bash_completion.d/crictl« . Ensuite, recharge ta session Bash actuelle en sourçant le fichier de configuration ~/.bashrc.

crictl completion > /etc/bash_completion.d/crictl
source ~/.bashrc

Exécute maintenant la commande« crictl » et appuie sur TAB pour voir toutes les complétions de commande disponibles.

crictl TAB

setup crictl completiobn

Créer un pod et un conteneur à l’aide de crictl

Maintenant que cri-tools est installé sur ton système, il est temps de créer un bac à sable Pod et un conteneur à l’aide de la commande« crictl« . Dans cet exemple, nous allons créer un Pod pour le conteneur Nginx.

Crée un nouveau répertoire« ~/demo » à l’aide de la commande ci-dessous.

mkdir ~/demo/

Exécute maintenant la commande ci-dessous pour créer un nouveau fichier de configuration JSON et définir le sandbox Pod pour le conteneur.

cat <<EOF | tee ~/demo/sandbox_nginx.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "linux": {
    },
    "log_directory": "/tmp"
}
EOF

Exécute le Pod sandbox à l’aide de la commande« crictl » ci-dessous. Et tu devrais voir la chaîne aléatoire de ton Pod.

sudo crictl runp ~/demo/sandbox_nginx.json

Contrôle et vérifie les Pods en cours d’exécution à l’aide de la commande ci-dessous. Tu devrais voir le sandbox Pod« nginx-sandbox » avec l’id Pod« 7b0618800e251 » dans l’état« Ready« .

sudo crictl pods

Créer un bac à sable pour les pods

Pour vérifier les détails du Pod, exécute la commande« crictl » ci-dessous, et assure-toi de changer l’id du Pod. Dans cet exemple, le pod« nginx_sandbox » a une adresse IP« 10.85.0.3« .

sudo crictl inspectp --output table 7b0618800e251

détails du bac à sable pod

Maintenant que le pod sandbox est prêt, il est temps de créer le conteneur Nginx. Mais d’abord, tu vas télécharger l’image Nginx.

Exécute la commande crictl suivante pour télécharger l’image Nginx. Ensuite, vérifie la liste des images disponibles.

sudo crictl pull nginx
sudo crictl images

image de téléchargement crictl

Exécute maintenant la commande suivante pour créer un nouveau fichier JSON pour définir le conteneur Nginx.

cat <<EOF | tee ~/demo/container_nginx.json
{
  "metadata": {
      "name": "nginx"
    },
  "image":{
      "image": "nginx"
    },
  "log_path":"nginx.0.log",
  "linux": {
  }
}
EOF

Crée un nouveau conteneur dans le bac à sable Pod« 7b0618800e251 » à l’aide de la commande crictl ci-dessous. Tu devrais voir la chaîne aléatoire de l’identifiant de ton nouveau conteneur Nginx.

sudo crictl create 7b0618800e251 ~/demo/container_nginx.json ~/demo/sandbox_nginx.json

Démarre le conteneur Nginx à l’aide de la commande ci-dessous, et assure-toi de modifier l’id du conteneur.

sudo crictl start 1100498979ee5d3a9cbdb7b8b8f18529a01298f2bb57f7fcd01f54dd5a0f8746

Ensuite, contrôle et vérifie le conteneur en cours d’exécution à l’aide de la commande ci-dessous. Tu devrais voir que le conteneur Nginx est« en cours d’exécution » dans le Pod« 7b0618800e251« .

sudo crictl ps

ajouter le conteneur au pod

Enfin, tu peux accéder au conteneur Nginx via l’adresse IP du Pod sandbox« nginx_sandbox« . Exécute la commande curl vers l’adresse IP de« nginx_sandbox« « 10.85.0.3« , et tu verras la page index.html par défaut de ton conteneur Nginx.

curl 10.85.0.3

Accéder au pod nginx

Conclusion

Tu as maintenant terminé l’installation et la configuration du CRI-O Container Runtime avec CNI Plugin sur un serveur Ubuntu 22.04. Tu peux maintenant l’utiliser comme runtime de conteneur pour le cluster Kubernetes. Tu as également appris l’utilisation de base de la commande « crictl » pour créer des Pods et des conteneurs à l’aide du CRI-O Container Runtime.

Vous aimerez aussi...