46
Managing Containers at Scale Danilo Poccia AWS Technical Evangelist @danilop danilop

Managing Containers at Scale

Embed Size (px)

Citation preview

Page 1: Managing Containers at Scale

Managing Containers at Scale

Danilo PocciaAWS Technical Evangelist

@danilopdanilop

Page 2: Managing Containers at Scale

Containers

Page 3: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2Containers

OS virtualization Process isolation

Images Automation

Page 4: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Portable

Page 5: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Flexible

Page 6: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Fast

Page 7: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Efficient

Page 8: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Page 9: Managing Containers at Scale

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Page 10: Managing Containers at Scale

Amazon EC2 Container Service (ECS)

Page 11: Managing Containers at Scale

{ "containerDefinitions": [ { "name": "simple-app", "image": "httpd:2.4", "cpu": 10, "memory": 300, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "mountPoints": [ { "containerPath": "/usr/local/apache2/htdocs", "sourceVolume": "my-vol" } ] },

{ "name": "busybox", "image": "busybox", "cpu": 10, "memory": 200, "volumesFrom": [ { "sourceContainer": "simple-app" } ], "command": [ "/bin/sh -c \"...\"" ], "essential": false } ], "volumes": [ { "name": “my-vol" } ] }

Task Definition

Page 12: Managing Containers at Scale

{ "containerDefinitions": [ { "name": "simple-app", "image": "httpd:2.4", "cpu": 10, "memory": 300, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "mountPoints": [ { "containerPath": "/usr/local/apache2/htdocs", "sourceVolume": "my-vol" } ] },

Task Definition

10 CPU units (1024 is a full CPU)500 MB of memory

Expose port 80 in containerto port 80 on host

Create and mount volumes

Essential to our task

Page 13: Managing Containers at Scale

{ "name": "busybox", "image": "busybox", "cpu": 10, "memory": 200, "volumesFrom": [ { "sourceContainer": "simple-app" } ], "command": [ "/bin/sh -c \"...\"" ], "essential": false } ], "volumes": [ { "name": “my-vol" } ] }

Task Definition

From Docker Hub

Mount volume from other container

Command to exec

Volumes

Page 14: Managing Containers at Scale

Internet

AZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

Key / Value Store

Cluster Management Engine

Page 15: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

Key / Value Store

Cluster Management Engine

Create Cluster

Page 16: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS AgentECS Agent ECS Agent ECS Agent ECS Agent ECS Agent

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management Engine

Register Container Instance(s)

Page 17: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Key / Value Store

Cluster Management Engine

Agent Communication Service API

ECS AgentECS Agent ECS Agent ECS Agent ECS Agent ECS Agent

Container Instance Container Instance Container Instance Container Instance Container Instance

Task Definitions

Task Definitions

Container Instance

Task Definitions

Register Task Definition(s)

Page 18: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS AgentECS Agent ECS Agent ECS Agent ECS Agent ECS Agent

TaskC

C CVV

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Run Task “C”

Page 19: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS AgentECS Agent ECS Agent ECS Agent ECS Agent ECS Agent

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Page 20: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS AgentECS Agent

TaskA

CV

C CV

ECS Agent

TaskA

CV

C CV

ECS Agent ECS Agent ECS Agent

Service A

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Create Service “A”

Page 21: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS AgentECS Agent

TaskA

CV

C CV

ECS Agent

TaskA

CV

C CV

ECS Agent ECS Agent

TaskA

CV

C CV

ECS Agent

Service A

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Update Service “A”

Page 22: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

ECS Agent

TaskB

C CV

Service A Service B

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Create Service “B”

Page 23: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskC

C CV

ECS Agent

TaskB

C CV

Service A Service B

V

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Run Task “C”

Page 24: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

ECS Agent

TaskB

C CV

Service A Service B

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Page 25: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

User / Scheduler

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

ECS Agent

TaskB

C CV

Service A Service B

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Custom Scheduler

Page 26: Managing Containers at Scale

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

User / Scheduler

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskA

CV

C CV

TaskB

C CV

ECS Agent

TaskB

C CV

ECS Agent

TaskA

CV

C CV

ECS Agent

TaskB

C CV

Service A Service B

Container Instance Container Instance Container Instance Container Instance Container Instance Container Instance

Key / Value Store

Cluster Management EngineTask

DefinitionsTask

DefinitionsTask

Definitions

Page 27: Managing Containers at Scale

ClusterContainer InstanceAmazon ECS Agent

Task DefinitionsTasks

Services

Page 28: Managing Containers at Scale

Designed for use with other AWS services

Elastic Load BalancingAmazon Elastic Block Store

Amazon Virtual Private CloudAWS Identity and Access Management (IAM)

AWS CloudTrail

Page 29: Managing Containers at Scale

Elastic Load Balancing

Circuit breaker

"Jtecul" by own - Own work. Licensed under CC BY-SA 3.0 via Wikimedia Commons

http://commons.wikimedia.org/wiki/File:Jtecul.jpg#/media/File:Jtecul.jpg

Best P

ractic

e

Page 30: Managing Containers at Scale

Infrastructure as Code

Manage your Cluster(s) withAWS CloudFormation + Auto Scaling

Best P

ractic

e

Page 31: Managing Containers at Scale

Extensible

Comprehensive APIsOpen source agentCustom schedulers

Page 32: Managing Containers at Scale

https://github.com/aws/amazon-ecs-agent

Page 33: Managing Containers at Scale

https://github.com/awslabs/ecs-mesos-scheduler-driver

Page 34: Managing Containers at Scale

“awslogs” driver for Amazon CloudWatch Logs

Page 35: Managing Containers at Scale

https://github.com/cloudbees/amazon-ecs-plugin

Page 36: Managing Containers at Scale

http://gliderlabs.com/registratorhttps://www.consul.io

Service Discovery via Consul with Amazon ECS

Page 37: Managing Containers at Scale

Service Discovery and Load Balancing with Weave on Amazon ECS

http://weave.works/guides/service-discovery-with-weave-aws-ecs.html

Page 38: Managing Containers at Scale

“Amazon ECS enabled Coursera to focus on releasing new software

rather than spending time managing clusters.”

Frank ChenSoftware Engineer

Page 39: Managing Containers at Scale

<demo> …

</demo>

Page 40: Managing Containers at Scale

You will soon be able to useDocker Compose and Docker Swarm

to develop your application cluster on your desktopand then scale into the AWS Cloud

Coming Soon

Page 41: Managing Containers at Scale

Open Contai

ner

Initiativ

e

Page 42: Managing Containers at Scale

Your feedback is important to AWS

Tell us what you think

Page 43: Managing Containers at Scale

Focus on You Idea

Page 44: Managing Containers at Scale

No additional costfor using Amazon ECS

You pay for the underlingresources you use

Page 45: Managing Containers at Scale

aws.amazon.com/free

Page 46: Managing Containers at Scale

Managing Containers at Scale

Danilo PocciaAWS Technical Evangelist

@danilopdanilop