SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
#BaselOne17
Infrastructure as
Code
Provisionierung von Dockerhosts
und -Containern mitTerraform,
Ansible und LXD auf Blech und Cloud
Infrastructure as Code
Lästige und aufwändige manuelle Serverinstallation kann auf einfache Art durch
automatisierte Provisionierung und Konfiguration der Infrastruktur ersetzt werden.
DieserVortrag zeigt einen Ansatz, bei dem die Definition der Infrastruktur in voll
maschinenlesbarer und ausführbarer Form in einem git repo anstatt in den Köpfen der
(oder des) Engineers vorhanden sind.
Es wird gezeigt, wie dasVerfahren sowohl auf Blech (d.h. auf lokalen physischen
Maschinen) als auch in der Cloud angewendet werden kann, und somit eine grosse
Übereinstimmung zwischenTest-/Integrations- und Produktionsinfrastruktur erreicht
wird.
Die vorgestelltenWerkzeuge sind terraform und ansible für Provisionierung und
Konfigurationsmanagement, sowie lxd (nur lokal) und docker für System- und
Applikationscontainer. Die vollständige Codebasis ist auf github verfügbar, so dass alle
TeilnehmerInnen auch sofort mit eigenen Experimenten loslegen können.
Abstract
https://github.com/Remigius2011
https://stackoverflow.com/users/3639856/remigius-stalder
https://twitter.com/remigiusstalder
www.descom-consulting.ch
Remigius Stalder
passionate developer
descom consulting ltd. (since 1991)
Motivation
Tools
Plan
Demo
?
Outline
Motivation
Was ist IaC?
Definition der Infrastruktur:
Ressourcen (Maschinen, Netzwerk etc.)
Konfiguration (OS, Software, User etc.)
Kein GUI, nur Code!
alles geht in ein (git-) repo
automatisierte Bereitstellung von lauffähigen
Systemen on premise / in cloud
Ziel: 100% Automatisierung, alles ephemer
d.h. wegwerfbar
Was möchten und können wir damit erreichen?
Automatisierung: Provisionierung und Konfiguration
einheitliche Umgebungen (dev/int/prod – local/cloud)
alles versioniert in einem repository
“single source of truth”
einfache Updates (z.B. neue OSVersion)
inkrementelleÄnderungen
Reproduzierbarkeit
schnellereVerfügbarkeit
=> geringeres Risiko
geringere Kosten
Beispielarchitektur
app cluster
reverse
proxy
static
resources
web service
authc
app db
authc db
client
Tools
tools
ansible
lxd
terraform
docker
setup
containers
Terraform
Open-Source Projekt: Hashicorp
implementiert in: go
Provisionierung von (virtuellen) Resourcen
VMs, Netzwerke etc.
Plugins
Cloud Providers (AWS, Azure, DigitalOcean…),
Lokale Infrastruktur (LXD, OpenStack,VMware vSphere…)
DSL
Alternativen
CloudFormation (AWS), docker-machine (docker), InfraKit (moby)
Ansible
Open-Source Projekt: Red Hat
implementiert in: python
Konfigurationsmanagement
Konfiguration von bereitgestellten Ressourcen, wie:
Softwareinstallation, Anpassung von Konfigurationsdateien,
Einrichtung der Users etc.
Strukturierung
Inventar und Rollen
Playbooks: Definition der Konfiguration (yaml)
Roles: einzelne Aspekte der Infrastruktur (Modularisierung)
Variablen: Parametrisierung (auch verschlüsselt – z.B. für Passwörter)
Plugin Module: für die meisten Aufgaben vorhanden
Alternativen
Chef, Saltstack, Puppet
Provisionierung / Konfiguration:Terraform vs. Ansible
Beide sind:
code-driven
agentenlos (über ssh / Ansible mit python)
Terraform Ansible
Provisionierung von (VM-) Instanzen Konfiguration (VM + Blech)
Initialisierung Verfeinerung
Immutable Mutable
proprietäre DSL (HCL) yaml
(HashiCorp) (Red Hat)
lxd
Open-Source Projekt: Canonical - linuxcontainers
implementiert in: go
Systemcontainer – leichtgewichtigeVMs
Hosts: div. Linux, u.a. alpine, fedora, ubuntu + snap package
Images: div. Linux, u.a. alpine, centos, debian, fedora, ubuntu
eigene Images als export oder .tar.gz
resource constraints, nesting, live migration (checkpoint/restore)
backing store: ext4, ZFS, Btrfs, LVM
security: apparmor, seccomp
lxd host routet IP traffic zu den containers (by default)
Caveat
upstream docker läuft (derzeit) nur in privilegierten Containern!
d.h. root im container = root auf host
Docker
Open-Source Projekt: Docker Inc.
implementiert in: go
Applikationscontainer – App/Service + Umgebung
Hosts: Linux (viele Distributionen), Mac,Win
Images: viele vorgefertigte auf https://hub.docker.com/
einfache und reproduzierbare Erstellung eigener Images (Dockerfile)
Sandbox Umgebung, ingress port mapping, transiente / persistente Daten,
environment
Clustering
swarm: task dispatching, load-balancing, fail-over, restart policies,
skalierung, rolling upgrades/rollbacks
=> ideal für microservices
CLI + REST-API
java clients: com.spotify:docker-client, com.github.docker-java:docker-java
Containers: Docker vs. LXD
Gleicher Ursprung: Linux Containers
namespaces (“Virtualisierung” der Systemressourcen)
cgroups (Policies für Ressourcenverwendung)
Client-Server Architektur
beide haben: CLI + REST API
LXD Docker
ganzes (Linux-) OS Einzelner Prozess (mit Umgebung)
vollst. Images (tgz) Images in Layers (Delta)
eigene Images unüblich eigene Images einfach (Dockerfile)
leichtgewichtige VM Virtualisierung einer Applikation
(Canonical) (Docker Inc.)
Plan
swarm cluster (project A)
Cloud Setup
. . .docker host (VM instance)
container container container
container container
. . .
docker host (VM instance)
container container container
container container
. . .
swarm cluster (project B)
. . .docker host (VM instance)
container container container
container container
. . .
docker host (VM instance)
container container container
container container
. . .
bare metal (lxd host)
Lokales Setup (lxd)
. . .
docker host (VM instance)
container container container
container container
. . .
docker host (VM instance)
container container container
container container
. . .
bare metal (lxd host)
. . .
docker host (VM instance)
container container container
container container
. . .
docker host (VM instance)
container container container
container container
. . .
swarm
cluster
project A
swarm
cluster
project B
Setup Steps
Step 1: Management Host
openssh + private key, tools: git, terraform, ansible
=> Ansible
Step 2: LXD Host
openssh + public key, lxd, images
=> Ansible
Step 3: Provisioning (LXD Guest / CloudVM)
openssh + public key, fixed IP
=>Terraform
Step 4: Docker Hosts
docker, swarm
=> Ansible
Step 5: Docker Containers
à votre goût…
=> Ansible
Szenarios / Umgebungen
Umgebung Step 1
(mgt)
Step 2
(lxd host)
Step 3
(provisioning)
Step 4
(docker)
Step 5
(containers)
bare x x x
lxd x x x x x
cloud x x x x
bare: docker direkt auf OS/Blech (keine Provisionierung)
lxd: docker in lxd container
cloud: docker in cloud vm
Kontrollmöglichkeiten
mgt host
lxd host
(bare metal)
docker host
(lxd guest)
docker host
(cloud VM)
docker
containers
lokal
cloud
die Pfeile symbolisieren die Kontrollmöglichkeiten via ssh / ansible (vom mgt host) resp. CLI (lxc / docker)
ssh / lxc
ssh
ssh
ssh / lxc docker
docker
Demo
Demo
=> shell
Conclusions
Conclusions
Terraform/Ansible: DSLs (zu?) einfach
einfach zu lernen
manchmal work-arounds für mangelnden Sprachaustruck nötig
Terraform: im Nu ein Cluster am Laufen!
…und ebenso schnell wieder weggezaubert
Provisionierung undVorbereitung für Ansible, dann weiter mit Ansible
Ansible: für fast alles ein Plugin vorhanden
wenn Plugin fehlt oder unpassend: einfach shell-Modul verwenden
lxd: Experimentierlabor
Viele hosts mit wenig Hardware schnell erstellt, eigene IaaS ohne grossen Aufwand
für Produktion als docker host m.E. (noch) nicht geeignet (privileges)
Docker: Infrastruktur als Commodity – Apps verpackt
Apps laufen in jeder Umgebung (praktisch) gleich: dev/test/prod – local/cloud
Handling extrem vereinfacht – drastischeVerringerung des Aufwands
Best Practices
Security first!
mgmt host sichern, ssh keys, UFW auf lxd hosts etc.
100% Automation – no compromise
Dockerfile / ansible / terraform / shell => alles ins (git) repo!
Manchmal ist etwas Hartnäckigkeit nötig, um wirklich alles zu automatisieren…
Netzwerk planen: IP Adressen der lxd hosts und containers – think big!
Z.B. innerhalb 10.0.0.0/8: je ein ClassC Netz pro lxd host (+ ipv6 wenn nötig)
lxd host routet ingress traffic zu containers -> static routes definieren
(mit ansible oder in router/firewall)
Docker Container Inheritance: aufzeichnen (DAG)
Optimierung der notwendigen Layers durch Minimierung der Parents
Verwendung von minimalen Basis-Images, wie z.B. Alpine
Ansible: gute Struktur
Was brauchen wir?Welche Roles? -> Roles zuerst als Skelett (Task Namen / Kommentare)
dann Playbooks, Inventar (hosts/groups),Variablen, Secrets
Ansible:Tasks möglichst idempotent
mehrfache Ausführung eines playbooks sollte dasselbe Ergebnis erzielen
Terraform: Status nach Destroy prüfen
in seltenen Fällen wird nicht alles destroyed…
Secrets
Passwörter, Keys etc. geheim halten: ansible vault, secrets in docker swarm,
terraform: via command line aus ansible vault
Getting Started
https://github.com/Remigius2011/iac
Questions
Danke für’s Zuhören…
resources:
slides https://www.slideshare.net/remigius-stalder/iac-baselone17
code https://github.com/Remigius2011/iac
links https://github.com/Remigius2011/iac/blob/master/doc/resources.md
Bildnachweis:
Motivation: https://unsplash.com/photos/oMpAz-DN-9I
Tools: https://www.pexels.com/photo/industry-metal-technology-manufacturing-47729/
Plan: https://www.pexels.com/photo/architect-architecture-artist-blur-268362/
Demo: https://pixabay.com/de/blitz-teslaspule-experiment-113310/
Conclusions: https://www.pexels.com/photo/view-ape-thinking-primate-33535/
Questions: https://pixabay.com/de/frage-fragezeichen-umfrage-problem-2736480/
Code: screenshots aus https://github.com/Remigius2011/iac (intellij)

Weitere ähnliche Inhalte

Was ist angesagt?

Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...inovex GmbH
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15m1no
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerNicholas Dille
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitFrank Müller
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungMario Müller
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit JujuFrank Müller
 
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Michael Whittaker
 
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Tobias Schneck
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppetinovex GmbH
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 

Was ist angesagt? (20)

Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Node.js
Node.jsNode.js
Node.js
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der Nebenläufigkeit
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende Einführung
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit Juju
 
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)
 
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 

Ähnlich wie Infrastructure as Code - BaselOne 17

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Infrastructure as Code mit Terraform
Infrastructure as Code mit TerraformInfrastructure as Code mit Terraform
Infrastructure as Code mit TerraformHarald Schmaldienst
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumNicholas Dille
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollenUwe Küchler
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeAndreas Schreiber
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...B1 Systems GmbH
 
Orchestrierung einer Private Cloud mit OpenStack Heat
Orchestrierung einer Private Cloud mit OpenStack Heat Orchestrierung einer Private Cloud mit OpenStack Heat
Orchestrierung einer Private Cloud mit OpenStack Heat B1 Systems GmbH
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows ContainerThomas Wilhelm Wiefel
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Michael Romer
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauenjohofer
 
Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Govinda Fichtner
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Managementinovex GmbH
 

Ähnlich wie Infrastructure as Code - BaselOne 17 (20)

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Infrastructure as Code mit Terraform
Infrastructure as Code mit TerraformInfrastructure as Code mit Terraform
Infrastructure as Code mit Terraform
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle Versionsmanagementsysteme
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
Orchestrierung einer Private Cloud mit OpenStack Heat
Orchestrierung einer Private Cloud mit OpenStack Heat Orchestrierung einer Private Cloud mit OpenStack Heat
Orchestrierung einer Private Cloud mit OpenStack Heat
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Daos
DaosDaos
Daos
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 

Infrastructure as Code - BaselOne 17

  • 2. Provisionierung von Dockerhosts und -Containern mitTerraform, Ansible und LXD auf Blech und Cloud Infrastructure as Code
  • 3. Lästige und aufwändige manuelle Serverinstallation kann auf einfache Art durch automatisierte Provisionierung und Konfiguration der Infrastruktur ersetzt werden. DieserVortrag zeigt einen Ansatz, bei dem die Definition der Infrastruktur in voll maschinenlesbarer und ausführbarer Form in einem git repo anstatt in den Köpfen der (oder des) Engineers vorhanden sind. Es wird gezeigt, wie dasVerfahren sowohl auf Blech (d.h. auf lokalen physischen Maschinen) als auch in der Cloud angewendet werden kann, und somit eine grosse Übereinstimmung zwischenTest-/Integrations- und Produktionsinfrastruktur erreicht wird. Die vorgestelltenWerkzeuge sind terraform und ansible für Provisionierung und Konfigurationsmanagement, sowie lxd (nur lokal) und docker für System- und Applikationscontainer. Die vollständige Codebasis ist auf github verfügbar, so dass alle TeilnehmerInnen auch sofort mit eigenen Experimenten loslegen können. Abstract
  • 7. Was ist IaC? Definition der Infrastruktur: Ressourcen (Maschinen, Netzwerk etc.) Konfiguration (OS, Software, User etc.) Kein GUI, nur Code! alles geht in ein (git-) repo automatisierte Bereitstellung von lauffähigen Systemen on premise / in cloud Ziel: 100% Automatisierung, alles ephemer d.h. wegwerfbar
  • 8. Was möchten und können wir damit erreichen? Automatisierung: Provisionierung und Konfiguration einheitliche Umgebungen (dev/int/prod – local/cloud) alles versioniert in einem repository “single source of truth” einfache Updates (z.B. neue OSVersion) inkrementelleÄnderungen Reproduzierbarkeit schnellereVerfügbarkeit => geringeres Risiko geringere Kosten
  • 10. Tools
  • 12. Terraform Open-Source Projekt: Hashicorp implementiert in: go Provisionierung von (virtuellen) Resourcen VMs, Netzwerke etc. Plugins Cloud Providers (AWS, Azure, DigitalOcean…), Lokale Infrastruktur (LXD, OpenStack,VMware vSphere…) DSL Alternativen CloudFormation (AWS), docker-machine (docker), InfraKit (moby)
  • 13.
  • 14. Ansible Open-Source Projekt: Red Hat implementiert in: python Konfigurationsmanagement Konfiguration von bereitgestellten Ressourcen, wie: Softwareinstallation, Anpassung von Konfigurationsdateien, Einrichtung der Users etc. Strukturierung Inventar und Rollen Playbooks: Definition der Konfiguration (yaml) Roles: einzelne Aspekte der Infrastruktur (Modularisierung) Variablen: Parametrisierung (auch verschlüsselt – z.B. für Passwörter) Plugin Module: für die meisten Aufgaben vorhanden Alternativen Chef, Saltstack, Puppet
  • 15.
  • 16. Provisionierung / Konfiguration:Terraform vs. Ansible Beide sind: code-driven agentenlos (über ssh / Ansible mit python) Terraform Ansible Provisionierung von (VM-) Instanzen Konfiguration (VM + Blech) Initialisierung Verfeinerung Immutable Mutable proprietäre DSL (HCL) yaml (HashiCorp) (Red Hat)
  • 17. lxd Open-Source Projekt: Canonical - linuxcontainers implementiert in: go Systemcontainer – leichtgewichtigeVMs Hosts: div. Linux, u.a. alpine, fedora, ubuntu + snap package Images: div. Linux, u.a. alpine, centos, debian, fedora, ubuntu eigene Images als export oder .tar.gz resource constraints, nesting, live migration (checkpoint/restore) backing store: ext4, ZFS, Btrfs, LVM security: apparmor, seccomp lxd host routet IP traffic zu den containers (by default) Caveat upstream docker läuft (derzeit) nur in privilegierten Containern! d.h. root im container = root auf host
  • 18. Docker Open-Source Projekt: Docker Inc. implementiert in: go Applikationscontainer – App/Service + Umgebung Hosts: Linux (viele Distributionen), Mac,Win Images: viele vorgefertigte auf https://hub.docker.com/ einfache und reproduzierbare Erstellung eigener Images (Dockerfile) Sandbox Umgebung, ingress port mapping, transiente / persistente Daten, environment Clustering swarm: task dispatching, load-balancing, fail-over, restart policies, skalierung, rolling upgrades/rollbacks => ideal für microservices CLI + REST-API java clients: com.spotify:docker-client, com.github.docker-java:docker-java
  • 19. Containers: Docker vs. LXD Gleicher Ursprung: Linux Containers namespaces (“Virtualisierung” der Systemressourcen) cgroups (Policies für Ressourcenverwendung) Client-Server Architektur beide haben: CLI + REST API LXD Docker ganzes (Linux-) OS Einzelner Prozess (mit Umgebung) vollst. Images (tgz) Images in Layers (Delta) eigene Images unüblich eigene Images einfach (Dockerfile) leichtgewichtige VM Virtualisierung einer Applikation (Canonical) (Docker Inc.)
  • 20. Plan
  • 21. swarm cluster (project A) Cloud Setup . . .docker host (VM instance) container container container container container . . . docker host (VM instance) container container container container container . . . swarm cluster (project B) . . .docker host (VM instance) container container container container container . . . docker host (VM instance) container container container container container . . .
  • 22. bare metal (lxd host) Lokales Setup (lxd) . . . docker host (VM instance) container container container container container . . . docker host (VM instance) container container container container container . . . bare metal (lxd host) . . . docker host (VM instance) container container container container container . . . docker host (VM instance) container container container container container . . . swarm cluster project A swarm cluster project B
  • 23. Setup Steps Step 1: Management Host openssh + private key, tools: git, terraform, ansible => Ansible Step 2: LXD Host openssh + public key, lxd, images => Ansible Step 3: Provisioning (LXD Guest / CloudVM) openssh + public key, fixed IP =>Terraform Step 4: Docker Hosts docker, swarm => Ansible Step 5: Docker Containers à votre goût… => Ansible
  • 24. Szenarios / Umgebungen Umgebung Step 1 (mgt) Step 2 (lxd host) Step 3 (provisioning) Step 4 (docker) Step 5 (containers) bare x x x lxd x x x x x cloud x x x x bare: docker direkt auf OS/Blech (keine Provisionierung) lxd: docker in lxd container cloud: docker in cloud vm
  • 25. Kontrollmöglichkeiten mgt host lxd host (bare metal) docker host (lxd guest) docker host (cloud VM) docker containers lokal cloud die Pfeile symbolisieren die Kontrollmöglichkeiten via ssh / ansible (vom mgt host) resp. CLI (lxc / docker) ssh / lxc ssh ssh ssh / lxc docker docker
  • 26. Demo
  • 29. Conclusions Terraform/Ansible: DSLs (zu?) einfach einfach zu lernen manchmal work-arounds für mangelnden Sprachaustruck nötig Terraform: im Nu ein Cluster am Laufen! …und ebenso schnell wieder weggezaubert Provisionierung undVorbereitung für Ansible, dann weiter mit Ansible Ansible: für fast alles ein Plugin vorhanden wenn Plugin fehlt oder unpassend: einfach shell-Modul verwenden lxd: Experimentierlabor Viele hosts mit wenig Hardware schnell erstellt, eigene IaaS ohne grossen Aufwand für Produktion als docker host m.E. (noch) nicht geeignet (privileges) Docker: Infrastruktur als Commodity – Apps verpackt Apps laufen in jeder Umgebung (praktisch) gleich: dev/test/prod – local/cloud Handling extrem vereinfacht – drastischeVerringerung des Aufwands
  • 30. Best Practices Security first! mgmt host sichern, ssh keys, UFW auf lxd hosts etc. 100% Automation – no compromise Dockerfile / ansible / terraform / shell => alles ins (git) repo! Manchmal ist etwas Hartnäckigkeit nötig, um wirklich alles zu automatisieren… Netzwerk planen: IP Adressen der lxd hosts und containers – think big! Z.B. innerhalb 10.0.0.0/8: je ein ClassC Netz pro lxd host (+ ipv6 wenn nötig) lxd host routet ingress traffic zu containers -> static routes definieren (mit ansible oder in router/firewall) Docker Container Inheritance: aufzeichnen (DAG) Optimierung der notwendigen Layers durch Minimierung der Parents Verwendung von minimalen Basis-Images, wie z.B. Alpine Ansible: gute Struktur Was brauchen wir?Welche Roles? -> Roles zuerst als Skelett (Task Namen / Kommentare) dann Playbooks, Inventar (hosts/groups),Variablen, Secrets Ansible:Tasks möglichst idempotent mehrfache Ausführung eines playbooks sollte dasselbe Ergebnis erzielen Terraform: Status nach Destroy prüfen in seltenen Fällen wird nicht alles destroyed… Secrets Passwörter, Keys etc. geheim halten: ansible vault, secrets in docker swarm, terraform: via command line aus ansible vault
  • 33. Danke für’s Zuhören… resources: slides https://www.slideshare.net/remigius-stalder/iac-baselone17 code https://github.com/Remigius2011/iac links https://github.com/Remigius2011/iac/blob/master/doc/resources.md Bildnachweis: Motivation: https://unsplash.com/photos/oMpAz-DN-9I Tools: https://www.pexels.com/photo/industry-metal-technology-manufacturing-47729/ Plan: https://www.pexels.com/photo/architect-architecture-artist-blur-268362/ Demo: https://pixabay.com/de/blitz-teslaspule-experiment-113310/ Conclusions: https://www.pexels.com/photo/view-ape-thinking-primate-33535/ Questions: https://pixabay.com/de/frage-fragezeichen-umfrage-problem-2736480/ Code: screenshots aus https://github.com/Remigius2011/iac (intellij)