Systemverwaltung mit Foreman/Katello - Teil 1: Einstieg und Installation
In den letzten Jahren habe ich mich vor allem mit der Verwaltung von Linux-Systemen mit Spacewalk bzw. Red Hat Satellite 5 beschäftigt. Aufgrund der Tatsache, dass letzteres vom Hersteller abgekündigt wurde, habe ich mich intensiv mit Migrationen zum Nachfolgeprodukt beschäftigt.
2008 wurde Spacewalk als Upstream-Projekt zu Red Hat Network Satellite veröffentlicht. Seither hat sich viel getan, was vor allem den zahlreichen Entwicklern - auch innerhalb der Community und anderer Firmen (wie beispielsweise SUSE) - zu verdanken ist. Seit 2014 stagniert jedoch zumindest Red Hat-seitig die Entwicklung von Spacewalk - der Grund ist die generelle Verfügbarkeit von Red Hat Satellite 6, dem Nachfolgeprodukt von Red Hat Satellite 5.
Im Gegensatz zu Red Hat Satellite 5, basiert die neue Hauptversion vor allem auf Foreman und Katello - und somit gestaltete sich der Umstieg für mich ein wenig komplexer, da ich bisher mit beiden Tools noch nicht gearbeitet hatte.
Mit diesem Artikel starte ich eine kleine Serie, die den Einstieg in Foreman und Katello erleichtern soll. Dieser erste Teil dreht sich um die Installation der Software.
Was ist Foreman?
Foreman ist eine Lifecycle-Management-Suite - das bedeutet, es deckt sämtliche Aufgaben ab, die von der Erstellung über die Konfiguration bis hin zur Überwachung eines Systems anstehen. Dabei ist es gänzlich irrelevant, ob es sich um physische oder virtuelle Systeme oder Docker-Container handelt. Physische Systeme können also einfach aus dem Netzwerk heraus booten und automatisiert und standardisiert mithilfe von Foreman installiert werden. Durch Plugins können zahlreiche Hypervisor- und Cloud-Plattformen angesprochen werden, beispielsweise:
- VMware
- oVirt
- Amazon EC2
- Microsoft Azure
- XEN
- OpenStack, OpenNebula
Insbesondere durch die Unterstützung von OpenStack und OpenNebula lassen sich Maschinen in Hybrid Cloud-Szenarien verwalten.
Zur Konfigurationsverwaltung kommt standardmäßig Puppet zum Einsatz - über Plugins lassen sich jedoch auch Chef, Salt oder Ansible verwenden (Ab Red Hat Satellite 6.3 wird auch Ansible angeboten, andere Plugins werden nicht unterstützt). Über das Web-Frontend lassen sich entsprechende Konfigurationsregeln erstellen und die Übereinstimmung der Systemlandschaft darstellen.
Foreman ist mandantenfähig - sämtliche Objekte (Hosts/Hostgruppen, Benutzer/Benutzergruppen, Netzwerke,...) werden prinzipiell per Organization und Standort differenziert. Sämtliche Zugriffe werden über eine rollenbasierte Konfiguration gesteuert. Das ermöglicht auch die Abbildung großer Infrastruktur-Konzepte. Hinsichtlich der Authentifizierung können neben Microsoft Active Directory Domain Services werden auch sämtliche LDAP-fähigen Quellen unterstützt - beispielsweise FreeIPA.
Erwähnenswert ist die gut dokumentierte RESTful API von Foreman, der die große Anzahl an Erweiterungen zu verdanken ist. Mit hammer
gibt es eine sehr mächtige Kommandozeilen-Schnitstelle für Foreman.
Foreman verfügt über ein Dashboard, welches zahlreiche Infrastruktur-Informationen auflistet - beispielsweise:
- Host-Konfigurationsübersicht
- Letzte Aktivitäten
- Aufgaben- und Fehler-Übersicht
- Kürzlich importierte Patches
Darüber hinaus verfügt Foreman über Audit-Funktionalität, die es erlaubt durchgeführte Änderungen - vor allem in den Konfigurationen verwalteter Systeme - nachzuvollziehen. Insbesondere in größeren Teams und Systemlandschaften ein sehr wichtiges Feature.
Was ist Katello?
Katello erweitert Foreman um Content Management-Funktionalität, indem es im Wesentlichen die Software-Projekte Pulp und Candlepin vereint.
Pulp dient zur Synchronisation von RPM-Paketen, Docker-/Puppet-Modulen und OSTree-Inhalten über Repositories. Darüber hinaus ist die Software in der Lage Errata-Informationen zu importieren. Ein Erratum erweitert eine Paket-Aktualisierung um wichtige Informationen, wie beispielsweise:
- Typisierung (Bugfix, Security-Fix, Feature Enhancement)
- Zusammenfassung und detaillierte Beschreibung
- Verweise auf CVEs (Common Vulnerabilities and Exposures)
Prinzipiell werden lediglich RPM-basierte Distributionen unterstützt. An einer Debian-Unterstützung wird derzeit gearbeitet, von "nutzbar" kann hier aber noch nicht die Rede sein - Paketformate anderer Linux-Distributionen werden nicht unterstützt.
Candlepin dient zur Verwaltung von Subskriptionen und Kanal-Berechtigungen - innerhalb Katello wird es dazu verwendet, die über Pulp importierten Software-Quellen registrierten Systemen zugänglich zu machen.
Ein weiteres Feature von Katello ist, dass sämtliche Inhaltsbestände in Form von Snapshots eingefroren werden. So lassen sich verfügbare Updates und Puppet-Module in mehreren Zyklen über die gesamte Systemlandschaft evaluieren und verteilen - beispielsweise nach dem bekannten Drei-Systemlandschaftskonzept: Entwicklung, Test/QA und Produktion. Bevor die neuesten Patches auf produktiven Maschinen installiert werden können, kann man so vorab Tests auf Entwicklungs- und Test-Maschinen durchführen.
Aufbau
Im Wesentlichen besteht eine Foreman-Installation aus einer Hauptinstanz und mindestens einem Smart Proxy (in Red Hat Satellite 6 auch Capsule Server genannt). Ein Smart Proxy ist eine Foreman-Instanz, die im Wesentlichen die folgenden Dienste anbieten kann:
- Puppet Server bzw. Puppet CA
- Pulp-Server
- TFTP
- DNS
- DHCP
- Out-of-band Management
Zusätzliche Smart Proxies werden vor allem bei größeren Systemlandschaften eingesetzt - um mal einige Einsatzgebiete zu nennen:
- Verringern von Bandbreiten-Problemen bei verteilten Systemlandschaften (z. B. Vorhalten von RPM-Dateien in dezentralen Standorten)
- Verteilen von Netzwerk-Services aufgrund des Netzwerk-Designs (z. B. eigene DHCP-Server pro Standort)
- Verringern der Last auf dem Foreman-System (durch das Bereitstellen lokaler Produktinhalte pro Standort)
Bei kleineren Netzen kann man sich die Installation von zusätzlichen Smart Proxies bzw. Capsule Servern in der Regel ersparen. Bei der Installation der Hauptinstanz wird automatisch ein Smart Proxy auf dem gleichen Host installiert. Nicht alle Services sind zwingend erforderlich. DHCP und DNS können beispielsweise von anderen Systemen übernommen werden - TFTP wird nicht benötigt, solange keine Bare-Metal-Kickstarts erfolgen.
Anforderungen
Für Foreman und Katello müssen die folgenden Anforderungen gegeben sein:
- 2 CPUs
- mindestens 8 GB RAM (12 GB empfohlen)
- 30 GB pro angebotenem Betriebssystem
- 10 GB Cache für Repository-Synchronisationen (
/var/spool/squid
)
Es ist sinnvoll, dedizierte Dateisysteme für die folgende Ordner zu erstellen:
/var/lib/mongodb
- MongoDB-Datenbank (Software Content-Datenbank)/var/lib/pulp
- RPM-Pakete/var/lib/pgsql
- PostgreSQL-Datenbank (Hauptdatenbank)/var/spool/squid
- Proxy-Cache
In der Installationsanleitung von Red Hat Satellite 6 wird davon abgeraten, GFS2, ext4 oder NFS für die Applikations-Dateisysteme einzusetzen. Als Argument werden inode- und Performance-Beschränkungen genannt.
Foreman/Katello kommuniziert über die folgenden Netzwerk-Ports:
- http/https zur Administration und Kickstart-/Paket-Download
- tcp/5647 zur Client-Steuerung
- tcp/9090 für Smart Proxy-Kommunikation
Installation
Prinzipiell werden von Foreman derzeit die folgenden Linux-Distributionen zur Installation unterstützt:
- EL7 (Red Hat Enterprise Linux, CentOS, Scientific Linux)
- Debian 8
- Fedora 24
- Ubuntu 14.04 und 16.04
Für RPM-basierte Distributionen gibt es YUM-Repositories für die x86_64-Architektur - für Debian-basierte Software-Quellen gibt es darüber hinaus auch i386-, armhf- und aarch64-Pakete.
Soll jedoch auch Katello verwendet werden, muss bedacht werden, dass die Software-Pakete hierfür lediglich für EL7 und die x86_64-Architektur vorkompiliert erhältlich sind. Abweichende Installationen erfordern eine manuelle Übersetzung.
Je nach Dateisystem macht es Sinn, LVM einzusetzen:
1# pvcreate /dev/sdb
2# vgcreate vg_katello /dev/sdb
3# lvcreate --name lv_squid --size 10G vg_katello
4# lvcreate --name lv_mongodb --size 10G vg_katello
5# lvcreate --name lv_pulp --size 30G vg_katello
6# lvcreate --name lv_pgsql --size 10G vg_katello
7# mkfs.xfs /dev/mapper/vg_katello-lv_squid
8# mkfs.xfs /dev/mapper/vg_katello-lv_mongodb
9# mkfs.xfs /dev/mapper/vg_katello-lv_pulp
10# mkfs.xfs /dev/mapper/vg_katello-lv_pgsql
Die neuen Dateisystem müssen noch in der Datei /etc/fstab
eingetragen werden, damit diese nach einem Boot zur Verfügung stehen:
1# vi /etc/fstab
2...
3
4/dev/mapper/vg_katello-lv_squid /var/spool/squid xfs defaults 1 2
5/dev/mapper/vg_katello-lv_mongodb /var/lib/mongodb xfs defaults 1 2
6/dev/mapper/vg_katello-lv_pulp /var/lib/pulp xfs defaults 1 2
7/dev/mapper/vg_katello-lv_pgsql /var/lib/pgsql xfs defaults 1 2
8
9ESC ZZ
Anschließend werden die benötigten Verzeichnisse erstellt, der SELinux Dateisystem-Kontext wiederhergestellt und die Partitionen eingehängt:
1# mkdir -p /var/lib/{mongodb,pulp,pgsql} /var/spool/squid
2# restorecon -Rv /var/lib/{mongodb,pulp,pgsql} /var/spool/squid
3# mount -a
Vor der Installation empfiehlt es sich, die benötigten Ports in der Firewall zu öffnen:
1# lokkit -s ssh
2# lokkit -s http
3# lokkit -s https
4# lokkit -p 5647:tcp
Soll das System auch weitere Smart-Proxys benutzen, muss ein weiterer Port geöffnet werden:
1# lokkit -p 9090:tcp
Die benötigten Software-Repositories variieren je nach Linux-Distribution und Version - detaillierte Informationen finden sich in der offiziellen Dokumentation. Für EL7 müssen die folgenden Befehle eingegeben werden:
1# yum -y localinstall http://fedorapeople.org/groups/katello/releases/yum/3.3/katello/el7/x86_64/katello-repos-latest.rpm
2# yum -y localinstall http://yum.theforeman.org/releases/1.14/el7/x86_64/foreman-release.rpm
3# yum -y localinstall https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
4# yum -y localinstall http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
5# yum -y install foreman-release-scl
Die Installation der benötigten Software-Pakete erfolgt nun mit:
1# yum -y install katello
Vor der Installation kann es nicht schaden, einen Blick in die Hilfe des Installationsprogramms zu werfen. Der Installationsprozess ist vollautomatisiert und es gibt zahlreiche Schalter, um die Installation zu steuern:
1# foreman-installer --scenario katello -h
Für mich waren die Schalter --foreman-initial-organization
und --foreman-initial-location
interessant. Sie steuern den Namen der ersten angelegten Organisation und Lokation - so können die Standard-Werte (Default organization, Default location) überschrieben werden.
Bevor die Installation ausgeführt wird, empfiehlt es sich einen Snapshot bzw. ein Backup zu erstellen. So kann man im Fehlerfall auf diesen Standpunkt zurückkehren und muss sich nicht mit Debugging herumärgern.
Nach der Installation wird das Initialpasswort des Administrator-Kontos ausgegeben - es empfiehlt sich, dieses direkt zu ändern:
1# foreman-installer --scenario katello --foreman-initial-organization "Stankowic development" --foreman-initial-location "Homelab"
2...
3 Success!
4 * Katello is running at https://st-katello01.stankowic.loc
5 Initial credentials are admin / X!g1327z_rulz
6 * To install additional capsule on separate machine continue by running:
7
8 capsule-certs-generate --capsule-fqdn "$CAPSULE" --certs-tar "~/$CAPSULE-certs.tar"
9
10 The full log is at /var/log/foreman-installer/katello.log
Die Foreman-Weboberfläche kann nun über die URL https://hostname-oder-FQDN aufgerufen werden:
Der nächste Teil dieser Artikel-Serie wird die Schwerpunkte Produkte, Repositories und Content Views thematisieren.