continuous delivery mit docker auf openshift 3 · 2016-04-26 · continuous delivery mit docker auf...

60
Continuous Delivery mit Docker auf OpenShift 3 Daniel Tschan CTA Thomas Philipona CTO GUILD42, 25.4.2016

Upload: others

Post on 20-May-2020

6 views

Category:

Documents


0 download

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

Was sind Container ?

1

LXC, VServer, Free BSD Jails, Google...

Nichts Neues !

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

Anwendungsbeispiele

2

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/

Chancen/Herausforderungen

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 basiert auf etablierten Open Source Konzepten

Docker Kubernetes

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

RHEL 7.2 als Basis

Virtual Private Cloud Public CloudPhysical

RHEL 7.2 / ATOMIC

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

Wie kommt die Software auf OpenShift?

Workflows● Docker Build

● Prebuilt Image

● Customer Builder

● Source To Image

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, ...

CI / CD Workflow

4

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

Java EE Beispiel Pipeline

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'

Stage View

Best practices

4

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

Fazit

4

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.

Resources

https://docs.openshift.com

Q & A

19.5. OpenShift Techlab in BE

Thank you!