So installierst du CRI-O Container Runtime unter Ubuntu 22.04

CRI-O ist eine leichtgewichtige Container-Runtime-Alternative zu Docker für Kubernetes. Es ist eine Implementierung von Kubernetes CRI (Container Runtime Interface) und entspricht der OCI-Laufzeit (Open Container Initiative). CRI-O ermöglicht es Kubernetes, Container direkt auszuführen, ohne dass zusätzliche Tools oder Anpassungen am Code nötig sind.

CRI-O unterstützt mehrere Image-Formate, darunter auch das Docker-Image-Format. CRI-O bietet außerdem Funktionen für die Verwaltung von Container-Images, wie z. B. die Verwaltung von Image-Layern, Overlay-Dateisystemen, die Verwaltung des Lebenszyklus von Container-Prozessen, die Überwachung und Protokollierung von Containern sowie die Ressourcenisolierung.

Dieses Tutorial führt dich durch die Installation der CRI-O Container Runtime auf dem Ubuntu 22.04 Server. Außerdem erfährst du, wie du das CNI-Plugin mit CRI-O einrichtest und wie du die„cri-tools“ für die Verwaltung von Pods und Containern einsetzt.

Voraussetzung

Bevor du beginnst, musst du die folgenden Voraussetzungen erfüllen:

  • Einen Ubuntu 22.04 Server – Diese Anleitung verwendet den Ubuntu Server mit dem Hostnamen „server-ubuntu“ und der Server-IP-Adresse „192.168.5.10“.
  • Ein Nicht-Root-Benutzer mit Root-/Administrator-Rechten.

Installation der CRI-O Container Runtime

CRI-O kann auf verschiedene Arten installiert werden: über den APT-Befehl oder indem du CRI-O aus dem Quellcode baust und installierst.

Bevor du mit der Installation beginnst, führe den folgenden Befehl aus, um die Umgebungsvariablen„$OS“ und„$CRIO_VERSION“ einzurichten. In diesem Beispiel werden wir CRI-O v1.24.0 für Ubuntu 22.04 installieren.

export OS=xUbuntu_22.04
export CRIO_VERSION=1.24

Führe nun den folgenden Befehl aus, um das CRI-O Repository für den Ubuntu 22.04 Server hinzuzufügen.

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

Füge den GPG-Schlüssel für das CRI-O-Repository mit dem unten stehenden Befehl hinzu.

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 -

cri-o Repository und Schlüssel hinzufügen

Aktualisiere nun dein Ubuntu-Repository und aktualisiere den Paketindex. Du solltest sehen, dass das CRI-O Repository zu deiner Paketindexliste hinzugefügt wurde.

sudo apt update

Repository aktualisieren

Überprüfe danach die Version des CRI-O-Pakets mit dem unten stehenden Befehl. Wie du sehen kannst, installierst du die neueste Version des CRI-O-Pakets v1.24.

sudo apt info cri-o

info cri-o Paket

Installiere nun die CRI-O-Container-Laufzeitumgebung mit dem folgenden apt-Befehl. Gib Y ein, um die Installation zu bestätigen, und drücke ENTER, um fortzufahren, damit die Installation beginnt.

sudo apt install cri-o cri-o-runc

cri-o installieren

Nachdem die Installation abgeschlossen ist, starte den CRI-O-Dienst und aktiviere ihn mit dem unten stehenden Befehl„systemctl„.

sudo systemctl start crio
sudo systemctl enable crio

Überprüfe und verifiziere den CRI-O-Dienst mit dem folgenden Befehl. Du solltest sehen, dass der CRI-O-Dienst aktiviert ist und beim Systemstart automatisch ausgeführt wird. Und der aktuelle Status des CRI-O-Dienstes ist „running“.

sudo systemctl status crio

start enable crio service

Installation des CNI (Container Network Interface) Plugins

Das CNI (Container Network Interface) wird für die CRI-O Container-Laufzeit benötigt. Mit dem CNI-Plugin kannst du das Netzwerk für den Container und die Pods einrichten. Du installierst das CNI-Plugin aus dem offiziellen Ubuntu-Repository und richtest es mit der CRI-O-Container-Laufzeitumgebung ein.

Das Paket„containernetworking-plugins“ ist in den meisten Linux-Distributionen verfügbar. Um es zu installieren, führe den unten stehenden apt-Befehl aus und die Installation wird gestartet.

sudo apt install containernetworking-plugins

Installation des Containernetworking-Plugins

Nachdem die Installation abgeschlossen ist, bearbeite die CRI-O-Konfigurationsdatei„/etc/crio/crio.conf“ mit dem folgenden Befehl.

sudo nano /etc/crio/crio.conf

Im Abschnitt „[crio.network]“ musst du die Optionen„network_dir“ und„plugin_dirs“ auskommentieren. Füge außerdem das CNI-Plugin-Verzeichnis„/usr/lib/cni/“ zur Option„plugin_dirs“ hinzu.

# 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/",
]

Wenn du fertig bist, speichere und schließe die Datei.

Als Nächstes entfernst du die Standard-CNI-Konfiguration für die Brücke„/etc/cni/net.d/100-crio-bridge.conf„. Dann lädst du die neue Bridge-CNI-Konfiguration nach„/etc/cni/net.d/11-crio-ipv4-bridge.conf„.

Die neue Bridge-CNI-Konfiguration wird nur IPv4 für Pods und Container aktivieren.

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

Container-Netzwerk-Plugin konfigurieren

Starte nun den CRI-O-Dienst neu, um die neuen Änderungen an den CNI-Plugin-Einstellungen zu übernehmen.

sudo systemctl restart crio

Überprüfe abschließend den CRI-O-Dienst mit dem unten stehenden Befehl. Du solltest sehen, dass der CRI-O Dienst mit der neuen Bridge CNI Konfiguration läuft.

sudo systemctl status crio

Crio Service überprüfen

Installation des CRI-Tools-Pakets

Du hast die Installation der CRI-O-Container-Laufzeit abgeschlossen und jetzt läuft er mit dem richtigen CNI-Plugin. Jetzt installierst du das Paket „cri-tools“, das das Kommandozeilenprogramm „crictl“ enthält, das zur Interaktion mit der CRI-O-Container-Laufzeit verwendet werden kann.

Die„cri-tools“ können mit mehreren Container-Runtimes wie containerd, dockershim, CRI-O und cri-dockerd verwendet werden.

Führe den folgenden apt-Befehl aus, um das Paket„cri-tools“ zu installieren. Die Installation wird automatisch gestartet.

sudo apt install cri-tools

cri-tools installieren

Nachdem die Installation abgeschlossen ist, führe den Befehl„crictl“ aus, um die aktuelle Runtime-Version zu überprüfen. Du wirst sehen, dass die aktuelle Container-Runtime, die du verwendest, CRI-O v1.24 ist.

crictl version

Als Nächstes führst du den folgenden„crictl„-Befehl aus, um den Status der aktuellen Container Runtime und des CNI Network Plugin zu überprüfen. Du solltest sehen, dass die CRI-O Container Runtime„RuntimeReady“ und das CNI Plugin„NetworkReady“ ist.

crictl info

crictl check info

Der Befehl crictl bietet eine Autovervollständigung für deine Shell, die manuell erstellt werden kann. Führe den folgenden crictl-Befehl aus, um die Befehlsvervollständigung für die Bash-Shell in der Datei„/etc/bash_completion.d/crictl“ zu erzeugen. Lade dann deine aktuelle Bash-Sitzung neu, indem du die Konfigurationsdatei ~/.bashrc abrufst.

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

Führe nun den Befehl„crictl“ aus und drücke TAB, um alle verfügbaren Befehlsvervollständigungen zu sehen.

crictl TAB

Einrichtung Krippe komplett

Pod und Container mit crictl erstellen

Jetzt, wo cri-tools auf deinem System installiert ist, ist es an der Zeit, mit dem Befehl„crictl“ eine Pod-Sandbox und einen Container zu erstellen. In diesem Beispiel werden wir einen Pod für den Nginx-Container erstellen.

Erstelle mit dem unten stehenden Befehl ein neues Verzeichnis„~/demo„.

mkdir ~/demo/

Führe nun den folgenden Befehl aus, um eine neue JSON-Konfigurationsdatei zu erstellen und die Pod-Sandbox für den Container zu definieren.

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

Starte die Pod-Sandbox mit dem folgenden Befehl„crictl„. Du solltest nun den zufälligen String deines Pods sehen.

sudo crictl runp ~/demo/sandbox_nginx.json

Überprüfe und verifiziere die laufenden Pods mit dem folgenden Befehl. Du solltest die Pod-Sandbox„nginx-sandbox“ mit der Pod-ID„7b0618800e251“ im Status„Ready“ sehen.

sudo crictl pods

Pod-Sandkasten erstellen

Um die Details des Pods zu überprüfen, führe den unten stehenden Befehl„crictl“ aus und ändere die Pod-ID. In diesem Beispiel hat der Pod„nginx_sandbox“ die IP-Adresse„10.85.0.3„.

sudo crictl inspectp --output table 7b0618800e251

pod sandbox details

Jetzt, wo die Pod-Sandbox fertig ist, ist es an der Zeit, den Nginx-Container zu erstellen. Aber zuerst musst du das Nginx-Image herunterladen.

Führe den folgenden crictl-Befehl aus, um das Nginx-Image herunterzuladen. Überprüfe anschließend die Liste der verfügbaren Images.

sudo crictl pull nginx
sudo crictl images

crictl Bild herunterladen

Führe nun den folgenden Befehl aus, um eine neue JSON-Datei für die Definition des Nginx-Containers zu erstellen.

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

Erstelle mit dem unten stehenden crictl-Befehl einen neuen Container in der Pod-Sandbox„7b0618800e251„. Du solltest die zufällige Zeichenfolge deiner neuen Nginx-Container-ID sehen.

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

Starte den Nginx-Container mit dem unten stehenden Befehl und stelle sicher, dass du die Container-ID änderst.

sudo crictl start 1100498979ee5d3a9cbdb7b8b8f18529a01298f2bb57f7fcd01f54dd5a0f8746

Überprüfe anschließend den laufenden Container mit dem unten stehenden Befehl. Du solltest sehen, dass der Nginx-Container im Pod7b0618800e251läuft.

sudo crictl ps

Container zum Pod hinzufügen

Schließlich kannst du auf den Nginx-Container über die IP-Adresse der Pod-Sandbox„nginx_sandbox“ zugreifen. Führe den Befehl curl an die IP-Adresse10.85.0.3“ von„nginx_sandbox“ aus und du siehst die Standardseite index.html deines Nginx-Containers.

curl 10.85.0.3

nginx pod zugreifen

Fazit

Du hast nun die Installation und Konfiguration der CRI-O Container Runtime mit CNI Plugin auf einem Ubuntu 22.04 Server abgeschlossen. Du kannst sie nun als Container-Laufzeitumgebung für den Kubernetes-Cluster verwenden. Außerdem hast du die grundlegende Verwendung des Befehls „crictl“ zur Erstellung von Pods und Containern mit der CRI-O Container Runtime gelernt.

Das könnte dich auch interessieren …