Konfigurationsmanagement mit cfengine

Christopher Huhn
C.Huhn@gsi.de

Hintergrund

  • ITIL:
    • Configuration Management
      • Konfigurationseinheiten (CIs) und -datenbank (CMDB).
    • Change Management
      • (Management-) Prozesse zur Freigabe und Durchführung von Änderungen.
    • Idealerweise gemeinsam implementiert.

  • Seit 2 Jahren im GSI-Einsatz (Sarge-Upgrade)
  • Ablösung für selbstentwickelte Lösung
    • Shell Scripts
    • Skalierungsprobleme

Hintergrund

  • http://www.iu.hio.no/~mark/ Mark Burgess - One man show
    • Professor für Netzwerke und Systemadministration an der Universität Oslo
    • Systemadministration an der Osloer Physikfakultät
    • PhD in theoretischer Physik

  • cfengine
    • seit 1993
    • Version 2 seit 2002
    • fortlaufendes Forschungsprojekt
    • Open Source
    • Plattformübergreifend: UNIX, Windows (Cygwin), MacOS
    • Läuft auf > 1000000 Rechnern weltweit

Konzepte

  • Die Entropie der Systemkonfiguration nimmt durch Benutzer-Interaktion beständig zu
    • cfengine als "Immunsystem" des Rechners

  • Sprache für Konfigurationsrichtlinien
    • (größtenteils) deklarativ, nicht prozedural, idempotent
      • beschreibt den Sollzustand eines Systems
    • Fokus auf guter Lesbarkeit

  • Agent setzt die Richtlinien um
    • bearbeitet ausschließlich den Knoten auf dem er läuft
    • keine unmittelbare Steuerung durch zentralen Server
  • Das System konvergiert zum beschriebenen Sollzustand (Fixpunkt)

Kernfunktionalität

  • Interpreter cfagent
  • /etc/cfengine/cfagent.conf
  • Gestartet durch cfexecd oder cron
  • Zufällige gestreute Wartezeit beim Start
  • Stets zwei Durchläufe (Two pass)

  • GSI: zweimal stündlich gestartet durch cfexecd

In medias res

Beispiel: Verteilung der SSH-Server-Konfiguration mit der Aktion copy:

copy:

   ${configspace}/sshd_config
      dest=/etc/ssh/sshd_config




Problem: Änderungen werden nicht sofort aktiv, sondern erst nach Neustart des SSH-Servers

Klassen

Aktionen können Klassen definieren.
Die Durchführung von Aktionen kann auf bestimmte Klassen beschränkt werden.

Beispiel: SSH-Server nach Änderungen neustarten:
copy:
      ${configspace}/sshd_config
         dest=/etc/ssh/sshd_config
define=ReloadSSH
shellcommands: ReloadSSH:: "/usr/sbin/invoke-rc.d ssh reload > /dev/null"

Klassen

  • Vorgegebene Basisklassen (hard classes):
    • Hostname, IP-Adresse: lxg0815, 140_181_70_60
    • OS: linux, debian, debian_4_0
    • Datumswerte: Friday, Yr2007, Hr09, Min15_20
    • ...

  • Verknüpfen durch Boolsche Operationen:
    • und : class1.class2::
    • oder : class1|class2::
    • nicht : !class1::
    • Gruppierung : !(class1|class2) = class1.!class2

Beispiele:
  • Yr2007.November.Day27.Hr11.Min30_35::
  • debian_4_0|linux_i686_2_6_18_2_686_bigmem::

Klassen: groups

Im Abschnitt groups können neue Klassen definiert werden.
groups:
   dns = ( lxdns1 lxdns2 )
   batchfarm = ( !HostRange(lxb,000-999) )

Dynamische Klassen:
  • Definition nach Booleschem Check:
      standalone = ( '/usr/bin/test -w /' ) 

  • Klassendefinition aus Programm-Ausgabe:
control:
      AddClasses = ( ExecResult(/gsiroot/sbin/cfe-mainboard) )

Diese Definitionen können rekursiv sein.

Zentralisierung

Problem: Wie kommen die Konfigurationsdateien auf die einzelnen Maschinen:

copy:
   any::
      ${configspace}/sshd_config
         dest=/etc/ssh/sshd_config
         define=ReloadSSH
server=cfmaster.gsi.de

  • Server-Dämon cfservd
  • Beidseitige Authentifizierung mit SSL-Zertifikaten (mutual trust)

Slide 10 of 22

Zentralisierung: bootstrapping

  • cfengine installieren und starten
  • /etc/cfengine/update.conf holen oder erzeugen.
    • Enthält Richtlinien zum Kopieren der cfengine-Konfiguration von Master
      • Vor der Anwendung von cfagent.conf.

  • "demokratisch" - pull basiertes Update

  • GSI:
    • FAI installiert cfengine und update.conf
    • Server holt Konfiguration automatisch aus dem SVN-Repository
    • Gleiche Richtlinien auf allen Maschinen
      • Klassen steuern, welche Richtlinien wo aktiv werden.
    • Monitoring mit cfshow --last-seen (-> Nagios)

Slide 11 of 22

Aktion: editfiles

Mit editfiles ist das Editieren von Dateiinhalten möglich:

editfiles:
   { /etc/ssh/sshd_config
      ReplaceFirst ".*X11Forwarding no" 
         With "X11Forwarding yes" 
      ReplaceFirst "PasswordAuthentication no" 
         With "PasswordAuthentication yes"
      DefineClasses "RestartSSH"
   }

AppendIfNoSuchLine fügt fehlende Zeilen an.
CommentLinesMatching kommentiert Zeilen aus, die zum gegebene Muster passen.
EmptyEntireFilePlease leert die Datei komplett.
DeleteLinesMatching löscht Zeilen, die auf das gegebene Muster passen.

Slide 12 of 22

Aktion: editfiles

Mit BeginGroup...EndGroup ist eine Fallunterscheidung und Klammerung möglich:

{ /etc/sudoers

   BeginGroupIfNoLineMatching "User_Alias ADMINS=.*"

      WarnIfNoLineMatching "# User alias specification"
      LocateLineMatching "# User alias specification"
      InsertLine "User_Alias ADMINS=christo,karin,schoen,shaller,troth"

   EndGroup
}

Möglicherweise der mächtigste Aktionstyp von cfengine.

Slide 13 of 22

Aktion: packages

Installation von Paketen:

packages:
   desktop::
      gsi-desktop
         version=1
         cmp=ge
         action=install

GSI:
  • Es werden ausschließlich Meta-Pakete installiert
    • Automatisch aus den FAI-Paketlisten erzeugt
    • Synchronisation zwischen Neuinstallationen und bestehenden Maschinen

Slide 14 of 22

Aktion: processes

Kann zur Überwachung von Prozessen eingesetzt werden:
processes:
   !reboot::
      "cfexecd" restart 
         "/usr/sbin/invoke-rc.d cfengine2 start > /dev/null"
         inform=true

      "syslog-ng" restart 
         "/usr/sbin/invoke-rc.d syslog-ng start > /dev/null"
         inform=true

      ...

   !reboot.debian_3_1::
      "ntpd" restart 
         "/usr/sbin/invoke-rc.d ntp-server start > /dev/null"
         inform=true

Slide 15 of 22

Weitere Aktionen

  • files : Datei-Besitzer und -Berechtigungen ändern/reparieren,
    Prüfsummencheck (tripwire "für Arme")
  • control : Variablendefinition, Konfiguration von cfengine
  • disable : verschiebt Dateien
  • disks : überwacht Plattenplatz
  • links : wartet Symlinks
  • tidy : räumt auf

Weitere Aktionstypen (bei GSI nicht im Einsatz):
  • acl, binservers, broadcast, mountables, ...

Slide 16 of 22

Aktion: filter

Zur Definition von Auswahlkriterien.
Können dann in anderen Aktionen (copy, files, processes, tidy) verwendet werden.

filters:
   { no_svn_dirs
      NameRegex: ".*/\.svn(/.*)?$"
      Result: "!NameRegex"
   }

copy:
   /src
      dest=/dest
      r=inf
      filter=no_svn_dirs

Slide 17 of 22

Anomalie-Erkennung

  • Zusätzlicher Dämon cfenvd
    • Überwacht bestimmte Netzwerkports, Anzahl der User, Load, usw.
    • Berechnung von Durchschnitt und Standardabweichung
      • cfenvd lernt die Normalwerte von selbst
    • Wöchentliche Periode einbezogen

  • In cfengine werden entsprechende Klassen definiert:
    • www_in_high_dev2
    • LoadAvg_low_anomaly

  • Außerdem wird die Verteilung der Verbindungen auf Kommunikationspartner untersucht ("Entropy"):
    • entropy_smtp_in_low

  • Alarme können bspw. über shellcommands ausgelöst werden:

   LoadAvg_high_anomaly::
      "/bin/echo Load anomaly on $(host) value $(value_loadavg) \\ 
average $(average_loadavg) +- $(stddev_loadavg)"

Slide 18 of 22

cfetool

Erweiterung von cfenvd
  • Anlehnung an rrdtool
  • Überwachung beliebiger Messwerte möglich
  • Beachtung täglicher, wöchentlicher und jährlicher Perioden möglich
  • analoge Klassendefinition in cfengine

Slide 19 of 22

Konkurrenz

  • Handarbeit (ad-hoc Administration) - skaliert nicht
  • Shell-Skripte
  • http://reductivelabs.com/trac/puppet/ Puppet
    • "next generation cfengine"
    • Operating System Abstraction Layer (OSAL)
  • http://trac.mcs.anl.gov/projects/bcfg2/ bcfg2
    • "Kongruenz" statt Konvergenz
    • Intelligenz größtenteils im zentralen Server, Clients möglichst unselbständig.
  • Quattor (CERN)
    • Bestandteil von Elfms (Extremely large fabric management system)
      • zusammen mit Lemon und Leaf
    • Beschreibungssprache PAN
    • Konfigurationsdatenbank CDB

  • u.v.m.

Slide 20 of 22

Meckerkasten/Wunschliste

  • Einstiegshürde
  • Syntax gewöhnungsbedürftig
  • Bessere Übersichtlicht bei Definition/Management von Klassen
    • Dokumentationserzeugung
  • Bessere Integrationsfähigkeit mit anderen Tools (API)

Slide 21 of 22

Fazit/Ausblick

  • Die Kernfunktionen von cfengine machen das Richtige
  • Besondere Stärke ist die Flexibilität des Systems
  • Wesentlicher Bestandteil unseres Infrastruktur-Managements
  • cfengine macht den Betrieb einer Farm dieser Größe und Diversität (Heterogenität) mit der vorhandenen Manpower überhaupt erst möglich.


  • Cfengine 3 - Im nächsten Release das Paradies

Slide 22 of 22

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding GSI Wiki? Send feedback | Legal notice | Privacy Policy (german)