Virtualisierung ermöglicht es auf einer bestehenden Plattform, dem sogenannten Hostsystem, virtuelle Hardware bereitzustellen. So können auf ein und derselben Hardware mehrere virtuelle Maschinen (VMs) parallel laufen, die dennoch vollständig voneinander isoliert sind.
1.
Problemstellung
Ein
häufiges
Problem
beim
Integrieren
neuer
Entwickler
in
bestehende
Software-‐
Entwicklungsprojekte
stellt
das
initiale
Aufsetzen
der
benötigten
Tools
und
Technologien
dar,
die
für
das
Ausführen
der
Anwendung
nötig
ist.
Während
Quellcode
und
Dokumentation
in
der
Regel
an
einem
zentralen
Ort
für
alle
frei
zugänglich
sind,
trifft
dies
bei
ganzen
Umgebungen
eher
selten
zu.
Um
ihre
Anwendung
regelmäßig
lokal
zu
testen,
sind
die
Entwickler
beim
Aufsetzen
der
Umgebung
meist
auf
sich
allein
gestellt.
In
einer
typischen
Webanwendung
sind
die
eingesetzten
Applikationsserver
und
Datenbanken
den
Entwicklern
zwar
bekannt,
doch
nicht
zwingend
auch
die
eingesetzten
Versionen.
Eben
diese
Unschärfe
führt
dazu,
dass
bei
einem
Entwickler
die
Anwendung
fehlerfrei
läuft,
bei
einem
anderen
jedoch
nicht.
Dies
resultiert
in
unnötigem
Aufwand
für
sowohl
das
initiale
Aufsetzen,
als
auch
das
Finden
von
Fehlern.
Lösung
Um
neuen
Entwicklern
den
Einstieg
zu
vereinfachen
und
die
Fehlerquellen
zu
reduzieren,
ist
es
naheliegend
neben
dem
Quellcode
und
der
Dokumentation
auch
die
vollständige
Umgebung
zentral
bereitzustellen.
In
dieser
sind
alle
Komponenten
bereits
enthalten,
wodurch
jede
Umgebung
vollständig
identisch
zu
jeder
anderen
ist
-‐
im
Idealfall
sogar
zur
Produktionsumgebung.
Mittels
Virtualisierung
lässt
sich
eben
dies
erreichen.
Ein
zentrales
Repository
verwaltet
die
Konfiguration
der
Umgebung
(die
sogenannte
Appliance),
mittels
derer
virtuelle
Maschinen
provisioniert
und
fertig
konfiguriert
werden
können.
Implementierung
Zur
Implementierung
dieser
Lösung
bietet
sich
Vagrant
[1]
an.
Vagrant
ist
ein
Tool
spezialisiert
auf
das
Erstellen
und
Konfigurieren
von
virtuellen
Maschinen.
Dabei
instanziiert
Vagrant
die
Virtualisierung
ermöglicht
es
auf
einer
bestehenden
Plattform,
dem
sogenannten
Hostsystem,
virtuelle
Hardware
bereitzustellen.
So
können
auf
ein
und
derselben
Hardware
mehrere
virtuelle
Maschinen
(VMs)
parallel
laufen,
die
dennoch
vollständig
voneinander
isoliert
sind.
Nicht
zuletzt
ist
es
genau
diese
Technologie,
die
das
Cloud
Computing
ermöglicht
hat.
In
großen
Datenzentren
werden
VMs
provisioniert
und
den
Kunden
zur
Verfügung
gestellt,
die
diese
dann
individuell
anpassen
können.
Virtualisierte
Umgebungen
mit
Vagrant
2. Maschinen
nicht
selbst,
sondern
delegiert
diese
Aufgabe
an
sog.
Provisioner
wie
bspw.
Oracle
VirtualBox
[2].
Eine
zentrale
Konfigurationsdatei
(das
Vagrantfile)
ist
ausreichend
um
mittels
Vagrant
die
VM
erstellen
zu
lassen:
Die
Appliance
oder
auch
Box
zum
Bau
der
virtuellen
Maschine
kann
direkt
von
einem
Webserver
bezogen
werden.
Mittels
des
Vagrantfiles
kann
die
virtuelle
Maschine
nun
beliebig
angepasst
werden,
bspw.
um
die
verfügbare
virtuelle
Hardware
zu
ändern
oder
das
Netzwerk
zu
konfigurieren.
Mittels
hinterlegter
Skripte
oder
Tools
wie
Chef
[3]
oder
Puppet
[4]
(sog.
Provisioner)
lassen
sich
die
virtuellen
Maschinen
bis
ins
Detail
anpassen.
So
können
Pakte
installiert,
Server
konfiguriert
oder
neue
Nutzer
angelegt
werden:
Somit
benötigen
Entwickler
nicht
mehr
als
die
Konfigurationsdatei
und
eine
Installation
von
Vagrant.
Ein
einfaches
vagrant
up
ist
ausreichend
um
die
Maschine
erstellen,
konfigurieren
und
starten
zu
lassen.
Auf
diese
kann
nun
mittels
SSH
direkt
zugegriffen
werden.
Ebenfalls
lassen
sich
lokale
Ordner
in
die
virtuelle
Maschine
spiegeln.
So
werden
Updates
auf
den
lokalen
Dateien
sofort
in
der
virtuellen
Umgebung
sichtbar.
Vorteile
Der
Einsatz
von
Virtualisierung
im
beschriebenen
Szenario
erlaubt
es
Entwicklern
viel
schneller
produktiv
zu
sein.
Der
Aufwand
zum
Aufsetzen
der
Umgebung
fällt
nun
nur
noch
beim
Erstellen
der
Konfiguration
einmalig
an.
Im
Falle
von
Updates
kann
die
virtuelle
Maschine
einfach
gestoppt
und
mit
der
neuen
Konfiguration
neu
gestartet
werden.
Genau
diese
Tatsache
macht
das
Experimentieren
mit
neuen
Versionen
viel
weniger
riskant.
So
kann
einfach
eine
neue
Komponente
in
der
virtuellen
Maschine
installiert
und
getestet
werden.
Führt
dies
zu
Fehlern,
wird
die
bestehende
VM
einfach
verworfen
und
eine
neue
gestartet.
Dies
dauert
in
der
Regel
nicht
länger
als
fünf
Minuten.
Das
Phänomen,
dass
Anwendungen
bei
einem
Entwickler
lokal
fehlerfrei
laufen,
bei
einem
anderen
jedoch
nicht,
lässt
sich
hinsichtlich
der
Umgebung
nun
auch
ausschließen.
Die
virtuellen
Maschinen
können
lokal
ausgeführt
werden
–
sie
können
aber
ebenso
auf
dedizierte
Hardware
der
jeweiligen
Firma
oder
sogar
in
der
Cloud
provisioniert
werden.
Somit
skaliert
dieser
Ansatz
je
nach
Größe
und
Bedarf
des
jeweiligen
Unternehmens.
Konsequenzen
Jedoch
gibt
es
auch
bei
diesem
Ansatz
Punkte,
die
zu
bedenken
sind.
So
muss
die
entsprechende
Infrastruktur
initial
aufgebaut
werden,
und
die
Appliances
müssen
konfiguriert
werden.
Auch
Vagrant
selbst
wird
stetig
weiterentwickelt,
wodurch
es
zu
verschiedenen
Versionen
kommt.
Wohingegen
sich
der
beschriebene
Workflow
bei
neuen
Projekten
sehr
gut
einsetzen
lässt,
bedarf
es
mehr
Aufwand
beim
Ändern
bestehender
Abläufe.
Das
Versionsproblem
von
Vagrant
selbst
wird
dadurch
adressiert,
dass
die
Konfiguration
unabhängig
von
der
jeweiligen
Version
ist,
und
auch
der
initiale
Aufwand
lässt
sich
mit
den
zu
erwartenden
Einsparungen
für
das
Aufsetzen
der
Umgebungen
und
Beheben
von
Fehlern
rechtfertigen.
Kompetenzen
techdev
Solutions
kann
Sie
bei
der
Einführung
virtualisierter
Abläufe
unterstützen.
Als
Partner
der
Deutsche
Börse
Cloud
Exchange
AG
sowie
durch
den
Einsatz
von
Vagrant
und
Chef
für
die
Entwicklung
der
eigenen
Softwarelösungen,
verfügt
techdev
über
umfangreiche
Erfahrung
im
Einsatz
von
Virtualisierung.
Wir
helfen
Ihnen
gerne!
Über
uns
techdev
Solutions
ist
der
unabhängige
Beratungspartner
für
anspruchsvolle
IT-‐Projekte.
Gemeinsam
mit
unseren
Kunden
konzipieren
wir
individuell
abgestimmte
Softwarelösungen,
setzen
Vagrant.configure(“2”)
do
|config|
config.vm
=
“precise64”
config.vm.box_url
=
“http://files.acme.inc/precise64.box”
config.vm.provider
:virtualbox
do
|vb|
vb.customize
[“modifyvm”,
:id,
“-‐-‐cpus”,
2]
vb.customize
[“modifyvm”,
:id,
“-‐-‐memory”,
2048]
end
end
execute
“apt-‐get
update”
package
“openjdk-‐7-‐jdk”
Listing 2 - Installieren eines JDK aus den Paketquellen
Listing 1 - Konfiguration einer Linux-basierten VM
3. diese
um
und
entwickeln
bestehende
Systeme
weiter.
In
Zeiten
von
komplexen
Arbeitsabläufen
und
einer
hauptsächlich
von
Zeit-‐
und
Kostendruck
bestimmten
Wettbewerbsfähigkeit,
sind
optimale
Prozesse
und
effiziente
IT-‐Strukturen
oft
der
entscheidende
Vorteil,
welcher
unseren
Kunden
ihre
Favoritenrolle
sichert.
Kontakt
techdev
Solutions
UG
(haftungsbeschränkt)
Bismarckstr.
47
76133
Karlsruhe
info@techdev.de
http://techdev.de
Referenzen
[1]
http://www.vagrantup.com/
[2]
https://www.virtualbox.org/
[3]
http://www.getchef.com/chef/
[4]
http://puppetlabs.com/