Container sind ein wichtiger Bestandteil des modernen Computing, und mit der Weiterentwicklung der Infrastruktur rund um Container sind neue und bessere Tools aufgetaucht. Früher konnte man Container nur mit LXC ausführen, dann gewann Docker an Popularität und die Dinge wurden komplexer. Schließlich haben wir mit Podman das Containerverwaltungssystem bekommen, das wir alle verdient haben, eine dämonlose Container-Engine, mit der Container und Pods einfach zu erstellen, auszuführen und zu verwalten sind.
Container sind direkt mit Linux-Kernel-Fähigkeiten wie Cgroups und Namespaces verbunden und erzeugen viele neue Prozesse innerhalb dieser Namespaces. Kurz gesagt, das Ausführen eines Containers ist buchstäblich das Ausführen eines Linux-Systems innerhalb ein Linux-System. Aus Sicht des Betriebssystems sieht es sehr nach einer administrativen und privilegierten Aktivität aus. Normale Benutzer können normalerweise nicht so frei über Systemressourcen verfügen, wie es Container erfordern, also standardmäßig root oder sudo
Zum Ausführen von Podman sind Berechtigungen erforderlich. Dies ist jedoch nur die Standardeinstellung und keineswegs die einzige verfügbare oder vorgesehene Einstellung. Dieser Artikel zeigt, wie Sie Ihr Linux-System so konfigurieren, dass ein normaler Benutzer Podman ohne die Verwendung von sudo
ausführen kann ("wurzellos").
Namespace-Benutzer-IDs
Linux-Container
- Was sind Linux-Container?
- Eine Einführung in die Containerterminologie
- Download:Einführung in Container
- Kubernetes-Operatoren:Automatisierung der Container-Orchestrierungsplattform
- eBook:Kubernetes-Muster zum Entwerfen cloudnativer Apps
- Was ist Kubernetes?
Ein Kernel-Namespace ist im Wesentlichen ein imaginäres Konstrukt, das Linux hilft, den Überblick darüber zu behalten, welche Prozesse zusammengehören. Es sind die roten Warteschlangen von Linux. Es gibt eigentlich keinen Unterschied zwischen Prozessen in einer Warteschlange und einer anderen, aber es ist hilfreich, sie voneinander abzuschotten. Sie getrennt zu halten, ist der Schlüssel, um eine Gruppe von Prozessen zu einem "Container" und die andere Gruppe von Prozessen zu Ihrem Betriebssystem zu erklären.
Linux verfolgt anhand der Benutzer-ID (UID) und der Gruppen-ID (GID), welcher Benutzer oder welche Gruppe Eigentümer jedes Prozesses ist. Normalerweise hat ein Benutzer Zugriff auf etwa tausend untergeordnete UIDs, die er untergeordneten Prozessen in einem Namensraum zuweisen kann. Da Podman ein vollständiges untergeordnetes Betriebssystem ausführt, das dem Benutzer zugewiesen ist, der den Container gestartet hat, benötigen Sie viel mehr als die Standardzuteilung von subuids und subgids.
Mit dem usermod
können Sie einem Benutzer weitere Subuids und Subgids zuweisen Befehl. Zum Beispiel, um dem Benutzer tux
mehr Subuids und Subgids zuzuweisen , wählen Sie eine ausreichend hohe UID, der kein Benutzer zugeordnet ist (z. B. 200.000), und erhöhen Sie sie um mehrere Tausend:
$ sudo usermod \
--add-subuids 200000-265536 \
--add-subgids 200000-265536 \
tux
Namespace-Zugriff
Es gibt auch Beschränkungen für Namespaces. Dies wird normalerweise sehr hoch eingestellt, aber Sie können die Benutzerzuweisung von Namespaces mit systctl
überprüfen , das Kernel-Parameter-Tool:
$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633
Das sind viele Namespaces, und es ist wahrscheinlich das, was Ihre Distribution standardmäßig eingestellt hat. Wenn Ihre Distribution diese Eigenschaft nicht hat oder sehr niedrig eingestellt ist, können Sie sie erstellen, indem Sie diesen Text in die Datei /etc/sysctl.d/userns.conf
eingeben :
user.max_user_namespaces=28633
Laden Sie diese Einstellung:
$ sudo sysctl -p /etc/sysctl.d/userns.conf
Führen Sie einen Container ohne Root aus
Sobald Sie Ihre Konfiguration festgelegt haben, starten Sie Ihren Computer neu, um sicherzustellen, dass die Änderungen an Ihren Benutzer- und Kernel-Parametern geladen und aktiv sind.
Versuchen Sie nach dem Neustart, ein Container-Image auszuführen:
$ podman run -it busybox echo "hello"
hello
Container wie Befehle
Container mögen sich mysteriös anfühlen, wenn sie neu für Sie sind, aber eigentlich unterscheiden sie sich nicht von Ihrem bestehenden Linux-System. Sie sind buchstäblich Prozesse, die auf Ihrem System ausgeführt werden, ohne die Kosten oder Barrieren einer emulierten Umgebung oder virtuellen Maschine. Alles, was einen Container von Ihrem Betriebssystem trennt, sind Kernel-Namespaces, also sind sie wirklich nur native Prozesse mit unterschiedlichen Bezeichnungen darauf. Podman macht dies deutlicher als je zuvor, und sobald Sie Podman als wurzellosen Befehl konfiguriert haben, fühlen sich Container eher wie Befehle als wie virtuelle Umgebungen an. Podman macht Container und Pods einfach, also probieren Sie es aus.