AWS ECS

2016-08-13  本文已影响612人  abrocod

https://www.linkedin.com/pulse/tutorial-deploying-your-first-docker-container-aws-ec2-wootton (Good)

Basic

why we need container orchestration?

Designing robust and performant distributed clustering systems is notoriously difficult, so tools such as Docker Swarm, Mesos and Kubernetes give us that capability without needing to build it ourselves. ECS takes this one step further and takes away the need to setup, run and administer the orchestration layer. For this reason, ECS is definetly something people developing applications using containers should be looking at closely.

ECS Container Agent

The EC2 servers in your cluster run an ECS agent, which is a simple process which connects from the host into the centralised ECS service. The ECS agent is responsible for registering the host with the ECS service, and handling incoming requests for container deployments or lifecycle events such as requests to start or stop the container.

When creating new servers, we can either configure the ECS instance manually, or use a pre-built AMI which already has it configured.

Through Werners blog, we are told that the centralised service has a logical seperation between the 'directory' of container state (the cluster manager) and the scheduling engine which is controlling the deployments of containers onto hosts. The motivation behind this was to make the scheduling of containers pluggable, so we could eventually use other schedulers such as Mesos or even custom developed container schedulers for more finely grained control of which containers run where.

ECS Task

Task definitions are split into four basic parts: the task family, the IAM task role, container definitions, and volumes. The family is the name of the task, and each family can have multiple revisions. The IAM task role specifies the permissions that containers in the task should have. Container definitions specify which image to use, how much CPU and memory the container are allocated, and many more options. Volumes allow you to share data between containers and even persist the data on the container instance when the containers are no longer running. The family and container definitions are required in a task definition, while volumes are optional.

ECS Service

Services are how ECS provides resilience When started, the service will monitor that the underlying task is alive and running with the correct number of instances and the correct number of underlying containers. If the task stops or becomes unresponsive or unhealthy, the service will request that more tasks are started in their place, cleaning up as necessary.

Life cycle of using ECS

ECS with ELB and AutoScaling

In the example above, we connected directly into one of the three containers. This is not very robust as the container could theoretically die and be re-spawned on a different server, meaning the container specific IP address becomes invalid.

Instead, we can register our services dynamically with EC2 Elastic Load Balancers (ELBs). As the underlying tasks start and stop and move around the pool of EC2 instances, the ELB is kept up to date via the service so traffic is routed accordingly.

ECS integrates with EC2 Autoscaling well, and is currently the preferred way for growing the cluster as it comes under load.

Autoscaling works by monitoring metrics such as CPU, memory and IO, and adding nodes into or removing nodes from the pool as certain conditions are breached.

New nodes generated will automatically register with the ECS cluster and will then be eleigible for new container deployments. Note that by default, new nodes will register into a cluster called default unless you provide scripting

Other concepts

ECS CLI

Tutorial

ecs-cli up --keypair id_rsa --capability-iam --size 2 --instance-type t2.medium

version: '2'
services:
  wordpress:
    image: wordpress
    cpu_shares: 100
    mem_limit: 524288000
    ports:
      - "80:80"
    links:
      - mysql
  mysql:
    image: mysql
    cpu_shares: 100
    mem_limit: 524288000
    environment:
      MYSQL_ROOT_PASSWORD: password

ecs-cli compose --file hello-world.yml --project-name project_name up
ecs-cli compose --file hello-world.yml down

ecs-cli ps

ecs-cli compose --file hello-world.yml scale 2

ecs-cli compose --file hello-world.yml service up

ecs-cli compose --file hello-world.yml service rm
ecs-cli down --force

上一篇 下一篇

猜你喜欢

热点阅读