Continuous deployment in LeanIX @ Bonn Agile

32
Green-Blue Deployment mit Docker, Ansible & Jenkins André Christ, Bonn Agile Meetup

Transcript of Continuous deployment in LeanIX @ Bonn Agile

Page 1: Continuous deployment in LeanIX @ Bonn Agile

Green-BlueDeploymentmitDocker,Ansible &Jenkins

AndréChrist,BonnAgileMeetup

Page 2: Continuous deployment in LeanIX @ Bonn Agile

Agenda

2

Warum ContinuousDeployment?

Wasmacht unsere Dev-OpsArchitektur aus?

Wie geht es inderPraxis?

Page 3: Continuous deployment in LeanIX @ Bonn Agile

Start-upMentality:BuildMinimalViableProducts(“MVP”)

3

Page 4: Continuous deployment in LeanIX @ Bonn Agile

VomMVPzum reifen Produkt

4Quelle:InAnlehnung an:@benorama

Page 5: Continuous deployment in LeanIX @ Bonn Agile

Elastic

Alle neu entwickelten Funktionen folgenunsererMicroservices Architektur

5

View

Controller

Model

DB

SinglePage App

REST-API

DB

REST-API

FrontendService

BackendMicroservices

InfrastrukturServices

Page 6: Continuous deployment in LeanIX @ Bonn Agile

Elastic

Green-BlueDeploymentist zentralerErfolgfaktor unserer Architektur

6

SinglePage App

REST-API

DB

REST-API

1

32 2

1

2

4

32

3

5

Komfortable Anmeldung anallen ServicesviaUnternehmensverzeichnis (AD,LDAP,etc.)

Sichere Kommunikationmit APIs–vonBrowserundzwischen Services.

Einfache Nutzung derAPIsdurch interaktiveDokumentation undgenerierte SDKs.

OAuth2/JWT

SSO(SAML)

Swagger

Docker

Green-BlueDeployment

Konsistente Paketierung undPlattform-unabhängige Auslieferung aller Services.

Kontinuierliches DeploymentundMinimierung vonMaintenance-Zeiten.

Alle: 4 5

x Detailsfolgen

Page 7: Continuous deployment in LeanIX @ Bonn Agile

Agenda

7

Warum ContinuousDeployment?

Wasmacht unsere Dev-OpsArchitektur aus?

Wie geht es inderPraxis?

Page 8: Continuous deployment in LeanIX @ Bonn Agile

Kontinuierliches DeploymentundMinimierung vonMaintenance-Zeiten

8

5

Load-Balancer(default=blue)

eam1.18

mtm1.0

Export0.8

DB,Index,Queue DB,Elastic

VorteileGreen-Blue

• „Unterbrechungsfreies“Deployment

• TestneuerVersioneninProduktionsumgebung

• SchrittweiserRollout• SchnellesRollbackzualterVersion

Herausforderungen

• MigrationvonDaten-Containern(DB)

• Session-Handling(Re-Loginnotwendig)

Page 9: Continuous deployment in LeanIX @ Bonn Agile

Kontinuierliches DeploymentundMinimierung vonMaintenance-Zeiten

9

5

Load-Balancer(default=blue)

eam1.18

eam1.19

mtm1.0

mtm1.1

Export0.8

export0.9

DB,Index,Queue DB,Elastic

Test

VorteileGreen-Blue

• „Unterbrechungsfreies“Deployment

• TestneuerVersioneninProduktionsumgebung

• SchrittweiserRollout• SchnellesRollbackzualterVersion

Herausforderungen

• MigrationvonDaten-Containern(DB)

• Session-Handling(Re-Loginnotwendig)

Page 10: Continuous deployment in LeanIX @ Bonn Agile

Kontinuierliches DeploymentundMinimierung vonMaintenance-Zeiten

10

5

Load-Balancer(default=blue)

eam1.18

eam1.19

mtm1.0

mtm1.1

Export0.8

export0.9

DB,Index,Queue DB,Elastic

VorteileGreen-Blue

• „Unterbrechungsfreies“Deployment

• TestneuerVersioneninProduktionsumgebung

• SchrittweiserRollout• SchnellesRollbackzualterVersion

Herausforderungen

• MigrationvonDaten-Containern(DB)

• Session-Handling(Re-Loginnotwendig)

Page 11: Continuous deployment in LeanIX @ Bonn Agile

Umsetzung mit drei zentralen Tools

11

“Build,ship,andrundistributedapplications”

“Building/testingsoftwareprojectscontinuously”

“ITautomationenginethatautomatesapplication

deployment,configurationmanagement,….”

Page 12: Continuous deployment in LeanIX @ Bonn Agile

ProductionServersUSProductionServersUS

Develop,Build,Test,Deploy-Toolchain

12

Develop Build Test Deploy

StagingServer

ProductionServers Europe

DeveloperMachines

Docker Hub

GitHub Jenkins Ansible

Page 13: Continuous deployment in LeanIX @ Bonn Agile

Agenda

13

Warum ContinuousDeployment?

Wasmacht unsere Dev-OpsArchitektur aus?

Wie geht es inderPraxis?

Page 14: Continuous deployment in LeanIX @ Bonn Agile

Beispiel:LeanIXWebsite

14

leanix-website leanix-website

postfix redis

nginx

etcdconfdLoad-Balancer

Container

Ressources

Key-ValueStore

UserRequest

Page 15: Continuous deployment in LeanIX @ Bonn Agile

Laufende Container

15

$docker ps

Page 16: Continuous deployment in LeanIX @ Bonn Agile

16

LIVEDEMO

Page 17: Continuous deployment in LeanIX @ Bonn Agile

Somenumbers

17

20 days

3 hours<30min

Effort for setup,learning and trouble shooting forAnsible &Jenkins

Ramp-Up of anew employee until first commit

Timeuntil afresh Serveris setup with allrequiredservices

14 days For changing our Vagrant based environment to docker&docker-compose

Page 18: Continuous deployment in LeanIX @ Bonn Agile

Issues

18

• Don’tunderestimateorchestrationeffort(“NewMonolith”)• Green/BlueMarkerinderivedcontainers• Docker Hub(Registry)oftenveryslowintheafternoon• Docker VersionUpdatescanbeveryrisky(KernelIssuewith1.9.1withAUFSFilesystem,requiredtodowngradekernel)

• Manualcleanupneededforunusedcontainersandimages• Largeimagesrequirebandwidthwhenpulled• “Trusted”images– extracheckwhichbaseimagescanbeused

Page 19: Continuous deployment in LeanIX @ Bonn Agile

Reading

19

https://blog.codecentric.de/2015/08/case-study-microservices-bei-leanix/

https://github.com/leanix

Page 20: Continuous deployment in LeanIX @ Bonn Agile

Backup

20

Page 21: Continuous deployment in LeanIX @ Bonn Agile

Komfortable Anmeldung anallen ServicesviaUnternehmensverzeichnis

21

1

A IDM-as-a-ServiceBInterner IDM1

VorteileSSO(SAML)

• SAMLIdentityProvidermittlerweilegutverbreitetinUnternehmen

• EinstandardisierterWeg:sowohl internalsauchexternallesviaSAML

Herausforderungen

• KomplexitätShibbolethundSAML-Spezifikation

• Löstnichtmaschinen-basiertesLogin(„ECP-Workflow“)

ACTIVEDIRECTORYFEDERATION SERVICES(ADFS)

C Kunden IDM

svc.leanix.net/idp

1)IDM=IdentityManagement

Page 22: Continuous deployment in LeanIX @ Bonn Agile

Sichere Kommunikation mit APIs–vonBrowserundzwischen Services

22

2

VorteileoAuth2&JWT

• SicherheitsgewinndurchdelegierteAuthentifizierung

• WenigerAbhängigkeiten:Permissions imPayload

• GleicherMechanismusauchzwischenServices

• SignierteTokens lassensichdezentralverifizieren

Herausforderungen

• VerknüpfungmitSAMLnichtstandardisiert

oAuth2ResourceServer

export images …

Token (JWT): eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhbmRyZS5jaH …Expires_in: 3400

BackendMicroservices

PrivateKey

PublicKey

Dezentrale TokenVerifizierung

JWT:Json WebTokens

Page 23: Continuous deployment in LeanIX @ Bonn Agile

Json WebTokens(JWT)ist ein Standardfür dasFormatvonTokens

23Debugger:https://jwt.io IETFStandard:https://tools.ietf.org/html/rfc7519

2

Page 24: Continuous deployment in LeanIX @ Bonn Agile

24

2 JWTbringt Vorteile insb.bei Skalierungim Vergleich zum “puren”oAuth2

oAuth2ResourceServer

export images …

Token: 31886e3b-dd8f-4b13-9434-…Expires_in: 3400

VerifyToken,GetPayload(Permissions)

BackendMicroservices

oAuth2ResourceServer

export images …

Token (JWT): eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhbmRyZS5jaH …Expires_in: 3400

BackendMicroservices

PrivateKeyPublicKey

A)oAuth2“pur”:Tokensmüssen gegenResourceSerververifiziert werden

B)oAuth2mit “JWT”:Tokenskönnendezentral verifiziert werden mit PublicKey

Page 25: Continuous deployment in LeanIX @ Bonn Agile

Einfache Nutzung derAPIdurchinteraktive Doku undgenerierte SDKs

25

3

VorteileSwagger

• Interaktive REST-APIDoku:Operationen direkt imBrowserausführbar

• Immer aktuell,dageneriert aus Quellcode

• Automatische ErzeugungvonSDK’s(z.B.Java,PHP,C#)

à Mehr unter:blog.leanix.net

Page 26: Continuous deployment in LeanIX @ Bonn Agile

Konsistente Paketierung undplattformunabhängige Auslieferung

26

Server

HostOS

Hypervisor

GuestOS

Libs

AppA

GuestOS

Libs

AppB

Virtualisation VorteileDocker

• SchnelleresDeployment

• WenigerRessourcen-Verbrauch

• ContainerpassensehrgutzurStrukturvonMicroservices

• Cloud&On-Premise

Herausforderungen

• MaturitätvonTools&Ökosystem

• LinuxKernelbenötigt(Workaroundsz.B.fürWindows&Mac)

VM VM

Server

HostOS

Docker Engine

eam mysql

Libs

Docker

Container Container

solr

Container

Libs

4

Page 27: Continuous deployment in LeanIX @ Bonn Agile

Kontinuierliches DeploymentundMinimierung vonMaintenance-Zeiten

27

5

Load-Balancer(default=blue)

eam1.18

eam1.19

mtm1.0

mtm1.1

Export0.8

export0.9

DB,Index,Queue DB,Elastic

Test

VorteileGreen-Blue

• „Unterbrechungsfreies“Deployment

• TestneuerVersioneninProduktionsumgebung

• SchrittweiserRollout• SchnellesRollbackzualterVersion

Herausforderungen

• MigrationvonDaten-Containern(DB)

• Session-Handling(Re-Loginnotwendig)

Page 28: Continuous deployment in LeanIX @ Bonn Agile

Ansible Example:Provisionservers

28

# Provisions the frontend servers---- hosts: frontend

sudo: trueroles:- {role: 'init'}- {role: 'docker'}- {role: 'updates'}

provision_server.yml

$ ansible_playbook provision_server.yml –I hosts/prod -v

hosts/prod

[frontend]srv-de-web-1.leanix.netsrv-de-web-2.leanix.net srv-us-web-1.leanix.netsrv-us-web-2.leanix.net

[backend]srv-de-app-1.leanix.netsrv-de-app-2.leanix.net srv-us-app-1.leanix.netsrv-us-app-2.leanix.net

Page 29: Continuous deployment in LeanIX @ Bonn Agile

Ansible Example:Configuresystem

29

[…]

- name: Install System Packagesapt: pkg={{ item }} state=latestwith_items: ["curl", "wget", "python-software-properties", "software-properties-

common", "daemon", "supervisor"]

- name: German kbcommand: loadkeys dechanged_when: false

- name: Set hostname on boot to short name from inventory listtemplate: src=hostname.j2 dest=/etc/hostname owner=root group=root mode=0644register: hostname_file

[…]

roles/init/tasks/main.yml

Page 30: Continuous deployment in LeanIX @ Bonn Agile

Ansible Example:Deployservice

30

[…]

- name: Start leanix synclog Docker containershell: docker run -d

--name {{ item.1.name }}-p {{ ansible_eth1.ipv4.address }}:{{ item.1.synclog_port }}:{{SERVICE_PORT }}-e SERVICE=synclog-e PROXY_SERVICE={{ PROXY_SERVICE }}-e SWAGGER_BASEPATH={{ SWAGGER_BASEPATH }}leanix/leanix-synclog

with_indexed_items: SYNCLOG_SERVICESwhen: synclog_running.results[{{ item.0 }}].rc != 0

[…]

roles/init/tasks/main.yml

Page 31: Continuous deployment in LeanIX @ Bonn Agile

Monitoring

31ELK=ElasticLogstash Kibana

Availability

Performance

Logfiles

Service Description

• Everymicroservicehasahealth-checkURL• AvailabilityCheck&ResponseTime

• ServerMetrics:CPU,Memory,etc.• Docker MetricsperContainer:CPU,Mem,…• BrowserMetrics:PageLoad,JSErrors

• Centralstorage for logfiles• Similar for ELK-Stack,butas aService

Alerting• Singlepoint for allalerts• Informs operations managers onduty

Dashboard• Dashboardwhich shows main KPIs• Running onScreensinLeanIXOffice

Page 32: Continuous deployment in LeanIX @ Bonn Agile

Geckoboard Dashboard

32Source:Geckoboard