continuous delivery mit docker auf openshift 3 · 2016-04-26 · continuous delivery mit docker auf...
TRANSCRIPT
Continuous Delivery mit Docker auf OpenShift 3
Daniel TschanCTA
Thomas PhiliponaCTO
GUILD42, 25.4.2016
Container HypeTODO : Vollflächiges Container Bild
©Håkan Dahlström Source: https://www.flickr.com/photos/dahlstroms/3144199355
Agenda
1. Was sind Container?
2. Anwendungsbeispiele und Herausforderungen
3. OpenShift 3
4. Continuous Delivery - ein Beispiel
5. Best Practices
Klassische Virtualisierung
Hypervisor (RHEV, VmWare, ...)
Guest Kernel
Applikation
Applikation Server
libraries
Guest Kernel
Applikation
Applikation Server
libraries
Guest Kernel
Applikation
Applikation Server
libraries
Guest 1 Guest 2 Guest n
Container Virtualisierung
Hypervisor (RHEV, VmWare, ...)
Guest Kernel
Applikation
Applikation Server
libraries
Container node
Container 1
Applikation
Applikation Server
libraries
Container 3
Applikation
Applikation Server
libraries
Container 2
Docker Container
application.war + config
Java 8 image
ubuntu:14.04 Base Image
Guest Kernel
Wildfly 9 image } read-only
Runtime FS read-write
Hie
rarc
hisc
he D
ocke
rfile
s
# buildet das Dockerfile unter ./
$ docker build .
# container von image app starten
$ docker run -p 8080:8080 app
Container und deren Infrastruktur● Container sind unveränderbar
● Aktualisierung eines Containers erfolgt über Austauschen
● Sowohl Applikation wie auch System Patches
● Kein lokales Filesystem für Applikationsdaten
● Persistent Storage
Buildinfrastruktur für ApplikationenJava, JavaScript, Ruby on Rails, Node, ...
Installation von Buildtools in verschiedenen Versionen für unterschiedliche Projekte
Exakte Umgebung die explizit für Applikation definiert wird
Wiederverwendbar, schnell, isoliert.
Java EE 7 Applikation Wildfly 9War und Config ins Image hinzufügen und Go!
FROM jboss/wildfly
ADD app-web.war /opt/jboss/wildfly/standalone/deployments/ADD standalone.xml /opt/jboss/wildfly/standalone/configuration/
Vorteile von Containern● Leichtgewichtig und schnell
● Standardisierung
● Einfach zu gebrauchen und zu erweitern
● Grosse Community DockerHub, Tool Ökosystem
● Vielzahl an Docker Images verfügbar
● Kann «Works on my Machine» Probleme ausmerzen
Herausforderungen: Sicherheit (1/2)
Quelle: http://www.banyanops.com/blog/analyzing-docker-hub/ Mai 2015: Jayanth Gummaraju, Tarun Desikan and Yoshio Turner
64 % aller Docker Images auf Docker Hub der offiziellen Repositories haben Sicherheitslücken:
ShellShock (bash)
Heartbleed (OpenSSL)
Poodle (OpenSSL)
...Alle Docker Images 2015 erstellt
0%
10%
20%
30%
40%
50%
60%
70%
80%
36%40%
64%
74%
High Priority High and Medium Priority
Herausforderungen: Sicherheit (2/2)● Prozesse behandeln als würden sie auf Host laufen
● Prozesse nicht als root laufen lassen
● Nur notwendige Ports öffnen
● SELinux oder AppArmor im Container einsetzen
Quellen: https://opensource.com/business/14/7/docker-security-selinuxhttp://www.pro-linux.de/news/1/22315/docker-erh%C3%B6ht-die-sicherheit.html
Herausforderungen: Betrieb
Monitoring
Logserver
Storage
JenkinsMailserverDB Server
Backup
Network
LifecycleContainer u. Infrastruktur
Was ist OpenShift 3?
“next generation PaaS” OpenShift Enterprise V3 von Red Hat
Neu Implementation, V2 wurde verworfen und komplett neu gebaut.
OpenShift 3
Container Platform as a Service (PaaS)
Multinode Platform, um Applikationen in Containern zu betreiben
One Platform runs it all!
Fancy CLI und GUI (Selfservice)
Container Security enabled
Node 3
Node n
Node 2
Node 5
Node 1
Node 4
Compute Nodes
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Node 3
Node n
Node 2
Node 5
Node 1
Node 4
Applikationen laufen in Pods Docker
Registry
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Master
API
Data Store
SchedulerJenkins
DEV
SCM(git / svn)
OPS
OSE 3 MasterNode 3
Node n
Node 2
Node 5
Node 1
Node 4
Docker Registry
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Master
API
Data Store
SchedulerJenkins
DEV
SCM(git / svn)
OPS
Replication Controller Node 3
Node n
Node 2
Node 5
Node 1
Node 4
Management/ Replication
Docker Registry
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Master
API
Data Store
SchedulerJenkins
DEV
SCM(git / svn)
OPS
Container FailsNode 3
Node n
Node 2
Node 5
Node 1
Node 4
Management/ Replication
Docker Registry
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Master
API
Data Store
SchedulerJenkins
DEV
SCM(git / svn)
OPS
Kubernetes restarted den Pod Node 3
Node n
Node 2
Node 5
Node 1
Node 4
Management/ Replication
Docker Registry
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Master
API
Data Store
SchedulerJenkins
DEV
SCM(git / svn)
OPS
Persistent StorageNode 3
Node n
Node 2
Node 5
Node 1
Node 4
Management/ Replication
Docker Registry
PersistentStorage
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Master
API
Data Store
SchedulerJenkins
DEV
SCM(git / svn)
OPS
RoutingNode 3
Node n
Node 2
Node 5
Node 1
Node 4
Management/ Replication
Routing Layer (http / https) HA Proxy
Docker Registry
PersistentStorage
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Beispiel OSE 3 Projekte Docker
Registry
PersistentStorage
Via Route im Netz verfügbarLoadbalancing auf Pods
Verbunden über transparentes Software Defined Network (SDN)
https://a2.ose.puzzle.ch
10.0.0.1
10.1.0.5
10.1.0.2 10.1.0.3
10.0.0.4
https://a1.ose.puzzle.ch
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Beispiel Flexibilität Router Config● OpenShift HAProxy config erweitert
● LetsEncrypt requests auf spezielles LetsEncrypt POD umleiten
● LetsEncrypt POD bestellt von Browsern akzeptiertes Zertifikat
● LetsEncrypt POD installiert Zertifikat
Workflow: Source To Image (S2I)
Git ?
s2i builder imageeg. openshift/ruby-22-centos7
code
code
My App
1.push code to git2.Webhook3.clone repo4.evaluate builder5.assemble image6.push to registry and deploy
12
3
4
5
MyApplicationMyApplication MyApp
6
Ruby, Java, php, NodeJs, ...
Continuous Integration
● Versionsverwaltung
● kompilieren und testing
● Integration der Software
● Reporting
● Deployment auf Integration
● Erweiterung von CI
● Ein Artefakt für alle Umgebungen
● Voll automatisches Deployment auf Knopfdruck
● Prod Release auf Knopfdruck
● Jedes Release wird automatisch in Produktion deployed
● Unterbruchsfreihe Deployments nötig
● Blau - Grün Deployments
Continuous Delivery Continuous Deployment
Toplevel CI / CD Workflow
Git
code
Compile, Unittests
Integration Tests, Package
Deploy to Dev
Acceptance Tests
Deploy to UAT env
Manual Tests
Deploy to Prod
Konkretes Beispiel Java mit Maven (1)
Git
code
Jenkins
code
Artefact Repo
artefact
develop build release deploy
Jenkins
code
Jenkins
artefactcfg
+ Unit test+ Integration test+ Code analyse
Konkretes Beispiel Java mit Maven (2)
acceptance tests
Jenkins
test
Jenkins
artefactcfg
deploy to UAT manual test
Jenkins
artefactcfg
deploy to Prod
Beispiel Java App OSE 3 Projekt Docker
Registry
PersistentStorage
https://app.ose.puzzle.ch
Virtual Private Cloud Public CloudPhysical
RHEL 7.2 / ATOMIC
Jenkins Pipeline Plugin
Build Jobs als Groovy Scripts implementieren.
Build Job liegt im Git Repository neben dem Code
Basis Image Update triggered die Jenkins Pipeline
Jenkins verfügt nur noch über die Umgebungsinfo
● Git / Artifactory / OpenShift Accounts
https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin
Groovy Buildscriptstage 'Build'
sh "${mvnHome}/bin/mvn versions:set -DnewVersion=${buildVersion}"
sh "${mvnHome}/bin/mvn clean install"
// prepare Dockerfile and Context
sh "tar cvfz docker-context.tar.gz Dockerfile target/javaee7-wildfly-example.war"
archive 'docker-context.tar.gz'
KonfigurationJava Property Files, liegen im Classpath
Das selbe Artefakt auf allen Umgebungen
Integration in bestehende Konfigurationsmanagement
Puppet / Ansible / AMW ist via Lifecycle Hooks während deployment integrierbar
Automated Database Migration
DB Migrationen sind teil der Applikation und werden durch die Applikation ausgeführt.
$ php bin/console doctrine:schema:update
$ rake db:migrate
Automated Database Migration
Datenbank kennt den eigenen Schemastand
Beim Starten der neuen Applikation / Lifecycle Hook wird die Migration durchgeführt.
Bei Rolling Update muss die DB abwärtskompatibel sein
Konzepte: Automated Database Migration
V41 V42 V43
dropColumn
dropColumn
dropTable
dropTable
MyApplicationMyApplication App
DB
Konzepte: Automated Database Migration
App.v41 App.v42
... oldColumn newColumn ...
guild42 guild42
Db Trigger
Logging auf Standard out
Docker Best Practice
Plattform aggregiert Logs und stellt sie auf eigenen EFK Stack
If It Hurts, Do It More Frequently, and Bring the Pain Forward
Quelle: Jez Humble, David Farley, Continuous Delivery, Pearson Education, Inc. 2011
Schnelles Feedback
Fach, KundePO Entwicklung Produktion
DeploymentIdee, Feature, Bug
Schnelles qualifiziertes Feedback
Fazit
OSE 3 als Basis für Continuous Integration und Delivery geeignet.
Automatisierung ist der Schlüssel zum Erfolg.
Entwickler kann Container lokal entwickeln und testen.