http://www.opitz-consulting.com/go/3-6-11 --- Softwareentwicklung, -test und -betrieb können durch Virtualisierung viele Vorteile erzielen. In diesem Zusammenhang werden häufig Werkzeuge für die Bereitstellung von Umgebungen eingesetzt. Verschiedene Werkzeuge adressieren aber unterschiedliche Einsatzszenarien. Wo im Applikationslebenszyklus können diese Werkzeuge sinnvoll eingesetzt werden und wie sieht es mit Kosten und Nutzen aus? ---- Unser Senior Software Architect Richard Attermeyer stellte bei der W Jax am 5.11.2014 in München die Tools Vagrant, Puppet und Docker im Einzelnen vor und erläuterte ihren Nutzen anhand von Use Cases und Live Demos. ---- Weitere Infos: https://jax.de/wjax2014/sessions/vagrant-puppet-docker-fuer-entwickler-und-architekten ---- Über uns: Als führender Projektspezialist für ganzheitliche IT-Lösungen tragen wir zur Wertsteigerung der Organisationen unserer Kunden bei und bringen IT und Business in Einklang. Mit OPITZ CONSULTING als zuverlässigem Partner können sich unsere Kunden auf ihr Kerngeschäft konzentrieren und ihre Wettbewerbsvorteile nachhaltig absichern und ausbauen.---- Über unsere IT-Beratung: http://www.opitz-consulting.com/go/3-8-10 ---- Unser Leistungsangebot: http://www.opitz-consulting.com/go/3-8-874 ---- Karriere bei OPITZ CONSULTING: http://www.opitz-consulting.com/go/3-8-5
8. DevOps
Kultur- und Prozesswandel
Wir haben noch nicht alle Antworten
Umfasst unterschiedliche Gruppen
Name ist neu
Mehr Firmen beschäftigen sich damit
18. Golden Image: Probleme
Groß
Verteilung dauert
Einfaches Customizing schwierig
Viele verschiedene Konfigurationen
Jede kleine Änderung erzeugt direkt große Datenmenge
und komplette Re-Installation
Keine Zusammenarbeit
Versionierung schwierig
26. Zusammenfassung
Viele vorgefertigte Images
siehe Vagrant Cloud und Vagrantbox.es .
Vagrantfiles.
Aufsetzen der Box bei Initialisierung
Maschinen-Schnappschüsse als Vagrant Box file
(Verteilung und Austausch)
Feinabstimmung der VM Parameter
RAM, CPU, APIC...
Integration mit CM Werkzeugen
Puppet, Chef, Ansible, Salt
28. Wie kann Puppet helfen?
Transparenz
Systemdefinition an zentraler Stelle
Systemdefinition ist klar strukturiert und verständlich
Reporting über Änderungen
Automatisierung
Systemaufbau „auf Knopfdruck“
Nicht nur initial, sondern über den ganzen Lifecycle
Reproduzierbarkeit
Systemaufbau ist durch Definitionsdatei zuverlässig reproduzierbar
Konfigurationsänderungen sind sichtbar und bei Bedarf revidierbar
Änderungen sind versionierbar
29. Arbeitsablauf mit Puppet
Grundidee:
„Beschreibe das Zielsystem, Puppet kümmert sich um den Weg dahin“
Resource
Definition
Reporting apply --noop
apply
32. Klassen
Zur Gruppierung
zusammenhängender
Ressourcen
Klassen können auch
parametriert werden
Aber: Jede Klasse wird pro
Knoten nur einmal instanziiert!
class ntp {
package { "ntp":
ensure => present,
}
service { "ntp":
ensure => running,
require => Package["ntp"],
}
}
33. Module
Einheitliche Struktur und Kapsel
für ein Feature
Module in Puppets Modulepath
können direkt eingebunden
werden
Über puppet modules können
Module von PuppetForge
geladen werden
<name>
manifests/
init.pp
…
files/
tests/
templates
lib/
34. Infrastructure-as-Code
package { 'curl':
}
class { '::java' :
}
include profiles::jenkinsmaster
include ssh::client
class profiles::jenkinsmaster (
$lts = true
) {
class { 'jenkins':
lts => $lts,
install_java => false,
}
include jenkins::master
create_resources('jenkins::plugin',
hiera_hash('jenkinsmaster::plugins'))
}
47. Zusammenfassung
Leichtgewichtig
Docker Images sind viel leichtgewichtiger als volle VMs. Start
dauert Sekunden anstatt wenige Minuten. Zu verteilende
Images i.d.R. kleiner (nur Delta, neuer FS Layer)
Versionskontrolle der Images
Daher einfacheres Handling von Builds. Und damit auch
geeigneter für eine Continuous Delivery Pipeline
Lots of images (again)
49. CD Build Agent / Slave
Jenkins / GO CD
Source Code
Puppet / Java /
Schemaverwaltung
Entwicklung
Vagrant
Continuous Delivery
Pipeline
Jenkins / GO CD
Test
Docker / Vagrant
Produktion
Docker / VM
Puppet
50. Docker
Use Case Aufwand / Nutzen
Leichtgewichtige VMs
Statisch, homogene
Umgebungen
Isolation von mehreren
Slaves im CD Prozess
Gut für Microservices
Verteile nicht das war / ear
sondern den ganzen
Container
Spring Boot, DropWizard, self
contained deployment
Flache Lernkurve
Recht schnell guter Nutzen
für Continuous Delivery
Betrieb noch mit Aufwand
verbunden
51. Vagrant
Use Case Aufwand / Nutzen
Entwicklerumgebung
(Entwicklung in the Box inkl.
IDE)
Testgrid (auch für CD) für
verschiedene
Betriebssysteme
Ubuntu, RedHat, Windows
CM Tool für einheitliches
Provisioning über
unterschiedliche OS
Homogene Umgebung
Einfach, Shell / Ansible Provisioning
Flache Lernkurve
Schnell guter Nutzen
Test Grid / Unterschiedliche
Umgebungen
Schwer. Erfordert CM Know-how
Hoher Aufwand Planung
Wenige (Inhouse-)Projekte haben
diese Anforderungen
52. Puppet
Use Case Aufwand / Nutzen
Management status-behafteter
Umgebungen
Abstraktion von Resourcen /
Distributionen
Nutzung in bestehenden
Prozessen
Hohe Lernkurve
Strategische Entscheidung
Schwierig: Unterschiedliche
Umgebungen (Debian vs. RedHat)
Gute Module finden / selber entwickeln
aufwändig
Einfacher: Homogene Umgebung
Aber warum dann nicht ansible?
Nützlich: In Kombination etwa mit
Docker
Konfiguration des Hosts mit Puppet
Guests: Docker Container
66. Fotoreferenzen
„Computer Problems“ by CollegeDegrees360 is licensed under CC BY 2.0
Git Logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported
License.
“Crossroads” by Carsten Tokmit is licensed under CC BY-SA 2.0
“Gucker” by H.P. Brinkmann is licensed under CC BY 2.0
Hinweis der Redaktion
Womit beschäftige ich mich:
Aktuell: Early Life Support (3. Woche) für Projekt „Kleine Schwester“, daneben weiterhin Support „großer Bruder“ (seit über 3 Jahren)
DevOps, Continuous Delivery, Softwareentwicklung im agilen Umfeld
Business Development
Präsentation für ca 60min
Was ist die Agenda für den heutigen Vortrag?
Kollegen fragen: Was verbirgt sich hinter Puppet, Docker? Wie passt das zusammen?
Konzentration auf: Entwicklung + Continuous Delivery
Auch wenn der Vortrag: Vagrant, Puppet und Docker heißt.
Eigentlich geht es um die Ideen von Virtuellen Maschinen, Configuration Mgmt und Container am Beispiel der konkreten Technologien …
Präsentation für ca 60min
Motivation: Wer kann definieren was DevOps ist? Wir bekommen bestimmt so viele Antworten, wie Teilnehmer im Raum
Wenn wir uns um Entwicklung und Continuous Delivery kümmern, dann kommen wir an den Begriffen DevOps + Continuous Delivery nicht vorbei.
Daher hier ein paar Worte dazu:
Der Begriff DevOps ist nicht einfach zu fassen. DevOps ist eine fachliche und kulturelle Bewegung. Sie wird fachlich von den beiden im Unternehmensumfeld getrennt betrachteten Organisationseinheiten /Communities Entwickler (Development) und den Systemadministratoren (Operations) getragen. Das Silodenken wird von Mitgliedern dieser Einheiten häufig als hinderlich betrachtet. Die Anhänger der DevOps-Bewegung wollen diese Kultur ändern und Entwicklung und Betrieb näher zusammen bringen. Beide Seiten können voneinander lernen. Beide sind zusammen verantwortlich dafür, dass eine Codeänderung schnell vom Commit einer Änderung bis in die Produktion gelangt.
Unter Continuous Delivery versteht man eine konkrete Sammlung von Techniken, Prozessen und Werkzeugen, die den Softwareentwicklungsprozess verbessern. Und im Folgenden sollen einige Werkzeuge einmal näher betrachtet werden und wie diese Continuous Delivery unterstützen können.
Motivation:
Teams: eher selten, dass neue Kollegen eingephast werden müssen
Aber: Consultant und MSA Herausforderungen
Works on my machine:
Abweichungen zw. Entwicklung und CI / Test / Produktionsumgebung führt dazu, dass Code entwickelt wird, der Spezifika der Umgebung berücksichtigt (etwa JDK Versionen, Library Versionen, …)
Probleme treten dann erst beim CI zu Tage. Suche beginnt.
A golden image is a template for a virtual machine (VM), virtual desktop, server or hard disk drive. A golden image may also be referred to as a clone image or master image.
Golden Image: Hat etwas mythisches: Meistens bringt das Probleme mit sich …
Die Frage hat sich auch Mitchell Hashimoto gestellt. Während seines Studiums hat er als Freiberufler für verschiedene Kunden und Projekte gearbeitet und musste sich seine Entwicklungsumgebung immer neu zusammenstellen.
Das verbrauchte Platz der 2010 noch etwas knapp auf Laptops zur Verfügung stand.
Seine Antwort …
Hier besteht Abwägungsaufwand:
Im Netz finden Sie häufig nur Basisboxen (Bare Images)
Das Provisionieren dauert relativ lange
Es ist nicht ganz so einfach eine „saubere“ Basisbox zu erstellen
Beispiel 4
Beispiel 6
Klassen werden mit include <classname> eingebunden
Deklarativ: Beschreibe den Soll-Zustand der Umgebung
Versionskontrolle: Puppet Scripts sind einfache Textfiles und als solche einfach versionierbar. Puppet von Hause etwas schwach was Abhängigkeitsmanagement angehet, aber mit librarian Puppet schon gut
Eine Entwicklungsumgebung aus virtuellen Maschinen ist relativ Ressourcenhungrig, da sie immer den kompletten Betriebssystemstack benötigt.
Eine Entwicklungsumgebung aus virtuellen Maschinen ist relativ Ressourcenhungrig, da sie immer den kompletten Betriebssystemstack benötigt.
Eine Entwicklungsumgebung aus virtuellen Maschinen ist relativ Ressourcenhungrig, da sie immer den kompletten Betriebssystemstack benötigt.
Build: Develop an app using Docker containers with any language and any toolchain.
Ship: Ship the “Dockerized” app and dependencies anywhere - to QA, teammates, or the cloud - without breaking anything.
Run: Scale to 1000s of nodes, move between data centers and clouds, update with zero downtime and more.
Docker images are essentially a collection of files which include everything needed to run that process. This is everything from the OS packages and up.
A docker image has a default process it runs when it is instantiated. This could be bash, to drop you into the terminal, or a web server so you can access it from the browser.
To construct a docker image you use “docker build” which uses a docker configuration file. This file is usually about 5-6 lines of unix commands, such as apt-get. You can think of it as a bash script, but it is much simpler, and it is targeted towards the construction of image layers. Therefore, you might have a line for the base Operating System, then for installing Apache web-server, then a line for installing your programming language runtimes and then your code, or the process, that you want to run.
The simplest docker image is “busybox,” which is 5Mb linux distribution, so it is very small.
Layers
Docker images are built up in layers. So, for instance, if you need to run WordPress, you would build the Ubuntu layer, add a layer for Apache2 web server, add a PHP layer and then a layer for the WordPress files. Lower layers can be re-used. We might take the PHP layer and layer on Drupal instead of WordPress, or update our WordPress layer with a newer version or Wordpress.
Because we can re-use layers, we can make new docker images very cheaply. We can create a new docker image by changing just a single line of one file and we do not have to rebuild the whole stack.
The beauty of docker images being “just files” means that the difference between two docker images is just a diff of the files they contain.
Virtual Machines
Each virtualized application includes not only the application - which may be only 10s of MB - and the necessary binaries and libraries, but also an entire guest operating system - which may weigh 10s of GB.
Docker
The Docker Engine container comprises just the application and its dependencies. It runs as an isolated process in userspace on the host operating system, sharing the kernel with other containers. Thus, it enjoys the resource isolation and allocation benefits of VMs but is much more portable and efficient.