Die Dateien zu diesem Schritt im Workshop findest du als git Repository auf github:
https://github.com/timoschmidt/vagrant-chef-workshop/tree/master/step4
Dieses Repository enthält zwei Vagrant setups. Eins für die gecachte Variante und eins für die ungecachte Variante.
Bislang haben gelernt, wie wir mit dem Apache Kochbuch einen eigenen VirtualHost aufsetzen können. Je mehr Dienste installiert werden, umso länger dauert die Provisionierung und kann relativ lange dauern. Die Einführung von DevOps kann durch lange Wartezeiten schnell an Akzeptanz verlieren und zu Frust führen. Um dies zu vermeiden, sollten wir die Performance vom Begin an im Blick behalten und optimieren.
Eine Massnahme, wenn es sich beim Hostsystem um ein Linux- oder MacSystem handelt ist es, statt dem VirtualBox Filesystem für das shared folder ein NFS zu verwenden.
Das VirtualBox Dateisystem is relative langsam. Vagrant bietet die Möglichkeit das shared Folder mittels NFS einzubinden:
ERROR: Content Element with uid "1775" and type "beautyofcode_contentrenderer" has no rendering definition!
NFS ist nur möglich auf einem Linux oder Mac Hostsystem. Wenn das VagrantFile auf mehreren Host Systemen verwendet wird, kann wie folgt dynamisch NFS aktiviert werden:
ERROR: Content Element with uid "1777" and type "beautyofcode_contentrenderer" has no rendering definition!
Die reine Verwendung von NFS bringt schon einen Geschwindigkeitsvorteil. Dieser kann ausgebaut werden, indem innerhalb der Box NFS caching verwendet wird.
Der erste Schritt is die Anpassung der Syncfolder Optionen zur Verwendung des NFS cachings:
ERROR: Content Element with uid "1780" and type "beautyofcode_contentrenderer" has no rendering definition!
Ausserdem muss innerhalb der Box der NFS Caching Dienst installiert und aktiviert werden.
ERROR: Content Element with uid "1782" and type "beautyofcode_contentrenderer" has no rendering definition!
Die Resourcen des Hostsystems werden optimal genutzt wenn Arbeitsspeicher und CPU des Gastsystems so gesetzt werden, dass maximal verfügbare Ressourcen genutzt werden. Um dies automatisch zu tun können diese Werte dynamisch gesetzt werden.
Anhängig vom Hostsystem kann mit der Shell ausgelesen werden, wieviel Speicher und CPUs zur Verfügung stehen. Wenn möglich sollten der VM alle CPU Kerne zur Verfügung gestellt werden. Beim Speicher sollte 1/4 oder 1/2 des Speichers verwendet werden.
Mit folgender Anpassung können die Ressourcen per Script im VagrantFile zugewiesen werden:
ERROR: Content Element with uid "1785" and type "beautyofcode_contentrenderer" has no rendering definition!
DevOps hilft am Puls der Zeit zu bleiben und mit jeder Provisionierung bzw „vagrant up“ die neuste Serversoftware zu installieren. Dazu werden apt Pakete, tar.gz und git Ressourcen aus dem Internet geladen. Die Anschlüsse sind zwar oftmals schnell genug, dennoch lohnt es sich durch caches Bandbreite zu sparen.
Das Cachier Plugin klingt sich in Vagrant ein und cached Ressourcen für eine weitere Installation. Hierbei können caches pro VagrantBox oder auch für mehrere Boxen geteilt werden. Dadurch müssen Ressourcen nicht immer wieder aus dem Internet heruntergeladen werden, sondern liegen lokal vor.
Zunächst muss das Cachier Plugin installiert werden:
ERROR: Content Element with uid "1788" and type "beautyofcode_contentrenderer" has no rendering definition!
Mit dem folgenden Snipped kann das VagrantFile angepasst werden um das Cachier Plugin zu verwenden, falls es installiert ist:
ERROR: Content Element with uid "1790" and type "beautyofcode_contentrenderer" has no rendering definition!
Um die Laufzeit zu messen habe ich zehn Provisionierung mit und zehn Provisionierungen ohne Cache durchgeführt:
Und hier nochmal visuell die durchschnittliche dauern pro Lauf in Minuten: