5. rodando containers docker na aws

Preview:

Citation preview

São Paulo

Rodando containers Docker na

AWSRafael Felix Correa

Consultant, AWS Professional Services

Agenda

Introdução ao Docker

Formas de rodar containers Docker na AWS

Caso de sucesso – MercadoLibre

Perguntas

Static website

Web frontend

User DB

Queue Analytics DB

Background workers

API endpoint

nginx 1.5 + modsecurity + openssl +

bootstrap 2

postgresql + pgv8 + v8

hadoop + hive + thrift + OpenJDK

Ruby + Rails + sass + Unicorn

Redis + redis-sentinel

Python 3.0 + celery + pyredis + libcurl + ffmpeg +

libopencv + nodejs + phantomjsPython 2.7 + Flask + pyredis + celery + psycopg +

postgresql-client

VM de desenvolvimento

Servidor de QA

Public Cloud

Disaster recovery

Notebook do funcionárioServidores de produção

O desafioV

ari

ed

ad

ed

e

Sta

cks

Va

rie

da

de

de

am

bie

nte

s

Cluster de produção

Data Center do Cliente

Se

rviç

os

e

ap

lica

çõ

es

inte

rag

em

ap

rop

riad

am

en

te?

Co

ns

igo

mig

rar

ráp

ido

e s

em

pro

ble

ma

s?

A matriz do inferno

Static website

Web frontend

Background workers

User DB

Analytics DB

Queue

VM de

desenvolvim

ento

Servidor de

QA

Servidor

único de

Prod

Cluster

internoPublic Cloud

Notebook do

funcionário

Servidores

do cliente

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

Vari

ed

ad

ed

e

ben

s

Vari

ed

ad

ed

e

meio

sd

e

tran

sp

ort

ee

arm

azen

am

en

to

De

vo

me p

reo

cu

pa

r

so

bre

co

mo

os

be

ns

inte

rag

em

?

(ex

em

plo

: grã

os

de

ca

fé p

róx

imo

sàs

es

pe

cia

rias)

Co

ns

igo

tran

sp

orta

r

ráp

ido

sem

pro

ble

mas

?

(ex

em

plo

: do

na

vio

pa

rao

trem

pa

rao

ca

min

o)

Transporte de carga antes de 1960

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

Outra matriz do inferno

Variedad

ed

e

be

ns

Va

rie

da

de

de m

eio

s

de tra

nsp

ort

ee

arm

aze

na

men

to

De

vo

me

pre

ocu

par

so

bre

co

mo

os

be

ns in

tera

ge

m?

(exe

mp

lo: g

rão

sd

e c

afé

pró

xim

os

àe

sp

ecia

rias)

Co

nsig

otra

nsp

orta

r

ráp

ido

e s

em

pro

ble

ma

s? (e

xe

mplo

:

do n

avio

pa

rao tre

m

pa

rao c

am

inh

ão

)

Solução: Container padronizado para transporte

…no caminho, pode ser

carregado, descarregado,

empilhado, transportado

por grandes distâncias e

transferido de uma forma

de transporte para outra

Um container padrão

carregado com virtualmente

qualquer bem, se mantém

selado até chegar no destino

final.

Static website Web frontend User DB Queue Analytics DB

VM de

desenvolvimen

to

Servidor de QA Public CloudNotebook

do

funcionário

Docker é um sistema de envio de container para

código

Variedade

de

Sta

cks

Variedade

de

am

bie

nte

s

Cluster de

produçãoData Center

do Cliente

Serv

iços

e

aplic

ações

inte

ragem

apro

pria

dam

ente

?

Consig

om

igra

r

rápid

oe

sem

pro

ble

mas?

…que pode ser manipulado

e operado de forma

consistente em virtualmente

qualquer plataforma de

hardware

Uma engine que permite

qualquer conteúdo ser

encapsulado como um

container leve, portável

e auto-suficiente…

Static website

Web frontend

Background workers

User DB

Analytics DB

Queue

VM de

desenvolvim

ento

Servidor de

QA

Servidor

único de

Prod

Cluster

internoPublic Cloud

Notebook do

funcionário

Servidores

do cliente

Docker elimina a matriz do inferno

Quais os benefícios?

Negócio:

• Redução de custos

• Velocidade (Time to Market)

• Confiança e previsibilidade de entrega

Área de TI:

• Separação de responsabilidades mais clara

• Portabilidade de aplicações

• Liberdade para devs e times de produto sem perder o controle

• Aumento de velocidade (containers são leves)

• Aumento da confiança (containers são padronizados)

• Uso eficiente de recursos em escala (usando um cluster manager)

O que é um container?

?!?

• Conjunto de features do kernel do Linux que isolam processos, user

ids, memória, I/O e network

• “chroot com esteróides!”

• Alocação de recursos granular

• Namespaces, Cgroups

• Essas features existem e tem sido usadas há anos (Solaris “Zones”)

AppA

Hypervisor

Host OS

Server

GuestOS

Bins/Libs

AppA’

GuestOS

Bins/Libs

AppB

GuestOS

Ap

p A

Do

cker

Host OS

Server

Bins/LibsA

pp

ABins/Libs

Ap

p B

Ap

p B

Ap

p B

Ap

p B

’VM

Container

Containers são isolados, mas compartilham o SO e, quando se aplica, bins/libs

GuestOS

GuestOS

…o que faz com que os containers possam ser considerados como “VMs enxutas”.

Bins/Libs

Isso parece uma máquina virtual (VM)!

Sobre Docker

• Docker é uma plataforma completa para se construir e

rodar containers

• Foi disponibilizado como open source em Março de

2013 pela dotCloud (atualmente Docker, Inc.)

• Inclui um CLI, ferramentas para criação de imagens de

containers (Dockerfiles), e um repositório para hospedar

containers

Como o Docker funciona

Dockerfile

Imagem

dehttp://crosbymichael.com/dock

erfile-best-practices.html

Containers na AWS

• AWS é um complemento natural ao uso de containers

por sua vasta gama de serviços escaláveis de

infraestrutura, onde seus containers podem rodar.

• AWS Elastic Beanstalk, AWS OpsWorks, e Amazon EC2

Container Service provém suporte integrado ao Docker.

• Oportunidade para usar containers em Dev, Test, e

Produção.

AWS Elastic Beanstalk

• AWS Elastic Beanstalk é uma camada de gerenciamento para serviços

AWS como Amazon EC2, Amazon RDS, e Elastic Load Balancing

• Remove o requisito de lançar manualmente os recursos AWS necessários

para rodar sua aplicação

• Você faz upload da sua aplicação enquanto o Elastic Beanstalk cuida dos

detalhes de provisionar capacidade, balancamento de carga, escalabilidade

e monitoramento da saúde da aplicação

• Suporte a aplicações Docker multi-container (em conjunto com Amazon

EC2 Container Service)

AWS Elastic Beanstalk

Ap

pE

LB

AZ

your-app.elasticbeanstalk.com

Alert

Log

Mon

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Faça deploy do seu container de três formas

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Dockerfile

• Imagem será construída

em cada instância

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Dockerrun.aws.json

• Manifesto que descreve

como rodar o container

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Dockerrun.aws.json

AWS Elastic Beanstalk

Zip com contexto da aplicação

App.zip

-------------------------------

|-- Dockerfile

|-- Dockerrun.aws.json

Dockerfile

Dockerrun.aws.json

OpsWorks

• Criado para funcionar com o OpsCode Chef, que permite deploy e

gerenciamento de aplicações diversas

• Permite a definição de stacks para configurar a infraestrutura em

AWS usando “receitas” Chef

• Uma “stack” pode conter um conjunto de recursos que servem a um

propósito único, como uma aplicação web

• As “receitas” Chef utilizadas no AWS OpsWorks podem instalar o

Docker nas instâncias e referenciar um Dockerfile para configurar o

container apropriadamente

Adicionar layer customizada

• Criado para funcionar com o OpsCode Chef, que permite deploy e

gerenciamento de aplicações diversas

• Permite a definição de stacks para configurar a infraestrutura em

AWS usando “receitas” Chef

• Uma “stack” pode conter um conjunto de recursos que servem a um

propósito único, como uma aplicação web

• As “receitas” Chef utilizadas no AWS OpsWorks podem instalar o

Docker nas instâncias e referenciar um Dockerfile para configurar o

container apropriadamente

Aplicar receitas chef para Docker

Pronto!

O desafio de operar em escala

Introduzindo o EC2 Container Service

EC2 Container Service

• Compatível com Docker

• Gerenciamento de Cluster facilitado

• Alta performance

• Eficiência de uso de recursos

• Extensível

• Seguro

ECS: Conceitos-chave

• Cluster

• AMIs “Container-Enabled”

• Agente ECS

• Gerenciador do cluster (Cluster Manager)

• Agendador de container (Container Scheduler)

• Definições de Tarefas (Tasks/Task)

Task Definitions

Aplicações distribuídas

• Containers habilitam arquiteturas de micro-serviços

• Permite mapeamento de função por container

• Aderente aos conceitos de baixo acoplamento (loose

coupling), elasticidade, escalabilidade e outros

princípios de aplicações distribuídas

• Permite deployments, provisionamento e atualizações

rápidas

Customer Case – MercadoLibre

MercadoLibre in AWS

About MercadoLibre

• Operations in 13 countries.

• Leaders in the region.

• 6.5 Billion MktCap (NASDAQ: MELI).

• 2600 Employees (600 engineers).

• 8th e-commerce site by traffic in the world.

About Me

• Darío Simonassi

– Architecture Sr. Manager

– MercadoLibre.Com

– @ldsimonassi

About Me: Lately

• Darío Simonassi

– Architecture Sr. Manager

– MercadoLibre.Com

– @ldsimonassi

MercadoLibre’s technology stack

• Microservices Architecture.

• REST API & Frontends.

• 650 Applications.

• 2 OnPremise datacenters in the US.

• Private cloud: OpenStack 15.000 VMs

• Fully self provisioned infrastructure services.

Frontends

REST API

MercadoLibre’s Architecture

Items Users Orders Questions

Home SearchItem Page

Checkout

MercadoLibre’s engineering teams

• Small teams.

• Full control & Ownership:– Product decisions

– Development.

– QA (Automated).

– Deployment.

– Alerts & Production management.

Current technology stack opportunities

• Great for:– Empowerment.– Flexibility.

• Opportunities:– Complex.– Lot of tools.– Lot of knowledge required.– Policies are difficult to enforce.

Fury• Simplification• Automation• Unified platform

– Infrastructure provisioning– Continuous integration.– Configuration management.– Dev & Tests environments.– Real time metrics & logs.– Alerting.

Fury Layout

Fury Frontend

Fury CLI

AWS

Docker

External Services (Metrics, APM, Logs,

GitHub, Alerting)

Operations• Code

• Code, run, play & execute tests locally.

• Deploy• CI, Fast & Safe code shipping.

• Monitoring & Alerting• Know when something is going wrong.• Understand what is going wrong.• Notify the correct person.• Follow up.

• Troubleshooting• Take action to solve a problem.

Code• Developers machine setup.

• Local setup for DB & Mock servers.• Versions headache.

• Environment changes propagation.• CI environment consistency.

• Developers don’t manage CI servers.• What works in my machine must work in the CI.

• Environments fidelity.• Use same libraries, same binaries.

GrailsSDK

RedisNode.JS

API Mock

Browser

Fury CLI$> fury run

Developer Machine

Text Editordocker-compose.yml

Source Code

Code: Fury CLI Commands• $> fury get homepage

• Will clone the homepage project repository.

• $> fury run• Will run the webserver with all the dependencies locally.

• $> fury test• Will run tests locally with all the dependencies.

• $> fury create-version 0.1• Will push the code.• Will tag the version.• Will trigger CI and open browser window.

Deploy• Risk of downtime

– Smooth transitions between versions.– Real time metrics.– Fast rollback.

• Reliability & Fidelity– New Infrastructure vs Update scripts.

• Hardware usage efficiency– Autoscaling.

Production Instance• No Updates

• New application version -> New hardware

• No States• No states like: on_duty, deploying.• Instances are always supposed to be working.

• Single AMI• Only one AMI that will run a container inside.• The same container for the entire instance life.

• Minimal• Only required stuff in this AMI.

Application Docker Image

MetricsGathering

Docker

LogsGathering

Docker

Productive Instance

ELB

Deployment: Before

ELB

Deployment: Starting

ELB

Deployment: In progress 0%

ELB

Deployment: In progress 6%

ELB

Deployment: In progress 12%

ELB

Deployment: In progress 25%

ELB

Deployment: In progress 50%

ELB

Deployment: In progress 100%Fa

st R

ollb

ack

Spar

e Po

ol

ELB

Deployment: Finishing

ELB

Deployment: Done

Monitoring & Alerting• Alerting:

– To know fast and reliably when something is going wrong:• No false alarms.• Instance health no longer suitable.• Notify the right persons & follow up.

• Diagnostics:– To be able to understand what is going wrong.

• Metrics– Multidimensional.– Real-Time.

• Logs.

Alerting: Based on metrics• HTTP:

– Errors.– Response time.

• Infrastructure:– How many machines stopped working unexpectedly during

the last hour?

• Business:– Is the application doing what it should?– Compare vs yesterday / last week.

Alerting: Based on metrics

Alerting: Based on metrics

Alerting: No false alarms

• Reasonable thresholds.– Undesirable but expected situations shouldn’t be an alert.

– You won’t improve your application SLA on Saturday 3AM.

• Different thresholds for different periods.– Alert on > 25% errors in the last minute.

– Alert on > 5% errors in the last hour.

– Alert on > 0.2% errors in the last day.

Alerting: Notifications.

• Teams manage the duty schedule.

• Escalation & Backup is necessary.

• Automatic Alerts follow up.

• Flexibility & Mobile.

– “I’m going to watch a movie, can someone get my duties for the next three hours?”

Alerting: Notifications.

Diagnostics: Metrics

• Real Time.

– You’ll be changing things and you’ll need feedback.

• Multidimensional

– Tagged metrics will really make the difference when trying to identify the failure.

Diagnostics: Metrics key features

Diagnostics: Logs• Useful logs

– Events.

– Unusual errors.

– Avoid traces.

• Tagged

– Good tagging will allow you to make sense of the logged data.

Logs: Tagging

Troubleshooting: Actions• Deploy

– We’ve deployed a bug.– We need to rollback fast or deploy a new version fast.

• Scale– There is a performance issue, we need to increase the compute power.– There is a specific bug, we need to block traffic.

• Restart– There is a leak (memory, connections etc).– Application restarting is a suitable yet temporary workaround for

those cases.

Fury: Key AWS Services• Networking & Availability:

– SDN (Network Isolation/Segmentation)– Multi AZ – Direct Connect (OnPremise DC Interop).

• Deploy:– ELB, ASG, CloudWatch.

• Cache:– ElasticCache, DynamoDB.

• Resources Orchestration:– CloudFormation (For external resources too).

Fury: Technologies & Services• Environment Management:

– Docker / Docker compose– Jenkings.

• Diagnostics and Alerting:– Datadog.– Opsgenie.– New Relic.

• Repositories:– GitHub– DockerHub.

• Logs Management:– Elastic Search + Kibana

Referências

Docker:

http://www.docker.io/

http://pt.slideshare.net/dotCloud/docker-intro-november

OpsCode Chef:

https://www.chef.io/chef/

https://github.com/bflad/chef-docker

Amazon Web Services

http://aws.amazon.com/ecs/

http://aws.amazon.com/elasticbeanstalk/

http://aws.amazon.com/opsworks/

http://aws.amazon.com/ec2/

http://aws.amazon.com/cloudformation/

Perguntas?

Obrigado!

Recommended