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 -
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
Ü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
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
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
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
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
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
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
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
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
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
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
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
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 Pod„7b0618800e251„läuft.
sudo crictl ps
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-Adresse„10.85.0.3“ von„nginx_sandbox“ aus und du siehst die Standardseite index.html deines Nginx-Containers.
curl 10.85.0.3
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.