Select Page

NETWAYS Blog

Testumgebungen leicht gemacht mit Vagrant

Vagrant Logo
Egal ob Softwareentwickler oder Systemadministrator, wer in der IT arbeitet kennt sicherlich den Satz “Bei mir funktioniert das!”. Damit man sich nicht ständig über verschiedene Versionen, Betriebssysteme und Einstellungen ärgert, wäre es schön, wenn jeder im Team die gleiche Entwicklungsumgebung verwenden kann. Hier kommt Vagrant ins Spiel.
Mit Vagrant kann man schnell und einfach virtuelle Maschinen starten und automatisch konfigurieren. Dabei werden alle wichtigen Einstellungen in einer zentralen Textdatei (Vagrantfile) definiert. Man beginnt in der Regel mit einem Basisimage mit vorinstalliertem Betriebssystem. Auf www.vagrantbox.es findet sicher jeder etwas passendes. Noch kurz das Netzwerk konfigurieren, Pakete installieren, Konfigurationsdateien über Shared Folders einbinden und die VM mit Vagrant starten und fertig ist die Testumgebung. Und das alles in einer kleinen Textdatei mit welcher der Kollege exakt die gleiche Umgebung in wenigen Minuten gestartet hat. Ist man erstmals angefixt entstehen schnell ganze Multitier-Testumgebungen zum Beispiel für Puppet, OpenNebula und Foreman. Und für wen virtuelle Maschinen ein alter Hut sind, Vagrant kann auch leichtgewichtige Docker Containern starten. Natürlich findet man viele Informationen dazu online oder aber man besucht unseren Vagrant Workshop und holt sich anschließend weitere Ideen auf der OSDC in Berlin. Mitchell Hashimoto, der Erfinder von Vagrant, hält dort übrigens einen Vortrag. Also schnell anmelden bevor alle Plätze weg sind!

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.

Monitoring Konfiguration automatisieren

Eine automatische Konfiguration von Server und Hardware ist mittlerweile dank Puppet und Co. in vielen IT-Abteilungen angekommen. Die Konfiguration des Monitoring erfolgt in vielen Fällen aber weiterhin mehr oder weniger manuell. Gründe dafür gibt es vermutlich viele. Zum Beispiel wenn Puppet und das Monitoring durch verschiedene Abteilungen betrieben wird oder es gibt Misstrauen gegenüber automatischer Konfiguration oder oftmals gibt es gut funktionierende Prozesse, wieso sollte ich diese ändern?
Allerdings sind alle Informationen die ich zum Überwachen der Server benötige auch in irgendeiner Form per Puppet, Hiera, Facter oder CMDB  verfügbar und müssen im Prinzip nur noch zu einer funktionierenden Konfiguration zusammengefügt werden. Wie kommt man am besten an die Informationen?
Beispiel 1: RaidController Checks automatisch erstellen

  • Puppet läuft und sammelt seine Fakten
    • darin ist auch ein Fakt enthalten, welches sich per lspci den vorhanden RaidController sucht
  • da ein LSI MegaRaid Controller verbaut ist wird StorCli installiert und ein entsprechendes Check Plugin
  • mit Hilfe des Icinga2 Puppet Moduls wird ein Service Check in die PuppetDB exportiert

Beispiel 2: VHost Checks automatisch erstellen

  • VHost sind im Hiera i.d.R. unter dem Key apache::vhost definiert
  • mit Hilfe von der Hiera Lookup Functions kann man Information aus hiera extrahieren
  • mit Hilfe des Icinga2 Puppet Moduls wird ein Service Check in die PuppetDB exportiert

Die Monitorserver realisieren anschließend die Checks aus der PuppetDB.
Das sind natürlich zwei einfache Beispiele. Will man flexibel bleiben muss man natürlich weiter in die Trickkiste greifen und z.B. ermöglichen, dass die Parameter der Service Checks auch überschreibbar sind.
 

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.

Ceph: Datenintegrität durch Scrubbing

Für ein Storage ist Datenintegrität natürlich eine wichtige Eigenschaft, welches in Ceph unter anderem durch das sogenannte Scrubbing umgesetzt wird. In den meisten Fällen werden Daten in Ceph repliziert gespeichert, d.h. jedes Objekt wird mehrfach gespeichert. Bei Scrubbing prüft Ceph ob die Kopien der gespeicherten Objekte gleich sind. Dabei wird in zwei verschiedene Arten von Scrubbing unterschieden. Das normale Scrubbing vergleicht (wenn möglich) täglich die Attribute und Größe der Objekte. Deep-Scrubbing hingegen berechnet wöchentlich die Prüfsummen der Objekte und vergleicht diese. Treten Unterschiede auf werden diese korrigiert.
Das prüfen der Integrität geht natürlich stark zu lasten der Festplatten, da jedes Objekt eingelesen wird. Deshalb gibt es verschiedene Parameter um die Last zu streuen. Generell versucht Ceph die Scrubs über den ganzen Tag bzw. Deep-Scrubs über die ganze Woche zu verteilen. Verwendet man aber die Standardeinstellungen kann dies schnell dazu führen, dass diese Verteilung nicht mehr funktioniert.

  • osd scrub load threshold = 0.5: Dies führt dazu, dass Scrubs nur bei einer Load von weniger als 0.5 durchgeführt werden. Bei einem Storage Server ist eine Load von 0.5 sehr schnell erreicht. Dieser Wert wird nicht an die Anzahl der Kerne adaptiert.
  • osd scrub min interval = 86400 (täglich): Gibt an, nach wie vielen Sekunden Scrubs durchgeführt werden können, falls die Load nicht zu hoch ist.
  • osd scrub max interval = 604800 (wöchentlich): Gibt an, nach wie vielen Sekunden Scrubs spätestens durchgeführt werden müssen. Der Load Threshold wird nicht berücksichtigt.
  • osd deep scrub interval = 604800 (wöchentlich): Gibt an, nach wie vielen Sekunden Deep-Scrubs durchgeführt werden müssen. Der Load Threshold wird nicht berücksichtigt

Laut Mailingliste und IRC-Logs werden Deep-Scrubs immer und ausschließlich von normalen Scrubs angestoßen, und zwar dann wenn der letzte (normale) Scrub schon länger als eine Woche vergangen ist. Hat das Storage eine Load größer von 0.5 (was im Normalbetrieb immer der Fall ist), dann ist der Parameter osd scrub min interval sinnlos und es wird nach einer Woche ein normaler Scrub durchgeführt. Diese Kombination kann dazu führen, dass Deep-Scrubs erst nach  osd scrub max interval + osd deep scrub interval durchgeführt werden. Im Standard Fall somit erst nach zwei Wochen. Je nach Startzeitpunkt der Intervalle werden alle Scrubs hintereinander durchgeführt was somit alle zwei Wochen im gleichen Zeitraum Last verursacht. Im Graphite und Grafana kann man solch ein Verhalten natürlich leicht erkennen 🙂

Ceph Deep Scrub

Ceph Deep Scrub


Zum Glück gibt es noch den Parameter osd max scrubs welcher mit der Standardeinstellung dazu führt, dass nur ein Scrub pro OSD zur gleichen Zeit stattfinden darf. Die Last auf den Storage hält sich somit in Grenzen und Anwender merken nichts davon.
 
 
 
 
 

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.

DevOpsDays Ghent

Zum fünfjährigen Geburtstag wurden die DevOpsDays wieder in Ghent veranstaltet. An zwei Tagen gab es Vorträge, Ignites und Open Spaces. Von den gehaltenen Vorträgen möchte ich besonders drei erwähnen. Lindsay Holmwood hat in seinen Vortrag 5 Years of metrics and monitoring einen Überblick gegeben wie man am besten Daten sammelt, speichert und analysiert. Ein besonders Augenmerk hat er auch auf die Darstellung der Daten gelegt. Spannend war auch der Vortrag von Brian Troutwine, welcher über komplexe Systeme gesprochen hat. Er ging vor allem darauf ein wie man diese kontrollieren kann und wann Automatisierung (nicht) sinnvoll ist. Nigel Kersten hielt einen interessanten Vortrag über die fehlerhafte menschliche Wahrnehmung und daraus resultierenden fehlerhaften Entscheidungen. Dieser hält übrigens auch einen Vortrag auf der nächsten OSDC in Berlin.


In den Ingites wurden in Kurzvorträgen neue Tools und andere interessante Dinge vorgestellt, unter anderem auch Icinga 2. Am Nachmittag gab es in mehreren abgegrenzten Bereichen offene Diskussionen über vorher vorgeschlagene Themen. Dort hatten die Teilnehmer die Möglichkeiten über alles was einem auf dem Herzen liegt zu diskutieren und Erfahrungen auszutauschen. Dort wurde quasi über alles geredet was DevOps aktuell beschäftigt wie z.B. Datenpersistenz und Docker, sammeln und analysieren mit Collectd, Grafana und Logstash, Metamodelle für Puppet-Module, flexibles Konfigurationsmanagement und sehr vieles mehr.

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.

Hiera: Welche Daten bekommt Puppet?

Wie im erstem Teil der Blogserie erklärt kann man mit Hiera Daten und Puppetmodule trennen. Wichtig dabei ist, dass die Daten in Abhängigkeit von Eigenschaften von Hosts gespeichert und extrahiert werden können (z.B. Hostname, Betriebssystem, Hersteller des Raidcontrollers usw.). Somit kann man nicht nur in den Puppet Klassen selbst sondern auch im Backend auf verschiedenen Eigenschaften der Server reagieren. Dabei kann man alle Fakten verwenden die von facter -p geliefert werden und die von außen hinzu gegeben werden, z.B. durch einen external node classifier (ENC) wie Foreman.
Im erstem Teil wurde ein einfaches Beispiel einer Hiera-Konfiguration gezeigt. In komplexeren Umgebungen werden die Daten nicht aus einer Datei sondern je nach Fakten aus einer ganzen Hierarchie aus YAML Dateien oder anderen Backends angezogen. Zudem können die selben Daten in den verschiedenen Hierachiestufen wieder überschrieben oder zusammengefasst werden. Zum Beispiel soll für alle meine Server ein Backup erstellt werden, weshalb der Key “bareos::ensure: present” ganz oben in der Hierarchie gesetzt wird (base.yaml). Natürlich gibt es Ausnahmen, weshalb weiter unten in der Hierachie der selbe Key auf “absent” gestellt wird, was sicherstellt, dass Bareos nicht installiert und konfiguriert wird. Je nach Hierachie kann das ganze schnell unübersichtlich werden. Welche Daten Puppet aus Hiera bekommt, lässt sich aber trotzdem einfach und schnell herausfinden, indem man hiera in der Shell aufruft. Als Parameter muss man die Hiera Konfigurationsdatei angeben und natürlich den Namen des Schlüssels der geholt werden soll.

 hiera -c /etc/puppet/hiera.yaml "bareos::ensure" 

Wenn wir als Beispiel die hiera.yaml aus dem ersten Teil verwenden, müssen wir leider feststellen, dass keine Daten gefunden werden, da wir die benötigen Fakten environment, operatingsystem bzw. fqdn nicht an Hiera übergeben. Die Fakten kann man manuell an Hiera übergeben, entweder als key=value Paare direkt beim Aufruf oder besser in Form einer yaml (-y facts.yaml) oder json Datei (-j facts.json).

$ cat facts.yaml
environment: production
::fqdn: "server1.netways.de"
::operatingsystem: Debian

Diese Daten werden normalerweise von den Hosts geliefert und müssen hier manuell übergeben werden:

hiera -y facts.yaml -c /etc/puppet/hiera.yaml -h bareos::ensure

Viel wichtiger ist aber auf welche Art und Weise man Daten aus Hiera extrahieren kann. Verwendet man den Parameter -h, werden die Daten als merged Hash zurückgegeben, d.h. Keys die auf mehreren Ebenen existieren, werden zu einem Hash zusammengeführt, wobei bei Konflikten der erst gefundene Key verwendet wird. Verwendet man den Parameter -a, werden die Daten als flattend Array zurückgeliefert, das bedeutet, dass Keys die auf mehreren Ebenen gefunden werden, zu einem gemeinsamen Array zusammengeführt werden. Bei einem Aufruf ohne Parameter wird einfach der zu erst gefunden Key verwendet.
Passend zum Thema darf ich euch noch an das PuppetCamp in Düsseldorf am Donnerstag erinnern!

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.