5. rodando containers docker na aws

79
São Paulo

Upload: amazon-web-services-latin-america

Post on 25-Jul-2015

295 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 5. rodando containers docker na aws

São Paulo

Page 2: 5. rodando containers docker na aws

Rodando containers Docker na

AWSRafael Felix Correa

Consultant, AWS Professional Services

Page 3: 5. rodando containers docker na aws

Agenda

Introdução ao Docker

Formas de rodar containers Docker na AWS

Caso de sucesso – MercadoLibre

Perguntas

Page 4: 5. rodando containers docker na aws

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?

Page 5: 5. rodando containers docker na aws

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

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

Page 6: 5. rodando containers docker na aws

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

Page 7: 5. rodando containers docker na aws

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

Outra matriz do inferno

Page 8: 5. rodando containers docker na aws

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.

Page 9: 5. rodando containers docker na aws

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…

Page 10: 5. rodando containers docker na aws

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

Page 11: 5. rodando containers docker na aws

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)

Page 12: 5. rodando containers docker na aws

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”)

Page 13: 5. rodando containers docker na aws

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)!

Page 14: 5. rodando containers docker na aws

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

Page 15: 5. rodando containers docker na aws

Como o Docker funciona

Page 16: 5. rodando containers docker na aws

Dockerfile

Imagem

dehttp://crosbymichael.com/dock

erfile-best-practices.html

Page 17: 5. rodando containers docker na aws

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.

Page 18: 5. rodando containers docker na aws

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)

Page 19: 5. rodando containers docker na aws

AWS Elastic Beanstalk

Ap

pE

LB

AZ

your-app.elasticbeanstalk.com

Alert

Log

Mon

Page 20: 5. rodando containers docker na aws

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

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

Page 21: 5. rodando containers docker na aws

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Dockerfile

• Imagem será construída

em cada instância

Page 22: 5. rodando containers docker na aws

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Dockerrun.aws.json

• Manifesto que descreve

como rodar o container

Page 23: 5. rodando containers docker na aws

AWS Elastic Beanstalk

App.zip

Python 3

WSGI entrypoint:

app.py

Python

libs

Dockerrun.aws.json

Page 24: 5. rodando containers docker na aws

AWS Elastic Beanstalk

Zip com contexto da aplicação

App.zip

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

|-- Dockerfile

|-- Dockerrun.aws.json

Dockerfile

Dockerrun.aws.json

Page 25: 5. rodando containers docker na aws

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

Page 26: 5. rodando containers docker na aws

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

Page 27: 5. rodando containers docker na aws

Aplicar receitas chef para Docker

Page 28: 5. rodando containers docker na aws

Pronto!

Page 29: 5. rodando containers docker na aws

O desafio de operar em escala

Page 30: 5. rodando containers docker na aws

Introduzindo o EC2 Container Service

Page 31: 5. rodando containers docker na aws

EC2 Container Service

• Compatível com Docker

• Gerenciamento de Cluster facilitado

• Alta performance

• Eficiência de uso de recursos

• Extensível

• Seguro

Page 32: 5. rodando containers docker na aws

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)

Page 33: 5. rodando containers docker na aws

Task Definitions

Page 34: 5. rodando containers docker na aws

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

Page 35: 5. rodando containers docker na aws

Customer Case – MercadoLibre

Page 36: 5. rodando containers docker na aws

MercadoLibre in AWS

Page 37: 5. rodando containers docker na 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.

Page 38: 5. rodando containers docker na aws

About Me

• Darío Simonassi

– Architecture Sr. Manager

– MercadoLibre.Com

– @ldsimonassi

Page 39: 5. rodando containers docker na aws

About Me: Lately

• Darío Simonassi

– Architecture Sr. Manager

– MercadoLibre.Com

– @ldsimonassi

Page 40: 5. rodando containers docker na aws

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.

Page 41: 5. rodando containers docker na aws

Frontends

REST API

MercadoLibre’s Architecture

Items Users Orders Questions

Home SearchItem Page

Checkout

Page 42: 5. rodando containers docker na aws

MercadoLibre’s engineering teams

• Small teams.

• Full control & Ownership:– Product decisions

– Development.

– QA (Automated).

– Deployment.

– Alerts & Production management.

Page 43: 5. rodando containers docker na aws

Current technology stack opportunities

• Great for:– Empowerment.– Flexibility.

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

Page 44: 5. rodando containers docker na aws

Fury• Simplification• Automation• Unified platform

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

Page 45: 5. rodando containers docker na aws

Fury Layout

Fury Frontend

Fury CLI

AWS

Docker

External Services (Metrics, APM, Logs,

GitHub, Alerting)

Page 46: 5. rodando containers docker na aws

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.

Page 47: 5. rodando containers docker na aws

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.

Page 48: 5. rodando containers docker na aws

GrailsSDK

RedisNode.JS

API Mock

Browser

Fury CLI$> fury run

Developer Machine

Text Editordocker-compose.yml

Source Code

Page 49: 5. rodando containers docker na aws

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.

Page 50: 5. rodando containers docker na aws

Deploy• Risk of downtime

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

• Reliability & Fidelity– New Infrastructure vs Update scripts.

• Hardware usage efficiency– Autoscaling.

Page 51: 5. rodando containers docker na aws

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.

Page 52: 5. rodando containers docker na aws

Application Docker Image

MetricsGathering

Docker

LogsGathering

Docker

Productive Instance

Page 53: 5. rodando containers docker na aws

ELB

Deployment: Before

Page 54: 5. rodando containers docker na aws

ELB

Deployment: Starting

Page 55: 5. rodando containers docker na aws

ELB

Deployment: In progress 0%

Page 56: 5. rodando containers docker na aws

ELB

Deployment: In progress 6%

Page 57: 5. rodando containers docker na aws

ELB

Deployment: In progress 12%

Page 58: 5. rodando containers docker na aws

ELB

Deployment: In progress 25%

Page 59: 5. rodando containers docker na aws

ELB

Deployment: In progress 50%

Page 60: 5. rodando containers docker na aws

ELB

Deployment: In progress 100%Fa

st R

ollb

ack

Spar

e Po

ol

Page 61: 5. rodando containers docker na aws

ELB

Deployment: Finishing

Page 62: 5. rodando containers docker na aws

ELB

Deployment: Done

Page 63: 5. rodando containers docker na aws

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.

Page 64: 5. rodando containers docker na aws

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.

Page 65: 5. rodando containers docker na aws

Alerting: Based on metrics

Page 66: 5. rodando containers docker na aws

Alerting: Based on metrics

Page 67: 5. rodando containers docker na aws

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.

Page 68: 5. rodando containers docker na aws

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?”

Page 69: 5. rodando containers docker na aws

Alerting: Notifications.

Page 70: 5. rodando containers docker na aws

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.

Page 71: 5. rodando containers docker na aws

Diagnostics: Metrics key features

Page 72: 5. rodando containers docker na aws

Diagnostics: Logs• Useful logs

– Events.

– Unusual errors.

– Avoid traces.

• Tagged

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

Page 73: 5. rodando containers docker na aws

Logs: Tagging

Page 74: 5. rodando containers docker na aws

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.

Page 75: 5. rodando containers docker na aws

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).

Page 76: 5. rodando containers docker na aws

Fury: Technologies & Services• Environment Management:

– Docker / Docker compose– Jenkings.

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

• Repositories:– GitHub– DockerHub.

• Logs Management:– Elastic Search + Kibana

Page 77: 5. rodando containers docker na aws

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/

Page 78: 5. rodando containers docker na aws

Perguntas?

Page 79: 5. rodando containers docker na aws

Obrigado!