{"id":3567,"date":"2024-02-05T20:39:26","date_gmt":"2024-02-05T19:39:26","guid":{"rendered":"https:\/\/informatik.htwk-leipzig.de\/seminar\/?p=3567"},"modified":"2024-03-19T17:39:11","modified_gmt":"2024-03-19T16:39:11","slug":"podman","status":"publish","type":"post","link":"https:\/\/informatik.htwk-leipzig.de\/seminar\/lehrveranstaltungen\/betriebliche-informationssysteme\/2024\/podman\/","title":{"rendered":"Podman"},"content":{"rendered":"<p><strong>Containervirtualisierung<\/strong><br \/>\nModerne Anwendungen erfordern h\u00e4ufig bestimmte Voraussetzungen an das System, auf dem sie ausgef\u00fchrt werden. Das f\u00e4ngt bereits beim Betriebssystem an, kann aber auch diverse unterst\u00fctzende Programme umfassen, ohne welche das jeweilige Programm nicht richtig funktionieren kann.<br \/>\nEin Programm, welches f\u00fcr Windows entwickelt wurde, funktioniert in der Regel nicht unter MacOS oder Linux und umgekehrt. Will man jetzt ein Programm verwenden, welches nicht f\u00fcr das eigene Betriebssystem verf\u00fcgbar ist, gibt es ein paar M\u00f6glichkeiten, diese Schwierigkeit zu umgehen. Auf der einen Seite kann man sich nat\u00fcrlich ein neues Ger\u00e4t mit dem gew\u00fcnschten Betriebssystem zulegen. Aus offensichtlichen Gr\u00fcnden ist das aber nat\u00fcrlich keine wirklich zufriedenstellende L\u00f6sung.<br \/>\nAlso bleibt die Variante, auf dem eigenen Ger\u00e4t ein weiteres Betriebssystem zu installieren. Zumindest mit Linux und Windows ist das durchaus eine M\u00f6glichkeit [1]. Allerdings bedeutet es auch, dass der Rechner f\u00fcr den Wechsel des Betriebssystems neu gestartet werden muss. Eine weitere M\u00f6glichkeit ist das Installieren einer virtuellen Maschine mit dem gew\u00fcnschten Betriebssystem. Auf diese Weise wird h\u00e4ufig Linux auf Windows Rechnern installiert.<br \/>\nDas Aufsetzen einer virtuellen Maschine erfordert allerdings etwas Arbeit und belegt durchaus eine gute Menge Speicherplatz auf dem eigenen Rechner.<br \/>\nEine einfachere L\u00f6sung f\u00fcr das Ausf\u00fchren von Programmen bietet daher die Containervirtualisierung. Dies \u201cist eine Methode, um mehrere Instanzen eines Betriebssystems (als G\u00e4ste) isoliert voneinander den Kernel eines Hostsystems nutzen zu lassen.\u201d [2] Sie stellt also \u00e4hnlich wie virtuelle Maschinen eine Version eines (fremden) Betriebssystems bereit, welche man auf dem eigenen System laufen lassen kann.<br \/>\nAllerdings wird hierbei kein volles Betriebssystem ausgef\u00fchrt, sondern nur der Teil, der f\u00fcr die jeweilige Anwendung relevant ist. \u201dDas erm\u00f6glicht passgenaue [Gastsysteme] und spart damit Ressourcen.\u201d [3] Au\u00dferdem laufen die einzelnen Gastsysteme, welche als Container bezeichnet werden, isoliert voneinander, was gerade auch Sicherheitstechnik ein Vorteil ist. Ein Container enth\u00e4lt dabei immer genau eine Anwendung zusammen mit den von ihr ben\u00f6tigten Ressourcen, so dass die Anwendung \u00fcber den Container direkt ausgef\u00fchrt werden kann, wenn entsprechende Software zur Containervirtualisierung auf dem System installiert ist.<\/p>\n<p><strong>Docker<\/strong><br \/>\nDie wohl bekannteste Anwendung f\u00fcr die Containervirtualisierung ist Docker. Es bietet die Umgebung, welche ben\u00f6tigt wird, um die entsprechenden Container auszuf\u00fchren. \u201cDocker is the de facto standard to build an share containerized apps\u201d [4], schreibt die Organisation selbst auf ihrer Website. Der Erfolg von Docker hat dazu gef\u00fchrt, dass andere Anwendungen zur Containervirtualisierung sich in der Regel stark am Format des Marktf\u00fchrers orientieren, bis dahin, dass sehr \u00e4hnliche Befehle zur Steuerung verwendet werden. Au\u00dferdem lassen sich Container f\u00fcr Docker mit den meisten anderen Anwendungen ausf\u00fchren.<\/p>\n<p><strong>Containerverwaltung<\/strong><br \/>\nGenau wie Kubernetes in Verbindung mit Docker besitzt auch Podman eine Containerverwaltung. \u201cContainer vereinfachen die Produktion, Verteilung, Auffindbarkeit und Nutzung von Anwendungen mit all ihren Abh\u00e4ngigkeiten und Standardkonfigurationsdateien.\u201d [5] Diese Anwendungs Container werden in Pods zusammengefasst und sind namensgebend f\u00fcr \u201cPodman\u201d(pod manager). Auf die Pods k\u00f6nnen Passw\u00f6rter sowie Konfigurationsdateien gemountet werden, auf welche der Pod bei Bedarf zugreifen kann. Die Containerverwaltung wird bei Podman nicht von einem dedizierten Daemon geleitet, wie ihn Kubernetes nutzt, stattdessen kommt bei Podman \u201csystemd\u201d zum Einsatz. \u201cDieser System- und Servicemanager f\u00fcr Linux ist dabei rootless, erh\u00f6ht Sicherheit und ist Ressourcen sparend.\u201d [6]<br \/>\nDie Grundidee ist dabei \u00e4hnlich zu Kubernetes-Clustern. Ein Cluster besteht aus mehreren Hostrechnern, wobei zwischen Control Plane und Worker Nodes unterschieden wird. Pro Cluster gibt es nur einen Control Plane, in Kubernetes Master genannt, welcher f\u00fcr die \u201cVerwaltung und Konfiguration des Clusters zust\u00e4ndig ist.\u201d [7] Er h\u00e4lt alle definierten Container-Konfigurationen oder Container-Images in einer etcd Instanz, welche bei Bedarf f\u00fcr neue Container verwendet werden kann. Podman ist dabei in der Lage, \u201cDockerfiles als Container Images zu verarbeiten oder diese selbst zu erstellen.\u201d [5] Per REST API k\u00f6nnen die einzelnen Worker Nodes, in Kubernetes Slaves genannt, mit dem Control Plane kommunizieren. Die Worker Nodes werden von der Control Plane \u00fcberwacht, diese kann bei Bedarf Pods innerhalb von Worker Nodes neu konfigurieren oder neu starten. Die Worker Nodes halten mehrere Pods, welche wiederum mehrere Container halten k\u00f6nnen. Diese sind \u00fcber eigene IP-Adressen innerhalb des Worker Nodes Subnetzes ansprechbar. Au\u00dferdem ist es m\u00f6glich, einen Service zu definieren, welcher innerhalb eines Worker Nodes mehrere Pods h\u00e4lt. Dieser ist wiederum durch eine eigene, vom Worker Node unabh\u00e4ngige IP Adresse ansprechbar und kann auch Pods aus anderen Workernodes ansprechen. Die Worker Nodes k\u00f6nnen auch untereinander kommunizieren, so kann ein \u00fcberlasteter Node andere aktivieren und es wird m\u00f6glich, Rechenlast unter mehreren Worker Nodes aufzuteilen.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-3568\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2024\/02\/abb1.png\" alt=\"\" width=\"687\" height=\"486\" \/><br \/>\nUm Hochverf\u00fcgbarkeit sicherzustellen, werden auch redundante Pods gehalten. Diese Pods sind Duplikate der verwendeten Pods und stehen bereit, um die Arbeiten von ausfallenden Pods zu \u00fcbernehmen. Schlie\u00dflich kann ein Service auch als per Proxy ansprechbarer Service nach au\u00dfen definiert werden, hierbei spricht man von einem Ingress.<\/p>\n<p><strong>Vor- und Nachteile von Podman<\/strong><br \/>\nDer gr\u00f6\u00dfte Vorteil von Podman liegt zun\u00e4chst darin, dass die Architektur im Gegensatz zu Docker keinen Daemon verwendet und daher ohne root-Zugriff (\u201esudoless\u201c) verwendet werden kann. Dies wird \u00fcber den Systemd, einem (Linux-)System- und Sitzungs-Manager, mithilfe eine Forkexec-Modells realisiert. (Inzwischen wurde bei Docker aber auch ein Rootless-Mode erg\u00e4nzt.) Gerade hinsichtlich der Sicherheit ist dies ein wichtiger Aspekt, m\u00f6gliche Risiken werden verkleinert. Gleichzeitig muss auf keine Funktionen, die andere Container Engines bis jetzt umgesetzt haben, verzichtet werden: Es ist in der Regel mit den gew\u00f6hnlichen Docker-Images vollst\u00e4ndig kompatibel. Zudem orientieren sich die Befehle zur Verwendung von Podman an denen von Docker (siehe Nutzung von Podman), was den Entwicklern bzw. den Unternehmen einen leichten Umstieg auf Podman erm\u00f6glicht. [6]<br \/>\nEs konnte allerdings ein Nachteil beobachtet werden, so ist Nutzung auf nfs (Network File Systems) nicht problemlos m\u00f6glich, da das Abspeichern von Images auf diesen nicht unterst\u00fctzt wird. Um diesem Problem zu begegnen , ist es n\u00f6tig in der <em>\/.config\/containers\/storage.conf<\/em> den Speicherort auf ein Verzeichnis zu \u00e4ndern, was au\u00dferhalb des nfs liegt. [8]<\/p>\n<p><strong>Installation von Podman<\/strong><br \/>\nPodman kann wie s\u00e4mtliche andere Anwendungen \u00fcber apt-get (bei Ubuntu, bei anderen Linux Distributionen \u00e4hnlich) installiert werden. F\u00fcr die Installation sind sudo-Rechte notwendig.<br \/>\n<em>Sudo apt-get update<\/em><br \/>\n<em>Sudo apt-get -y install podman <\/em>[9]<br \/>\nDanach ist die Verwendung wie im folgenden Abschnitt beschrieben m\u00f6glich.<\/p>\n<p><strong>Nutzung von Podman<\/strong><br \/>\nPodman l\u00e4sst sich im wesentlichen mit den selben Befehlen wie es bei Docker \u00fcblich ist nutzen. So k\u00f6nnen Images mit<\/p>\n<p><em>podman pull docker.io\/library\/nextcloud<\/em><\/p>\n<p>(Image Nextcloud) heruntergeladen werden und mit<\/p>\n<p><em>podman run docker.io\/library\/nextcloud<\/em><\/p>\n<p>ausgef\u00fchrt werden.<\/p>\n<p><em>podman ps -a<\/em><\/p>\n<p>listet die laufenden Container auf. F\u00fcr eine ausf\u00fchrliche Auflistung wird an dieser Stelle auf die Dokumentation verwiesen. [9]<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Quellen\/Hinweise<\/strong><\/p>\n<ol>\n<li>Apple ist bekannterma\u00dfen deutlich restriktiver, was die Verwendung ihrer Software auf fremder Hardware angeht, so dass diese L\u00f6sung nur schwierig umsetzbar ist<\/li>\n<li>https:\/\/de.wikipedia.org\/wiki\/Containervirtualisierung, 02.Februar 2024<\/li>\n<li>https:\/\/gridscale.io\/community\/glossar\/was-ist-containervirtualisierung\/#:~:text=Unter%20Containervirtualisierung%20versteht%20man%20ein,auf%20einem%20System%20zu%20betreiben, 02. Februar 2024<\/li>\n<li>https:\/\/www.docker.com\/why-docker\/, 02. Februar 2024<\/li>\n<li>https:\/\/docs.podman.io\/en\/latest\/Introduction.html, 02. Februar 2024<\/li>\n<li>https:\/\/www.redhat.com\/de\/topics\/containers\/what-is-podman, 03. Februar 2024<\/li>\n<li>https:\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/networking\/, 03. Februar 2024<\/li>\n<li>https:\/\/www.redhat.com\/sysadmin\/rootless-podman-nfs, 04. Februar 2024<\/li>\n<li>https:\/\/podman.io\/docs, 04. Februar 2024<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Containervirtualisierung Moderne Anwendungen erfordern h\u00e4ufig bestimmte Voraussetzungen an das System, auf dem sie ausgef\u00fchrt werden. Das f\u00e4ngt bereits beim Betriebssystem<\/p>\n","protected":false},"author":171,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[31,7],"class_list":["post-3567","post","type-post","status-publish","format-standard","hentry","category-betriebliche-informationssysteme","tag-container","tag-virtualisierung","comments-off"],"_links":{"self":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/3567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/users\/171"}],"replies":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/comments?post=3567"}],"version-history":[{"count":1,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/3567\/revisions"}],"predecessor-version":[{"id":3569,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/3567\/revisions\/3569"}],"wp:attachment":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media?parent=3567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/categories?post=3567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/tags?post=3567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}