Start presentation

Slide 1: Konfigurationsmanagement mit cfengine

Christopher Huhn
C.Huhn@gsi.de

Slide 2: 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

Slide 3: 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

Slide 4: 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)

Slide 5: 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

Slide 6: 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

Slide 7: 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"

Slide 8: 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::

Slide 9: 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.

Slide 10: 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 11: 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 12: 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 13: 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 14: 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 15: 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 16: 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 17: 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 18: 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 19: 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 20: 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 21: Meckerkasten/Wunschliste

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

Slide 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

Referenzen

  • Set ALLOWTOPICCHANGE = Christo
  • Set ALLOWTOPICVIEW = *

-- Christo - 22 Oct 2007

This topic: Personalpages > WikiUsers > ChristopherHuhn > ChristosTalks > CfengineTalk20071127
Topic revision: 2022-02-21, ChristopherHuhn
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)