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.

Red Hat Satellite Lifecycle

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.

Red Hat Satellite 6 Design

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 Login

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 Dashboard

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.

Katello Erratum

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.

Foreman Lifecycle Environments

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.

Beiträge in dieser Serie

Übersetzungen: