Deep Dive:EC2 Container Service

62
AWS Pop-up Loft London

Transcript of Deep Dive:EC2 Container Service

Page 1: Deep Dive:EC2 Container Service

AWS Pop-up Loft London

Page 2: Deep Dive:EC2 Container Service

Ian Massingham @IanMmmmChief Evangelist (EMEA), AWS

Deep Dive: EC2 Container Service

Page 3: Deep Dive:EC2 Container Service

Scaling Applications

Page 4: Deep Dive:EC2 Container Service

Order UI User UI Shipping UI

Order Service

User Service

Shipping Service

Data Access

Page 5: Deep Dive:EC2 Container Service
Page 6: Deep Dive:EC2 Container Service

Order UI User UI Shipping UI

Order Service

User Service

Shipping Service

Page 7: Deep Dive:EC2 Container Service

Order UI User UI UI

Order Service Service Shipping

Service

Order UIOrder UI

User UI UIShipping UI

Order ServiceOrder

ServiceService

ServiceService

ServiceUser

Service

Shipping Service

Page 8: Deep Dive:EC2 Container Service
Page 9: Deep Dive:EC2 Container Service

What are Containers?

OS virtualization

Process isolation

Images

Automation Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 10: Deep Dive:EC2 Container Service

Container Advantages

Portable

Flexible

Fast

EfficientServer

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 11: Deep Dive:EC2 Container Service

Containers are Natural for Microservices

Simple to model

Any app, any language

Image is the version

Test & deploy same artefact

Stateless servers decrease change risk

Page 12: Deep Dive:EC2 Container Service

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Managing One Host is Straightforward

Page 13: Deep Dive:EC2 Container Service

Managing a Fleet is Hard

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

Server

Guest OS

AZ 1 AZ 2

AZ 3

Page 14: Deep Dive:EC2 Container Service

What is Amazon ECS?

Amazon EC2 Container Service (Amazon ECS) is a highly scalable, high performance container management service. You can use Amazon ECS to schedule the placement of containers across your cluster. You can also integrate your own scheduler or third-party scheduler to meet business or application specific requirements.

Page 15: Deep Dive:EC2 Container Service

Our Goals with Amazon ECS

Page 16: Deep Dive:EC2 Container Service

Container Management at Any Scale

Nothing to run

Complete state

Control and monitoring

Scale

Page 17: Deep Dive:EC2 Container Service

Flexible Container Placement

Long running applications

Batch jobs

Multiple schedulers

Page 18: Deep Dive:EC2 Container Service

Integration with the AWS Platform

Elastic Load Balancing Amazon Elastic Block Store Amazon Virtual Private Cloud Amazon CloudWatch AWS Identity and Access Management AWS CloudTrail

Page 19: Deep Dive:EC2 Container Service

Container Management

Page 20: Deep Dive:EC2 Container Service

What is a Container Manager?• Maintains available resources

• Tracks resource changes

• Accepts resource requests

• Guarantees accuracy and consistency

Page 21: Deep Dive:EC2 Container Service

CPU

Memory

Ports

Disk space

Disk IOPS

Network bandwidth

Resources

Page 22: Deep Dive:EC2 Container Service

ECS Agent

Docker

Task

Container Instance

Container

ECS Agent

Task

Container

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

Page 23: Deep Dive:EC2 Container Service

Instance Registration

register-container-instance--total-resources

[{“name”:“cpu”,“type”:“integerValue”,“integerValue”:2048},…]

Page 24: Deep Dive:EC2 Container Service

Modifying Exposed Resources

Page 25: Deep Dive:EC2 Container Service

How do you model your applications?

Page 26: Deep Dive:EC2 Container Service
Page 27: Deep Dive:EC2 Container Service

{ "environment": [], "name": "simple-demo", "image": "my-demo", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "my-vol", "containerPath": "/var/www/my-vol" } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true },

Page 28: Deep Dive:EC2 Container Service

Tasks

Shared Data Volume

Containers

launchContainer Instance

Volume Definitions

Container Definitions

Page 29: Deep Dive:EC2 Container Service

Starting a Task

API

User / Scheduler

StartTask

Page 30: Deep Dive:EC2 Container Service

Starting a Task

API

User / Scheduler

StartTask

Cluster Management Engine

Page 31: Deep Dive:EC2 Container Service

Starting a Task

API

User / Scheduler

StartTask

Cluster Management Engine

Agent Communication

Page 32: Deep Dive:EC2 Container Service

Starting a Task

API

User / Scheduler

StartTask

Cluster Management Engine

Agent Communication

Docker

Container Instance

ECS Agent

TaskContainer

WebSocket

Page 33: Deep Dive:EC2 Container Service

Starting a Task

API

User / Scheduler

StartTask

Cluster Management Engine

Agent Communication

DockerTask

Container Instance

Container

ECS Agent

TaskContainer

SubmitStateChange

Page 34: Deep Dive:EC2 Container Service

Tracking Resource Changes

Page 35: Deep Dive:EC2 Container Service

Terminated Task

API

User / Scheduler

StartTask

Cluster Management Engine

Agent Communication

DockerTask

Container Instance

Container

ECS Agent

SubmitStateChange

Page 36: Deep Dive:EC2 Container Service

Missing Container Instance

API

User / Scheduler

StartTask

Cluster Management Engine

DockerTask

Container Instance

Container

ECS Agent

?

Agent Communication

Page 37: Deep Dive:EC2 Container Service

Terminated Container Instance

API

User / Scheduler

StartTask

Cluster Management Engine

Agent Communication

Termination Notifier

DockerTask

Container Instance

Container

ECS Agent

Page 38: Deep Dive:EC2 Container Service

Guaranteeing Accuracy and Consistency

Page 39: Deep Dive:EC2 Container Service

Amazon ECS Under the Hood

IDN-1 IDN IDN+1 IDN+2 IDN+3 IDN+4 IDN+5

IDN+6

IDN+5

WRITE

READ

Page 40: Deep Dive:EC2 Container Service

Amazon ECS Under the Hood

IDN-1 IDN IDN+1 IDN+2 IDN+3 IDN+4 IDN+5

IDN+6IDN+3

IDN+5IDN+2

WRITE WRITE

READREAD

Page 41: Deep Dive:EC2 Container Service

Scalable

Page 42: Deep Dive:EC2 Container Service

Schedulers

Page 43: Deep Dive:EC2 Container Service

What is a Scheduler?• Determine desired state

• Check against current state

• Perform action

Page 44: Deep Dive:EC2 Container Service

Amazon ECS Service Scheduler

Page 45: Deep Dive:EC2 Container Service

What is a Service?• Models a long-running application

• Maintains desired state

• Optionally runs behind an Elastic Load Balancing load

balancer

Page 46: Deep Dive:EC2 Container Service

Discovering DifferencesDeployment Status Desired Pending Running

ecs-svc/1 PRIMARY 5 0 0

Minimum Healthy Maximum Healthy

50% 200%

Page 47: Deep Dive:EC2 Container Service
Page 48: Deep Dive:EC2 Container Service

Discovering DifferencesDeployment Status Desired Pending Running

ecs-svc/2 PRIMARY 10 0 0

ecs-svc/1 ACTIVE 5 0 5

Minimum Healthy Maximum Healthy

50% 200%

Page 49: Deep Dive:EC2 Container Service
Page 50: Deep Dive:EC2 Container Service

Other Considerations• ELB registration/deregistration • Permissions and errors • Task health • Scale down requests

Page 51: Deep Dive:EC2 Container Service
Page 52: Deep Dive:EC2 Container Service

Multiple Schedulers

Page 53: Deep Dive:EC2 Container Service

Amazon ECS: Scheduling

Page 54: Deep Dive:EC2 Container Service

Amazon ECS: Scheduling

Page 55: Deep Dive:EC2 Container Service

Amazon ECS: Scheduling

Page 56: Deep Dive:EC2 Container Service

Amazon ECS: Scheduling

Page 57: Deep Dive:EC2 Container Service

To recap

Page 58: Deep Dive:EC2 Container Service
Page 59: Deep Dive:EC2 Container Service

{ "environment": [], "name": "simple-demo", "image": "my-demo", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "my-vol", "containerPath": "/var/www/my-vol" } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true },

“Task Definitions”

Page 60: Deep Dive:EC2 Container Service
Page 61: Deep Dive:EC2 Container Service
Page 62: Deep Dive:EC2 Container Service

Thank YouIan Massingham @IanMmmmChief Evangelist (EMEA), AWS