Die Open-Source-Software Katello verwaltet Linux-Rechner wie auch virtuelle Maschinen in Rechenzentren. Ihr zur Seite stehen eine Reihe weiterer leistungsfähiger Tools wie The Foreman oder Pulp. Was sich einerseits als umfassende Admin-Umgebung entpuppt, erweist sich andererseits als komplex in der Nutzung. Wir stellen ein Basissetup für VMware vSphere vor.
Wer mehrere Linux-Server im Rechenzentrum betreut, braucht ein passendes Systemmanagement-Tool, das standardisierte OS-Installationen ausrollt und angebundene Systeme kontrolliert mit Patches sowie Updates versorgt. Im Kern steht der Gedanke des sogenannten "Standard Operating Environments", also einer definierten OS-Konfiguration, die auf allen physischen und virtuellen Systemen gleich aussieht.
2014 wechselte Red Hat den Unterbau seiner Systemmanagement-Umgebung "Satellite" komplett aus. Wie üblich basiert die aktuelle Lösung auf einer Reihe von Open-Source-Komponenten, die sich dann auch zur Verwaltung verschiedener Linux-Derivate wie Fedora, CentOS Stream, Rocky Linux oder AlmaLinux eignen. Dank eines neuen Paketmanagers lassen sich auch Debian und Ubuntu mit "Katello" [1] verwalten. Strenggenommen ist "Katello" dabei nur ein Plug-in für das Managementtool "The Foreman".
In der Zwischenzeit ist Katello aber so mächtig geworden, dass eine Foreman-Installation ohne Katello nur wenig Sinn ergibt. Katello bezieht weitere Tools in das Setup mit ein. Nachfolgend ein Überblick, wer eigentlich was macht.
Wer mehrere Linux-Server im Rechenzentrum betreut, braucht ein passendes Systemmanagement-Tool, das standardisierte OS-Installationen ausrollt und angebundene Systeme kontrolliert mit Patches sowie Updates versorgt. Im Kern steht der Gedanke des sogenannten "Standard Operating Environments", also einer definierten OS-Konfiguration, die auf allen physischen und virtuellen Systemen gleich aussieht.
2014 wechselte Red Hat den Unterbau seiner Systemmanagement-Umgebung "Satellite" komplett aus. Wie üblich basiert die aktuelle Lösung auf einer Reihe von Open-Source-Komponenten, die sich dann auch zur Verwaltung verschiedener Linux-Derivate wie Fedora, CentOS Stream, Rocky Linux oder AlmaLinux eignen. Dank eines neuen Paketmanagers lassen sich auch Debian und Ubuntu mit "Katello" [1] verwalten. Strenggenommen ist "Katello" dabei nur ein Plug-in für das Managementtool "The Foreman".
In der Zwischenzeit ist Katello aber so mächtig geworden, dass eine Foreman-Installation ohne Katello nur wenig Sinn ergibt. Katello bezieht weitere Tools in das Setup mit ein. Nachfolgend ein Überblick, wer eigentlich was macht.
Der "Vorarbeiter" The Foreman steuert angebundene Clientsysteme und Virtualisierungsumgebungen, kontrolliert auf Wunsch den DHCP-Server nebst PXE und Kickstart. Er integriert Puppet und/oder Ansible für das Configuration-Management. Der Schwerpunkt verlagert sich zunehmend in Richtung Ansible. Aber ganz ohne Puppet geht es noch nicht, denn die Installation von Foreman und Katello selbst braucht das Tool. The Forman ist auch für die "Foreman-Proxies" zuständig. Mehrere Proxies entlasten in größeren Netzwerken den Basisserver oder fungieren als "Bastion-Hosts" und Router, um der Katello-Installation Zugang zu anderen Netzwerken zu verschaffen.
Pulp liefert das Repository-Management, um die angebundenen Systeme mit Patches und Paketen zu versehen. Die aktuelle Version 3 wurde komplett überarbeitet und modularisiert. Pulp kann jetzt neben RPM- auch DEB-Pakete, Docker-Container-Images oder Python-Libraries verwalten. Praktisch daran: Wer ein isoliertes Netzwerk mit "Airgap" betreibt, kann auf einem Rechner mit Internetanbindung zunächst die Repositories herunterladen und auf einem Wechseldatenträger speichern. Sobald dieser die Sicherheitsprüfungen bestanden hat, importiert die Pulp-Instanz im isolierten Netzwerk die Pakete vom Wechseldatenträger.
Auf den ersten Blick scheint das Tool Candlepin als "Subscription Manager" eigentlich nur in kommerziellen Umgebungen sinnvoll. In reinen Open-Source-Umgebungen hilft es jedoch, Systeme sehr simpel den definierten OS-Paketen und Repositories zuzuweisen und hat daher auch hier seine Daseinsberechtigung.
Das Plug-in Katello fügt zum einen alle oben genannten Tools zu einem Managementtool zusammen. Zum anderen liefert es ein verbessertes Contentmanagement für die von Pulp verwalteten Repositories. Katello führt dazu sogenannte "Content Views" ein. Die funktionieren prinzipiell wie Repository-Snapshots. Synchronisiert ein Anwender beispielsweise den Inhalt der stets aktuellen Rocky-Linux-Distribution in Pulp, könnte er Content-Views für Minor-Versions bauen, also einen Content-View für Rocky 8.4 und einen anderen für Rocky 8.5. Zudem offeriert Katello verschiedene Lifecycle-Environments.
Neue Patches und Updates stellt das Tool beispielsweise zuerst in einem Lifecycle-Environment "Test & QA" bereit. Nachdem der Admin die Patches und Updates dort getestet hat, kann er sie einzeln oder in Gruppen "promovieren", also in das Lifecycle-Environment "Produktion" einfügen. Um weitere Verwirrungen zu vermeiden, sprechen wir im weiteren Verlauf immer von "Katello" als System, auch wenn die erwähnten Dialoge und Funktionen von Pulp, Candlepin oder Foreman stammen.
Katello aufsetzen
Für den Workshop richten wir eine Katello-VM in einer vSphere-Umgebung mit zwei Knoten ein. Als Basis-OS dient Cent-OS Stream 8. Sie können aber auch einen Enterprise-Linux-8-Klon wie Rocky- oder Alma Linux 8 verwenden. Wichtig ist, dass der Katello-Maschine ausreichend RAM zur Verfügung steht. Unter der Haube arbeiten die Katello-Komponenten mit Sprachen wie Java (Tomcat) oder Ruby, die beide für ihren üppigen RAM-Verbrauch bekannt sind. Einige Anleitungen behaupten, dass 8 GByte RAM ausreichen. Das stimmt leider nicht ganz, denn in unseren Testsetups kam es auf 8-GByte-Systemen wiederholt zum Absturz einzelner Prozesse, denen der RAM ausging. Für erste Tests sollten 16 GByte zwar genügen, doch größere Umgebungen fordern mehr.
Auch die Anforderungen an den Massenspeicher fallen bei Katello nicht gerade zimperlich aus. Jede OS-Distribution und -Version belegt in Pulp zwischen 20 und 80 GByte an Daten, gerade weil das Repository-Management für die verschiedenen Content-Views mehrere Versionen ein und desselben RPM/DEB-Pakets vorhalten muss. Da in den Repositories zudem viele kleine Dateien lagern, sollte das Dateisystem des Katello-Servers nicht zu langsam laufen. Eine einzelne große SATA-Platte reicht hier nicht, da muss schon eine SSD oder ein Array aus mehreren Disks her.
Bild 1: Katello verwaltet verschiedene Linux-Versionen. Mit dem Repo-Management Pulp 3 könnte die Lösung auch Debian-Derivate beherbergen.
Setup auf Enterprise Linux
Auf einem frischen Enterprise Linux 8 installieren Sie zunächst die Repositories für Foreman, Katello und Pulp mit dnf install, gefolgt von der jeweiligen URL:
Woher Sie Ansible beziehen, hängt nun von der EL8-Variante ab. Bei CentOS 8 nutzen Sie
dnf install centos-release-ansible-29
Allerdings sollten Sie kein CentOS 8 mehr einsetzen, da es seit dem Jahreswechsel 2021 zu 22 nicht mehr gepflegt wird. Als neuen "Downstream"-Klon von RHEL gibt es sowohl Rocky- als auch AlmaLinux. Das neue CentOS Stream basiert auf der jeweiligen Beta-Version des nächsten RHEL-Minor-Updates und läuft dabei auch sehr stabil. Diese EL8-Varianten benötigen für Ansible dann das EPEL-Repository:
dnf install epel-release
dnf install ansible
Aktivieren Sie die benötigten Versionen von Ruby und PostgreSQL und das PowerTools-Repository:
dnf module reset ruby
dnf module enable ruby:2.7
dnf module reset postgresql
dnf module enable postgresql:12
dnf config-manager --set-enabled powertools
Fehlt nur noch das Installationsprogramm selbst:
dnf install foreman-installer-katello
Stellen Sie im Anschluss noch sicher, dass die Zeitsynchronisation der Maschine läuft, der Hostname korrekt gesetzt ist und sich dieser via DNS auflösen lässt. Dann kann es losgehen mit
foreman-installer --scenario katello \
--foreman-initial-organization <Organisation> \
--foreman-initial-location <Location> \
--foreman-initial-admin-username admin \
--foreman-initial-admin-password admin_password
Passen Sie die Parameter entsprechend Ihrer Wünsche an. Nach Abschluss der Installation läuft auf Ihrem System der Katello-Server sowie der erste Proxy. Prüfen Sie zunächst, ob Sie auf die Web-UI des Systems Zugriff haben. Dann kehren Sie zur CLI zurück und richten Ansible ein. Dazu müssen Sie zunächst die Datei "/etc/ansible/ansible.cfg" wie auf [2] beschrieben anpassen und dann das Plug-in installieren:
Zudem sollten Sie das Remote-Execution-Plug-in hinzufügen. Das kann auf angebundenen Hosts simple Skripte, Playbooks, Ad-Hoc-Kommandos ausführen oder Dienste neu starten:
Über den Foreman-Installer können Sie im laufenden Betrieb auch weitere Plug-Ins installieren und konfigurieren.
Basissetup per GUI oder CLI
Zurück in der UI geht es erst einmal an das Basissetup. Wer lieber die Kommandozeile nutzt, kann zudem alle hier beschriebenen Funktionen auch über das "hammer"-Kommando steuern. Um diesen Artikel jedoch nicht mit langen CLI-Listings zu fluten, bleiben wir bei der Web-UI.
Als Erstes richten Sie ein "Product" ein, also eine Linux-Distribution, die ihre Clients verwenden. Für unser Testsetup nutzen wir dafür den EL-Klon AlmaLinux. Das Basisverzeichnis des Alma-Repositories finden Sie unter [3]. Von dort laden Sie den GPG-Key "RPM-GPG-KEY-AlmaLinux" herunter. Wechseln Sie in der Foreman-UI auf "Inhalt / Content Credentials / Create Credential" und legen Sie den Schlüssel "Alma" als Typ "GPG-Key" mit dem Inhalt der heruntergeladenen Schlüsseldatei an. Dann erzeugen Sie das passende Produkt via "Inhalt / Products / Create Product" wieder mit dem Namen "Alma" und dem zuvor angelegten GPG-Schlüssel. Kehren Sie zurück in die Products Ansicht und wählen Sie "Repo Discovery" aus.
Geben Sie nun den Repository-Typ "Yum Repository" an und fügen Sie die oben genannte URL als "URL to Discover" ein. Die Felder "Username" und "Password" bleiben leer. Klicken Sie auf "Discover" und Foreman ermittelt die verfügbaren Repositories. Für ein grundlegendes Setup mit 64-Bit-Intel-Hosts und -VMs genügen erst einmal die Repositories "/8/BaseOS/x86_64/os/" und "/8/AppStream/x86_64/os/". Klicken Sie die entsprechenden Kästchen an und wählen Sie "Create Selected".
Die Repositories tauchen nun in Ihrem Produkt auf und können via "Sync Now" auf The Foreman heruntergeladen werden. Später erzeugen Sie dazu einen Sync-Plan, der die von Ihnen verwendeten Repositories regelmäßig abgleicht. Auf Wunsch synchronisieren Sie noch weitere Repositories wie EPEL in Ihre Katello-Installation. Selbstverständlich dürfen Sie auch Ihre eigenen Repositories generieren und mit selbst gebauten RPM-Paketen befüllen.
Content-Views und Lifecycle-Environments
Ein Content-View besteht aus einem oder mehreren Respositories und lässt sich versionieren. Synchronisiert Katello ein Repositoriy, stellt es die neuen Pakete dabei den angebundenen Clients nicht automatisch zur Verfügung. Hier muss der Anwender zuerst die neue Version in den View und das passende Lifecycle-Environment "promoten". Die Idee dahinter ist, dass Administratoren neue Pakete erst einmal eigenen Tests auf nicht-kritischen Systemen unterziehen.
Produktive Rechner arbeiten beispielsweise mit der Version 1 eines Content-Views. Änderungen fügen Sie in eine neue Version 2 ein und übergeben diese aber zunächst nur einem "Test"-Environment. Damit stehen sie den Testsystemen zur Verfügung, aber noch nicht der Produktion. Nach erfolgten Tests "promovieren" Sie die Version 2 später in das Environment "Produktion", und erst dann erhalten die unternehmenskritischen Rechner und VMs ihre Updates. Im Basissetup kennt Katello erst einmal nur eine "Library". Nutzer können mittlerweile auch ohne Lifecycle Environments arbeiten und Clients einfach direkt an der "Library" registrieren. Für Tests genügt die Library, in einem Rechenzentrum sollten der Bibliothek mindestens ein "Test"-Environment und danach die "Production" folgen.
Nachdem Katello die Repositories synchronisiert hat, erstellen Sie Content-Views: In der Praxis bauen Administratoren gerne je einen eigenen View für jedes Repository und fügen diese später unter einem "Composite View" zu einer Sammlung zusammen. Somit lassen sich Composites mit verschiedenen Versionen der darunterliegenden Views bauen. Für unser erstes, simples EL-Setup genügt es, die beiden Repositories "AppStream" und "BaseOS" einfach einem View zuzuordnen. Steht der View, müssen Sie eine Version in das Lifecycle-Environment promoten, in unserem Fall also Version 1.0 in die Library.
Damit sich verwaltete Systeme so einfach wie möglich an Katello anbinden können, erstellen Sie einen "Activation Key". Diesem ordnen Sie ein Environment – im Beispiel also "Library" und den zuvor erstellten Content-View – zu. Ein Host-Limit brauchen Sie nicht, wohl aber eine Subskription. Da Sie hier reine Open-Source-Projekte verwalten, verfügen Sie natürlich über unbegrenzte AlmaLinux-Subskriptionen. Die Zahlen der belegten Abonnements können Sie aber später in Reports verwenden, beispielsweise wenn Sie einzelnen Abteilungen die IT-Dienste in Rechnung stellen wollen.
Managementclient installieren
Um nun ein bereits laufendes AlmaLinux-System über das Katello-Setup zu verwalten, müssen Sie dort zunächst den Client installieren. Das benötigte RPM erzeugt Foreman automatisch und stellt es unter der URL "http://<foreman-Server>/pub/katello-ca-consumer-latest.noarch.rpm" zur Verfügung. Die Installation richtet den Subscription-Manager ein und konfiguriert den Foreman-Proxy als Zielsystem. Anschließend fügen Sie dem Client die passende Subskription über den Activation-Key hinzu:
subscription-manager register --org="Organisation" --activationkey="Name des Keys"
Ab sofort versucht der Client dann nicht mehr, Updates aus dem Internet zu laden, sondern kontaktiert nur noch den Katello-Server.
Neue Maschinen einrichten
Katello kann Betriebssysteme über verschiedene Technologien ausrollen. Die klassische Ferninstallation erfolgt über einen PXE-Netzwerkstart und Kickstart-Dateien. Das wiederum setzt aber voraus, dass der Foreman/Katello-Proxy selbst im zugehörigen Subnetzwerk als DHCP/ TFTP-Server auftritt – oder über ein passendes Plug-in mit dem vorhandenen DHCP/PXE-Server kommunizieren kann. Zum einen haben viele Administratoren bereits eine funktionierende DHCP/PXE-Umgebung laufen, zum anderen kommt PXE heute eigentlich nur noch zum Ausrollen physischer Systeme zum Einsatz.
In virtualisierten Umgebungen können Administratoren auf das aufwändige LAN-Boot-Setup von Katello verzichten und neue Maschinen einfach aus VM-Vorlagen klonen, was zügiger und einfacher funktioniert. Wer dann doch mal einen physischen Server mit Katello einrichten möchte, startet dort einfach das sogenannte "Foreman Discovery Image" über seine bestehende PXE-Infrastruktur. Dieses Mini-OS sammelt die Konfiguration des gestarteten Hosts ein und meldet diese an den Foreman/Katello-Server.
Der neue Rechner taucht dann in der Liste der "Discovered Hosts" auf. Sie müssen den Rechner dann nur noch einer zuvor definierten Host-Group zuordnen, um damit die Neuinstallation anzustoßen. The Foreman verwendet hierzu das Tool "kexec", das auf einem laufenden System einen neuen Kernel startet. Damit leitet es direkt die Kickstart-Installation ein, ohne den Rechner via BIOS/UEFI und PXE neu starten zu müssen.
Für das Testsetup erstellen Sie eine AlmaLinux-VM mit der Paketauswahl "Minimal" auf Ihrer vSphere-Umgebung. Die Version des Templates darf nicht höher als die Version des zu verwendenden Content-Views sein. Richten Sie die VMware-Tools ein, löschen Sie die "/etc/ssh/ssh_host*"-Schlüssel und fügen Sie die benötigten Benutzer und Public-Keys in die Template-VM ein. Die Katello-Maschine wird sich als "root"-User anmelden. Den passenden Public-Key gibt es auf dem Foreman-Proxy unter "https:// <foreman-URL>:9090/ssh/pubkey". Fügen Sie diesen im Tempalte in die Datei "/root/ .ssh/authorized_keys" ein. Dann fahren Sie die VM herunter und erzeugen daraus eine Vorlage via "Klonen / Als Vorlage in die Bibliothek klonen" im vSphere-Client. Damit Katello eine vSphere-Umgebung steuern kann, benötigt er das passende Foreman-Plug-in:
dnf install foreman-vmware
Nach einem Neustart des "foreman"-Diensts können Sie in der UI die vSphere-Verbindung einrichten. Gehen Sie dazu in "Infrastruktur / Rechnerressource" und fügen Sie Ihre vSphere-Umgebung mit dem Provider "VMware" und den Admin-Credentials des vCenter-Servers ein. In der fertigen Ressource gehen Sie auf den Reiter "Abbilder" und "Abbild Erstellen". Im folgenden Dialog qualifizieren Sie das Image. Der Tab "Abbild" lässt Sie das zuvor erstellte Alma-Template auswählen. Im Anschluss können Sie via "Hosts / Host erstellen" eine neue VM bauen lassen. Wählen die dazu im Dialog unter "Bereitstellen auf" Ihre vSphere-Umgebung aus. Das Template erscheint nun im Tab "Betriebssystem" unter "Breitstellungsmethode / Abbildbasierend", wenn Sie die passende Architektur und AlmaLinux als OS auswählen.
Bild 2: Über das Plug-In Remote-Execution startet der Administrator auf einzelnen oder Gruppen von Hosts Skripte oder, wie im Bild, ein Ansible-Playbook.
Fernwartung
Das in Katello als Plug-in integrierte Ansible-System funktioniert nicht wie ein vollwertiger AWX-Server mit komplexen Templates und Workflows. Vielmehr stellt es "System Roles" bereit, die Foreman/Katello dann individuellen Hosts oder Host-Gruppen zuordnet. Eine Reihe von Basisrollen liefert das Grundsetup mit. Bevor Sie diese nutzen können, müssen Sie sie in den Proxy importieren. Das passende Menü finden Sie unter "Konfigurieren / Rollen" und dann "Import from <Foreman-Server>". Möchten Sie eigene Rollen in Katello nutzen, kopieren Sie diese in das Verzeichnis "/etc/ansible/roles" auf dem Foreman-Server und führen Sie den Import erneut aus. Benötigen Ihre Rollen Variablen, erstellen Sie diese unter "Konfigurieren / Variablen".
Um etwa einen Datenbankserver zu generieren, erstellen Sie eine PostgreSQL-Rolle, die die passenden Pakete einrichtet. Die individuelle Konfiguration wie DB-User und Passwort legen Sie in den Ansible-Variablen ab. Brauchen Sie nun einen neuen DB-Server, weisen Sie im Dialog "Neuen Host anlegen" Ihrem Template die passende PostgreSQL-Rolle mit den Parametern zu. Mit all diesen Informationen bauen Sie nun Hostgruppen für ihre Standard-Environments. Eine Host-Gruppe heißt dann beispielsweise "Postgress-Datenbank". Diese besteht aus dem Basis-OS AlmaLinux in der Version 8.5, der Zielplattform vSphere, dem Rollout aus dem Alma-Template und der Ansible-Rolle für die PostgreSQL-Installation und -Konfiguration. So erzeugen Sie aus dem Katello-Baukasten weitere Gruppen für alle Systeme, die Sie in Ihrem Rechenzentrum ausrollen und verwalten wollen.
Fazit
Das Gespann aus The Foreman und Katello mit den zusätzlichen Diensten liefert ein mächtiges, wenngleich komplexes Toolset zur Systemverwaltung von Linux-Rechnern und VMs im Rechenzentrum. Der Einstieg ist aufwendig, doch wenn alle Basiparameter, Rollen und Views stehen, vereinfachen sich Rollout und Verwaltung neuerer Systeme erheblich.