Top Banner
Docker Powering Radical Agility Docker Berlin Meetup 2015-06-23 [email protected] @try_except_
55

Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

Aug 13, 2015

Download

Technology

Henning Jacobs
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

DockerPowering Radical AgilityDocker Berlin Meetup [email protected] @try_except_

Page 2: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

DOCKER-BASED DEPLOYMENT

STUPS CLOUD PLATFORM

HISTORY

RADICAL AGILITY & ARCHITECTURE PRINCIPLES

AGENDA

Page 3: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

15 countries3 fulfillment centers15+ million active customers2.2+ billion € revenue 2014130+ million visits per month8.000+ employees

ONE OF EUROPE’S LARGEST ONLINE FASHION RETAILERS

Visit us: tech.zalando.com

Page 4: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

A BRIEF HISTORY OF ZALANDOTECHNOLOGY

Page 5: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

A BRIEF HISTORY OF ZALANDO TECH

Page 6: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

ZALANDO PLATFORM

Page 7: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

~70% of all applications

WAR deployment

Single deployment tool

On-premise data center

MAIN PRODUCTION STACK SINCE 2010

Page 8: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

Platform

THE CHALLENGE

Platform team

request serversdeploy

Page 9: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

Platform

THE CHALLENGE

80+ delivery teams

Platform team

deploy

request serversrequest storage

Page 10: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

RADICAL AGILITY

Page 11: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

GOAL

DELIVER AMAZING PRODUCTS EFFICIENTLY AT SCALE, AND FEELING GREAT ABOUT IT.

Page 12: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

3 PRINCIPLES

Page 13: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

PURPOSE

Page 14: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

AUTONOMY

Page 15: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

MASTERY

Page 16: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

ARCHITECTURE

AN ARCHITECTURE FOR INNOVATION

Page 17: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

API FIRST

Page 18: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

REST

Page 19: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

SAAS

Page 20: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

MICROSERVICES

Page 21: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

CLOUD

Page 22: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

STUPSSTUPS To Unleash Penguin Swarms

Page 23: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

AWS

STUPS

DOCKERDEPLOY

SSH ACCESS

AUDIT REPORTS

FULL AWS ACCESS

A PLATFORM ON TOP OF AMAZON WEB SERVICES

Page 24: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

AUTONOMY AND COMPLIANCE

STUPS offers maximum freedom for developers while enabling near-real-time audit compliance for every single application.

Page 25: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

One AWS account per Team

Deployment with Docker

Managed SSH Access

REST/OAuth 2.0 mandatory

Supports Traceability of Changes

STUPS IN A NUTSHELL

Page 26: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

Public Internet

*.foo.example.org *.bar.example.org

Team “Foo” Team “Bar”ELB ELB

EC2Instance

EC2InstanceEC2

InstanceEC2Instance

EC2InstanceEC2

InstanceData Center LB

EC2InstanceEC2

InstanceLegacyInstances

ISOLATED AWS ACCOUNTS

Page 27: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

DEPLOYMENT

Page 28: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

IMMUTABLE STACKS

Page 29: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

AWS

DEPLOYMENT WITH SENZA

Senza CLI

Pier One

docker pull

docker push

Taupage

Page 30: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

FROM zalando/openjdk:8u40-b09-4

EXPOSE 8080

COPY target/hello-world.jar /COPY target/scm-source.json / CMD java $(java-dynamic-memory-opts) ↲ -jar /hello-world.jar

DOCKERFILE

Page 31: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

$ docker build -t ↲ pierone.example.org/myteam/hello-world:0.2 .

$ pierone loginGetting OAuth2 token "pierone".. OKStoring Docker client configuration in ~/.dockercfg.. OK

$ docker push pierone.example.org/myteam/hello-world:0.2

DOCKER BUILD & PUSH

Page 32: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

$ pierone tags myteam hello-world

Team │Artifact │Tag │Created│By | myteam hello-world 0.1-andre-test 13d ago ahartmann

myteam hello-world 0.1 3d ago ahartmann

myteam hello-world 0.2 3m ago hjacobs

$ pierone scm myteam hello-world 0.2

Tag│Author │URL │Revision │Status│Created│By |

0.2 hjacobs git:git@github.. 442b7502 10m ago hjacobs

VERIFY IMAGE UPLOAD

Page 33: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

PIER ONE DOCKER REGISTRY✓ S3 backend to store images ✓ OAuth2 integration ✓ Team repositories ✓ Immutable tags & scm-source.json ✓ JVM-based (Clojure) ✓ Command line interface (Python)

Page 34: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

SENZA: DEFINITION YAML

SenzaInfo:

StackName: hello-world

Parameters:

- ImageVersion:

Description: "Docker image version of Hello World."

SenzaComponents:

- Configuration:

Type: Senza::StupsAutoConfiguration # auto-detect network setup

- AppServer: # will create a launch configuration and ASG with scaling triggers

Type: Senza::TaupageAutoScalingGroup

InstanceType: t2.micro

SecurityGroups: [app-hello-world]

ElasticLoadBalancer: AppLoadBalancer

TaupageConfig:

runtime: Docker

source: "stups/hello-world:{{Arguments.ImageVersion}}"

ports:

8080: 8080

Page 35: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

SENZA: STACK DEPLOYMENT

$ senza create hello-world.yaml 1 0.2

Generating Cloud Formation template.. OK

Creating Cloud Formation stack hello-world-1.. OK

$ senza events hello-world.yaml 1Stack Name│Ver.│Resource Type │Resource ID │Status │Status Reason │Event Time

hello-world 1 CloudFormation::Stack hello-world-1 CREATE_IN_PROGRESS User Initiated 10m ago

...

hello-world 1 CloudFormation::Stack hello-world-1 CREATE_COMPLETE 6m ago

Page 36: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

docker run -d --log-driver=syslog ↲ --restart=on-failure:10 ↲ -e DB_SUBNAME=.. ↲ -v /meta:/meta:ro ↲ -e CREDENTIALS_DIR=/meta/credentials ↲ -p 8080:8080 -p 7979:7979 ↲ -u 999 ↲ pierone.example.org/stups/pierone:0.5

TAUPAGE: DOCKER COMMAND LINE

Page 37: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

SENZA: MANAGE STACKS

Page 38: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

LOGGING

Page 39: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

docker run .. --log-driver=syslog ..

/etc/rsyslog.d/24-application.conf:syslogtag, startswith, "docker" ↲ /var/log/application.log

/etc/logrotate.d/..Don’t forget log rotation..

TAUPAGE: DOCKER SYSLOG

Page 40: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

APPLICATION LOGS: TAUPAGE SUPPORTS LOGENTRIES AND SCALYR

Page 41: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

SSH ACCESS

Page 42: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

SSH ACCESS: TIME-LIMITED ACCESS TO ANY TEAM SERVER

Page 43: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

MONITORING

Page 44: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

TODO: Screenshot

ZMON

Page 45: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

ZMON APPLIANCE

*.foo.example.org *.bar.example.org

Team “Foo” Team “Bar”

EC2Instance

EC2InstanceEC2

InstanceEC2

Instance

ZMON Appliance

ZMON Appliance

KairosDB

EC2Instance

EC2Instance

ZMONController

ELB ELB

Page 46: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

HYSTRIX TURBINE

Page 47: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

FULLSTOP: REPORT VIOLATIONS

Page 48: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

DOCKER?

Page 49: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

● Ubuntu & OpenJDK base image● Log to STDOUT● Config via environ. vars (+ KMS decryption)● Non-root execution● Persistence via EBS mounts● Immutable stacks, no orchestration● DNS endpoints, etcd e.g. for Hystrix streams

RECAP: DOCKER IN STUPS

Page 50: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

STUPS Frontpagehttp://stups.ioSTUPS Documentationhttp://docs.stups.ioGitHub Repositorieshttps://github.com/zalando-stupsTrying out Senza and Taupagehttp://docs.stups.io/en/latest/user-guide/standalone-deployment.html

LINKS

Page 51: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

QUESTIONS?

http://stups.io@try_except_

Page 52: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

BACKUP

Page 53: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

STUPS COMPONENTS

Page 54: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

● ELB forinbound traffic

● NAT instancesfor outbound

● HTTPS Only● Internal subnets

for app instances

DMZ DMZ DMZ

internalinternal

eu-west-1a eu-west-1b eu-west-1c

ELB

EC2

internal

EC2

NAT

STUPS: AWS ACCOUNT VPC SETUP

Page 55: Docker Berlin Meetup June 2015: Docker powering Radical Agility @ Zalando Tech

Pier One Docker Reg.

build

approve

EC2 Instances

Docker Container

Application “myapp”issue_management: Jira

Application Version “1.0”artifact: docker/myart:1.0

Taupage AMI

Ticket System

Kio Application RegistryTicket System

SCM

Image “docker/myart:1.0”commit: afb123Issue “ABC-123”

spec: [...]

Commit “afb123”msg: ABC-123..

✓ specs approved✓ artifact tested✓ artifact approved

STUPS: TRACEABILITY