Managing Containers at Scale

Preview:

Citation preview

Managing Containers at Scale

Danilo PocciaAWS Technical Evangelist

@danilopdanilop

Containers

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2Containers

OS virtualization Process isolation

Images Automation

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Portable

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Flexible

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Fast

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Efficient

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

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Host

Guest OS

Bins / Libs Bins / Libs

App 1 App 2

Amazon EC2 Container Service (ECS)

{ "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

{ "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

{ "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

Internet

AZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

Key / Value Store

Cluster Management Engine

Internet

ClusterAZ #1 AZ #2 AZ #3

AmazonECS

Agent Communication Service API

Key / Value Store

Cluster Management Engine

Create Cluster

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)

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)

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”

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

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”

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”

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”

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”

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

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

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

ClusterContainer InstanceAmazon ECS Agent

Task DefinitionsTasks

Services

Designed for use with other AWS services

Elastic Load BalancingAmazon Elastic Block Store

Amazon Virtual Private CloudAWS Identity and Access Management (IAM)

AWS CloudTrail

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

Infrastructure as Code

Manage your Cluster(s) withAWS CloudFormation + Auto Scaling

Best P

ractic

e

Extensible

Comprehensive APIsOpen source agentCustom schedulers

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

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

“awslogs” driver for Amazon CloudWatch Logs

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

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

Service Discovery via Consul with Amazon ECS

Service Discovery and Load Balancing with Weave on Amazon ECS

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

“Amazon ECS enabled Coursera to focus on releasing new software

rather than spending time managing clusters.”

Frank ChenSoftware Engineer

<demo> …

</demo>

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

Open Contai

ner

Initiativ

e

Your feedback is important to AWS

Tell us what you think

Focus on You Idea

No additional costfor using Amazon ECS

You pay for the underlingresources you use

aws.amazon.com/free

Managing Containers at Scale

Danilo PocciaAWS Technical Evangelist

@danilopdanilop

Recommended