scheduling containers on amazon ecs

56
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Dan Gerdesmeier, Sr. Software Development Engineer June 21 st , 2016 Scheduling Containers on Amazon ECS

Upload: amazon-web-services

Post on 16-Apr-2017

1.055 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Scheduling Containers on Amazon ECS

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Dan Gerdesmeier, Sr. Software Development Engineer

June 21st, 2016

Scheduling Containers on

Amazon ECS

Page 2: Scheduling Containers on Amazon ECS
Page 3: Scheduling Containers on Amazon ECS

What is Amazon ECS?

Amazon EC2 Container Service (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 4: Scheduling Containers on Amazon ECS

Agenda

Introduction to Scheduling

Resource Management in ECS

Scheduling in ECS

Demo

Page 5: Scheduling Containers on Amazon ECS

Introduction to Scheduling

Page 6: Scheduling Containers on Amazon ECS

Why is Scheduling Important?

Utilization and Cost

Application Performance

Placement and Launch Time

Application Availability

Page 7: Scheduling Containers on Amazon ECS

Types of Schedulers

Monolithic Schedulers

Two-Level Schedulers

Shared-State Schedulers

Page 8: Scheduling Containers on Amazon ECS

Monolithic Scheduler

Page 9: Scheduling Containers on Amazon ECS

c3.xlarge

c3.xlarge

c3.xlarge

r3.8xlarge

r3.8xlarge

r3.8xlarge

c3.8xlarge

c3.8xlarge

c3.8xlarge

c3.4xlarge

c3.4xlarge

c3.4xlarge

r3.2xlarge

r3.2xlarge

r3.2xlarge

Scheduler

Page 10: Scheduling Containers on Amazon ECS

Monolithic Scheduler

Pros

• Entire State

• Consistent View

• Easy to Understand

Cons

• Head-of-Line blocking

• Difficult to maintain

• Single Point of Failure

Page 11: Scheduling Containers on Amazon ECS

Two-Level Scheduling

Page 12: Scheduling Containers on Amazon ECS

c3.xlarge

c3.xlarge

c3.xlarge

r3.8xlarge

r3.8xlarge

r3.8xlarge

c3.8xlarge

c3.8xlarge

c3.8xlarge

c3.4xlarge

c3.4xlarge

c3.4xlarge

r3.2xlarge

r3.2xlarge

r3.2xlarge

Resource Manager

Scheduler 1 Scheduler 2 Scheduler 3

Page 13: Scheduling Containers on Amazon ECS

Two-Level Scheduling

Pros

• Avoids Contention

• Enables Multiple

Schedulers

Cons

• Partial State

• Difficult to Repartition

• Difficult to Achieve High

Utilization

Page 14: Scheduling Containers on Amazon ECS

Shared State

Page 15: Scheduling Containers on Amazon ECS

c3.xlarge

c3.xlarge

c3.xlarge

r3.8xlarge

r3.8xlarge

r3.8xlarge

c3.8xlarge

c3.8xlarge

c3.8xlarge

c3.4xlarge

c3.4xlarge

c3.4xlarge

r3.2xlarge

r3.2xlarge

r3.2xlarge

Resource Manager

Scheduler 1 Scheduler 2 Scheduler 3

Page 16: Scheduling Containers on Amazon ECS

c3.xlarge

c3.xlarge

c3.xlarge

r3.8xlarge

r3.8xlarge

r3.8xlarge

c3.8xlarge

c3.8xlarge

c3.8xlarge

c3.4xlarge

c3.4xlarge

c3.4xlarge

r3.2xlarge

r3.2xlarge

r3.2xlarge

Resource Manager

Scheduler 1 Scheduler 2 Scheduler 3

Page 17: Scheduling Containers on Amazon ECS

Shared State Scheduling

Pros

• Full State

• Enables Multiple

Schedulers

• No Head-Of-Line

Blocking

Cons

• Contention can Slow

Progress

• Multiple Copies of State

• Stale Information

Page 18: Scheduling Containers on Amazon ECS

Tiered Scheduling

Page 19: Scheduling Containers on Amazon ECS

c3.xlarge

c3.xlarge

c3.xlarge

r3.8xlarge

r3.8xlarge

r3.8xlarge

c3.8xlarge

c3.8xlarge

c3.8xlarge

c3.4xlarge

c3.4xlarge

c3.4xlarge

r3.2xlarge

r3.2xlarge

r3.2xlarge

Resource Manager

Scheduler 1

Page 20: Scheduling Containers on Amazon ECS

Resource Management

Page 21: Scheduling Containers on Amazon ECS

Maintains Available Resources

Tracks Resource Changes

Accepts Resource Requests

Guarantees Accuracy and Consistency

What is a Resource Manager?

Page 22: Scheduling Containers on Amazon ECS

CPU

Memory

Ports

Disk Space

Disk IOPS

Network Bandwidth

Resources

Page 23: Scheduling Containers on Amazon ECS

ECS

Agent

Docker

Task

Container Instance

Container

ECS Agent

Task

Container

Page 24: Scheduling Containers on Amazon ECS

Available Resources

register-container-instance --total-resources

[

{

“name” : “cpu”,

“type” : “integerValue”,

“integerValue” : 2048

},

]

Page 25: Scheduling Containers on Amazon ECS

Modifying Exposed Resources

Page 26: Scheduling Containers on Amazon ECS

Requesting Resources

register-task-definition -–family demo –-cli-input-json

{

"name": "simple-demo",

"image": "my-demo",

"cpu": 10,

"memory": 500,

"portMappings": [

{

"containerPort": 80,

"hostPort": 80

}

...

}

Page 27: Scheduling Containers on Amazon ECS

Accepting Resource Requests

Page 28: Scheduling Containers on Amazon ECS

Tasks

Shared Data Volume

Containers

launchContainer

Instance

Volume Definitions

Container Definitions

Page 29: Scheduling Containers on Amazon ECS

Starting a Task

API

User /

Scheduler

StartTask

Page 30: Scheduling Containers on Amazon ECS

Starting a Task

API

User /

Scheduler

StartTask

Cluster Management Engine

Page 31: Scheduling Containers on Amazon ECS

Starting a Task

API

User /

Scheduler

StartTask

Cluster Management Engine

Agent Communication

Page 32: Scheduling Containers on Amazon ECS

Starting a Task

API

User /

Scheduler

StartTask

Cluster Management Engine

Agent Communication

Docker

Container Instance

ECS Agent

Task

Container

WebSocket

Page 33: Scheduling Containers on Amazon ECS

Starting a Task

API

User /

Scheduler

StartTask

Cluster Management Engine

Agent Communication

Docker

Task

Container Instance

Container

ECS Agent

Task

Container

SubmitStateChange

Page 34: Scheduling Containers on Amazon ECS

Tracking Resource Changes

Page 35: Scheduling Containers on Amazon ECS

Terminated Task

API

User /

Scheduler

StartTask

Cluster Management Engine

Agent Communication

Docker

Task

Container Instance

Container

ECS Agent

SubmitStateChange

Page 36: Scheduling Containers on Amazon ECS

Missing Container Instance

API

User /

Scheduler

StartTask

Cluster Management Engine

Docker

Task

Container Instance

Container

ECS Agent

?

Agent Communication

Page 37: Scheduling Containers on Amazon ECS

Terminated Container Instance

API

User /

Scheduler

StartTask

Cluster Management Engine

Agent Communication

Termination

Notifier

Docker

Task

Container Instance

Container

ECS Agent

Page 38: Scheduling Containers on Amazon ECS

Guaranteeing Accuracy and

Consistency

Page 39: Scheduling Containers on Amazon ECS

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: Scheduling Containers on Amazon ECS

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: Scheduling Containers on Amazon ECS

Scheduling

in ECS

c3.xlarge

c3.xlarge

c3.xlarge

r3.8xlarge

r3.8xlarge

r3.8xlarge

c3.8xlarge

c3.8xlarge

c3.8xlarge

c3.4xlarge

c3.4xlarge

c3.4xlarge

r3.2xlarge

r3.2xlarge

r3.2xlarge

Page 42: Scheduling Containers on Amazon ECS

ECS Schedulers

Batch Jobs

ECS Task scheduler

Run tasks once

Batch jobs

RunTask (random)

StartTask (placed)

Long-Running Apps

ECS Service scheduler

Health management

Scale-up and scale-down

AZ aware

Grouped Containers

Page 43: Scheduling Containers on Amazon ECS

Custom Schedulers

1. Calls the ECS List* and Describe* API operations to

determine the current state of the cluster.

2. Selects one (or more) container instances according to

the logic implemented.

3. Calls StartTask API to start a task on the selected

container instance.

Page 44: Scheduling Containers on Amazon ECS

Scheduling API Examples

start-task --cluster default--task-definition demo:1--container-instance be21c208-1554-4e38-b9e2-fe236bf0a555

run-task --task-definition demo:1

create-service--task-definition demo:1--service-name demo-service--desired-count 1--deployment-configuration

maximumPercent=200, minimumHealthyPercent=100

Page 45: Scheduling Containers on Amazon ECS

Integration with third party schedulers

ECS allows you to use third party schedulers, e.g.

Marathon and Chronos

Integration via ECS API

For Mesos schedulers, the ECSSchedulerDriver interprets

the command given when scheduling jobs with Mesos and

starts a task with TaskDefinition family:revision

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

Page 46: Scheduling Containers on Amazon ECS

Multiple Schedulers on the Same Cluster

Page 47: Scheduling Containers on Amazon ECS

Amazon ECS Service Scheduler

Page 48: Scheduling Containers on Amazon ECS

Service Scheduling Responsibilities

Determine Desired State

Check Against Current State

Perform Action

Page 49: Scheduling Containers on Amazon ECS

Discovering Differences

Deployment Status Desired Pending Running

ecs-svc/1 PRIMARY 5 0 0

Minimum Healthy Maximum Healthy

50% 200%

Page 50: Scheduling Containers on Amazon ECS

Steady State

Determine

Placement Options

Deploy Task

Service State Machine

RUNNING == DESIRED

RUNNING != DESIRED &&

STATUS == PRIMARY

ALL_RUNNING < MAX_HEALTHY

Page 51: Scheduling Containers on Amazon ECS

Discovering Differences

Deployment 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 52: Scheduling Containers on Amazon ECS

Steady State

Determine

Placement Options

Deploy Task

RUNNING == DESIRED

RUNNING != DESIRED &&

STATUS == PRIMARY

ALL_RUNNING < MAX_HEALTHY

Service State Machine

Clear Deployment Kill Task

ALL_RUNNING >

MAX_HEALTHY

RUNNING != DESIRED &&

STATUS == ACTIVE

Mark Inactive

ALL_RUNNING == 0

Page 53: Scheduling Containers on Amazon ECS

Steady State

Determine

Placement Options

Deploy Task

RUNNING == DESIRED

RUNNING != DESIRED &&

STATUS == PRIMARY

ALL_RUNNING <

MAX_HEALTHY

Service State Machine

Clear Deployment Wait for Drain

ALL_RUNNING >

MAX_HEALTHY

RUNNING != DESIRED &&

STATUS == ACTIVE

Mark Inactive

ALL_RUNNING == 0

Deregister & Kill

Task

Register ELB

Page 54: Scheduling Containers on Amazon ECS

Other Considerations

Task AutoScaling

Availability Zone Balancing

Permissions and Errors

Task Health

Page 55: Scheduling Containers on Amazon ECS

Demo

Page 56: Scheduling Containers on Amazon ECS

Thank You!