DevOpsCon Cloud Workshop

61
Sascha Möllering | zanox AG Cloud Workshop

Transcript of DevOpsCon Cloud Workshop

Page 1: DevOpsCon Cloud Workshop

Sascha Möllering | zanox AG

Cloud Workshop

Page 2: DevOpsCon Cloud Workshop

About me

Sascha Möllering

[email protected]

Lead Engineer / DevOps Hipster

zanox AG

http://autoscaling.io

@sascha242

Page 3: DevOpsCon Cloud Workshop

About meJava Magazin 11.14

Architektur im Kontext der Cloud: Patterns und Best Practices

AWS Virtual Cloud Summit

Continuous delivery in AWS using Docker

http://aws-summit.de/

Entwickler Spezial: Docker

Über den Wolken: Ein Erfahrungsbericht zum Docker-Einsatz in der Amazon Cloud

Page 4: DevOpsCon Cloud Workshop

Agenda

• AWS Overview

• Creating a cloud service

• Real World example

• Cloud deployment

• Q&A

Page 5: DevOpsCon Cloud Workshop

How can we scale?

Page 6: DevOpsCon Cloud Workshop

RegionRegionUS-WEST (N. California)

US-WEST (N. California) EU-WEST (Ireland)

EU-WEST (Ireland)

ASIA PAC (Tokyo)

ASIA PAC (Tokyo)

ASIA PAC (Singapore)

ASIA PAC (Singapore)

US-WEST (Oregon)US-WEST (Oregon)

SOUTH AMERICA (Sao Paulo)

SOUTH AMERICA (Sao Paulo)

US-EAST (Virginia)US-EAST (Virginia)

GOV CLOUDGOV CLOUD

ASIA PAC (Sydney)

ASIA PAC (Sydney)

Regions

Regions

EU-CENTRAL (Frankfurt)

EU-CENTRAL (Frankfurt)

AWS Overview

Page 7: DevOpsCon Cloud Workshop

ZonesZones

Availability

Zone

Availability

Zone

AWS Overview

Page 8: DevOpsCon Cloud Workshop

AWS Overview

EC2: Resizable compute capacity

AutoScaling: scale up or down

Route 53: Domain Name System

ELB: Load Balancing

Elastic IP: Static IP address

Page 9: DevOpsCon Cloud Workshop

AWS Overview

RDS: Managed database service

DynamoDB: NoSQL implementation

Redshift: data warehouse solution

ElastiCache: Managed cache

Kinesis: Service for streaming data

Page 10: DevOpsCon Cloud Workshop

AWS Overview

S3: Highly-scalable object storage

CloudFront: CDN implementation

CloudWatch: Monitoring service

IAM: Identity and Access Management

EMR: Managed Hadoop

CloudFormation: Configuration Mgmt

Page 11: DevOpsCon Cloud Workshop

Starting point

• How can we leverage the Cloud?

• Our application:– Simple Java based web application

– One application

– One database

– Runs in our own DC

Page 12: DevOpsCon Cloud Workshop

Creating a cloud service

• Initial setup:– Route53 for DNS

– One Elastic IP (static IPs for the Cloud)

– One EC2 instance• Web Application

• Database

– One AZ

Page 13: DevOpsCon Cloud Workshop

Creating a cloud service

Availability Zone

Page 14: DevOpsCon Cloud Workshop

Creating a cloud service

• Simple approach to scale:– Different EC2 instance type

• More RAM• More CPU power• More IOPS

• Approach will hit a barrier

Page 15: DevOpsCon Cloud Workshop

Creating a cloud service

• Problems:– No failover– No redundancy– Database and application on one instance– Does not scale very well

Page 16: DevOpsCon Cloud Workshop

Creating a cloud service

• Separate Web Application from DB– One EC2 instance for the Web Application– One EC2 instance for the DB– Or: Managed DB service (RDS)

• One AZ

Page 17: DevOpsCon Cloud Workshop

Creating a cloud service

Availability Zone

Database

Page 18: DevOpsCon Cloud Workshop

Creating a cloud service

• Problems:– No failover– No redundancy– Does still not scale very well

Page 19: DevOpsCon Cloud Workshop

Creating a cloud service

• Add an ELB

• Add EC2 instance for Web Application

• Different AZs

• Standby DB instance– Multi AZ setup in RDS

Page 20: DevOpsCon Cloud Workshop

Creating a cloud service

Page 21: DevOpsCon Cloud Workshop

Creating a cloud service

Availability Zone

Database

Availability Zone

Database

Page 22: DevOpsCon Cloud Workshop

Creating a cloud service

• Problems:– Still limited scaling capabilities– If one EC2 instance crashes, 50% less

capability

Page 23: DevOpsCon Cloud Workshop

Creating a cloud service

• Add additional EC2 instances

• Add read replicas in RDS

Page 24: DevOpsCon Cloud Workshop

Creating a cloud service

Availability Zone

Database

Availability Zone

Database

Page 25: DevOpsCon Cloud Workshop

Creating a cloud service

• Problems:– Naive implementation– Does not leverage AWS services– Limited scaling– Can be quite expensive

Page 26: DevOpsCon Cloud Workshop

Creating a cloud service

• Refactoring

• Introduce caches to take load from DB

• Use S3 and CloudFront to ship static content

• Store session data in DynamoDB

• Add Autoscaling

Page 27: DevOpsCon Cloud Workshop

Creating a cloud service

• Autoscaling– Automatic resizing of compute clusters

based on demand– Integrated to Amazon CloudWatch– Maximum and minimum pool sizes– Autoscaling policies triggered by

CloudWatch alarms

Page 28: DevOpsCon Cloud Workshop

Creating a cloud service

Requests

Elastic Load Balancing

Latency Metrics CPU Metrics

Amazon CloudWatch

MetricMonitoring

Alarm

Notification

Scale up/down

Page 29: DevOpsCon Cloud Workshop

Creating a cloud service

Availability Zone

Auto Scaling group

Page 30: DevOpsCon Cloud Workshop

Creating a cloud service

• Started with a simple web application

• Added several Amazon services

• Managed to shift load from application to services

• Added caches and CDN

• Added Autoscaling

Page 31: DevOpsCon Cloud Workshop

Creating a cloud service

• Next steps:– SOA/Microservices – Loose coupling: decouple interactions– Amazon services, don‘t reinvent the wheel– Database federation– Database sharding

Page 32: DevOpsCon Cloud Workshop
Page 33: DevOpsCon Cloud Workshop

Docker Deployment

• Amazon Services with Docker support:

– Amazon OpsWorks*

– Elastic Beanstalk

– EC2 Container Service

*by adding a custom Docker Layer

Page 34: DevOpsCon Cloud Workshop

Docker Deployment

• On EC2 level:– Using the Docker remote API

– EC2 User Data

Page 35: DevOpsCon Cloud Workshop

Docker Deployment

• Remote API– API to access Docker daemon

– Can be bound to specific host/port

– E.g. Jenkins can trigger deployments

– GET /containers/json

Page 36: DevOpsCon Cloud Workshop

Docker Deployment

• EC2 User Data– Data to configure instance during launch

• Install Docker

• Start Daemon

• Run Docker container

Page 37: DevOpsCon Cloud Workshop

Demo

• Elastic architecture that grows and shrinks

• Multiple AZs

• Use case: simple web app

• Elastic Beanstalk and Docker

• Postgres RDS DB

Page 38: DevOpsCon Cloud Workshop

Demo

Page 39: DevOpsCon Cloud Workshop

• JHipster– Yeoman generator– Yeoman is a scaffolding tool for webapps– Creates Spring Boot/AngularJS projects

Demo

Page 40: DevOpsCon Cloud Workshop

• Support for:– Maven/Gradle– Spring Security– Spring Data JPA– Elasticsearch– MongoDB– Cassandra– ...

Demo

Page 41: DevOpsCon Cloud Workshop
Page 42: DevOpsCon Cloud Workshop

Demo

Page 43: DevOpsCon Cloud Workshop
Page 44: DevOpsCon Cloud Workshop
Page 45: DevOpsCon Cloud Workshop
Page 46: DevOpsCon Cloud Workshop
Page 47: DevOpsCon Cloud Workshop
Page 48: DevOpsCon Cloud Workshop
Page 49: DevOpsCon Cloud Workshop
Page 50: DevOpsCon Cloud Workshop
Page 51: DevOpsCon Cloud Workshop

Elastic Beanstalk

• Docker support:– Dockerrun.aws.json specifies runtime– Dockerfile is an alternative

• EC2 instances using Docker 1.6

• No direct port mapping

• Local nginx reverse proxy

• Connects to IP of Docker container

Page 52: DevOpsCon Cloud Workshop

Elastic Beanstalk

• Dockerrun.aws.json:– Specifies Docker image (support for private

registries as well)– Defines port for local nginx– Support for volumes and logging as well

Page 53: DevOpsCon Cloud Workshop

Elastic Beanstalk

Page 54: DevOpsCon Cloud Workshop

Elastic Beanstalk

But … we didn’t specify RDS connection strings in our Container?

Page 55: DevOpsCon Cloud Workshop

• RDS specific values are exposed as ENV-variables

• Mapped into the Docker container

• Used by the application to connect to Postgres

Elastic Beanstalk

Page 56: DevOpsCon Cloud Workshop

Elastic Beanstalk

Page 57: DevOpsCon Cloud Workshop

Elastic Beanstalk

• nginx local proxy

• Config in sites-enabled and conf.d

• proxy-pass is http://docker

• Maps to container-ip

Page 58: DevOpsCon Cloud Workshop

Elastic Beanstalk

Page 59: DevOpsCon Cloud Workshop

Elastic Beanstalk

Page 60: DevOpsCon Cloud Workshop

Elastic Beanstalk

Page 61: DevOpsCon Cloud Workshop

Q&A