Fury DevopsConf 2015

78
Mercadolibre’s Platform on top of AWS & Docker

Transcript of Fury DevopsConf 2015

Page 1: Fury DevopsConf 2015

Mercadolibre’s Platform on top of AWS & Docker

Page 2: Fury DevopsConf 2015

Gabriel [email protected]

@geisbruch

Matias [email protected]@matiasrege

Nicolas [email protected]

Page 3: Fury DevopsConf 2015

Qué es MercadoLibre (en IT) ?

Contexto

Page 4: Fury DevopsConf 2015

- ~18.000.000 de Requests por Minuto

- ~400 Deploys por dia

- ~700 Developers en 5 Centros de desarrollo

- ~20.000 Servidores Virtuales

- ~1500 Fisicos

Page 5: Fury DevopsConf 2015

Cómo nos organizamos con este CAOS?

Page 6: Fury DevopsConf 2015

Cómo mejoramos este MUNDO?

Page 7: Fury DevopsConf 2015

Cómo funciona la PLATAFORMA?

Page 8: Fury DevopsConf 2015
Page 9: Fury DevopsConf 2015

● Flexible

● Autoscaling

● SDN (Software defined Network)

● Interoperabilidad con nuestro DC

● Servicios de automatización y control

● Seguridad

Page 10: Fury DevopsConf 2015
Page 11: Fury DevopsConf 2015

Docker permite empaquetar aplicaciones incluyendo filesystem, codigo, librerias y todo lo necesario para correrlas. Permitiendo correr estas imágenes en containers dentro del sistema operativo.

Page 12: Fury DevopsConf 2015
Page 13: Fury DevopsConf 2015

Desarrollo

Producción

● Entornos unificados (sin importar el SO)

● Mocks simplificados

● Una única herramienta

● Simplicidad para sumarse a colaborar en un proyecto

● Codigo + Entorno en un único lugar

● No hay necesidad de bootstraps on boot

● Fast build (vs crear un ami)

● Posibilidad de bajar la imagen de producción para debug

Page 14: Fury DevopsConf 2015

Veamos cómo usa la herramienta un

developer y que pasa por debajo

Proceso de desarrollo

Page 15: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Page 16: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Code !!!

Page 17: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Code !!!

Create Version

Page 18: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Page 19: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Page 20: Fury DevopsConf 2015

Crear una Aplicación

Page 21: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Page 22: Fury DevopsConf 2015

Crear una Aplicacion

● Permite definir infraestructura

● Mantiene el estado de toda la infraestructura y sus recursos

● Permite extender el funcionamiento mediante “custom-resources”

● Resuelve acciones de rollbacks y fallas

● Guarda información de logging de todas las transacciones

Page 23: Fury DevopsConf 2015

Crear una Aplicacion

Create App Stack

Page 24: Fury DevopsConf 2015

Crear una Aplicacion

Page 25: Fury DevopsConf 2015

Crear una Aplicacion

● Creación de Repositorio (Custom)

● Creacion de subnets○ Una por AZ

● Creación de configuraciones de jenkins para CI & Build (Custom)

● Creación de configuraciones en ES y Kibana para logging (Custom)

● Creación de SecurityGroups para la aplicación

● Creación de ACL’s de las redes e interconexión de subnets

● Configuración de reglas de interoperabilidad para conectarse a la plataforma actual

Page 26: Fury DevopsConf 2015

Empezando a Codear

Page 27: Fury DevopsConf 2015

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Page 28: Fury DevopsConf 2015

Code

Get App(fury get)

Page 29: Fury DevopsConf 2015

Code

Get App(fury get)

Code

Page 30: Fury DevopsConf 2015

Code

Get App(fury get)

Code Run(fury run)

Page 31: Fury DevopsConf 2015

Code

Dockerfile

Imagen de desarrollo y build responsable de correr la aplicación (y sus mocks), testearla y empaquetarla para producción

Los entornos de desarrollo y producción serán Dockerfile partiendo de imágenes pre-armadas que resuelvan la problemática básica

Dockerfile.runtime

Imagen de producción que será deployada en cada máquina que atienda el servicio

Page 32: Fury DevopsConf 2015

Code

fury run

Page 33: Fury DevopsConf 2015

Code

fury rundocker build -t app_build .

docker run -v $(pwd):/app app_build /commands/run.sh

Page 34: Fury DevopsConf 2015

Create Version

Page 35: Fury DevopsConf 2015

Create Version

Create App

Code !!!

Create Version

Deploy

Page 36: Fury DevopsConf 2015

Create Version

fury create-version

Page 37: Fury DevopsConf 2015

Create Version

Create Version

Commit: xxxx

fury api

Page 38: Fury DevopsConf 2015

Create Version

Create Version

Commit: xxxx

fury apiJenkins

Build

Page 39: Fury DevopsConf 2015

Create Version

Create Version

Commit: xxxx

fury apiJenkins

Build

Page 40: Fury DevopsConf 2015

Create Version

Page 41: Fury DevopsConf 2015

Create Versioncd app docker build -t app .docker run app /test.sh docker run app /package.sh -v prod-image:/package

Page 42: Fury DevopsConf 2015

Create Versioncd app docker build -t app .docker run app /test.sh docker run app /package.sh -v prod-image:/package

cd prod-imagedocker build -t prod-app .

Page 43: Fury DevopsConf 2015

Create Versioncd app docker build -t app .docker run app /test.sh docker run app /package.sh -v prod-image:/package

cd prod-imagedocker build -t prod-app .

docker push app

Page 44: Fury DevopsConf 2015

Go to Prod !

Page 45: Fury DevopsConf 2015

Deploy

Create App

Code !!!

Create Version

Deploy

Page 46: Fury DevopsConf 2015

Crear un Scope

Page 47: Fury DevopsConf 2015

Crear un Scope

● Crear ELB (Elastic Load Balancer)

● Scope Domains

● Iniciar deploy

Page 48: Fury DevopsConf 2015

Deploy

Page 49: Fury DevopsConf 2015

Deploy

● Crear Máquinas

● Crear Nuevo Autoscaling group

● Intercambiar tráfico entre versiones (swap)

● Destruir maquinas viajes (o hacer rollback)

Page 50: Fury DevopsConf 2015

Deploy

Page 51: Fury DevopsConf 2015

Deploy

Page 52: Fury DevopsConf 2015

Deploy

Page 53: Fury DevopsConf 2015

Deploy

Page 54: Fury DevopsConf 2015

Deploy

Page 55: Fury DevopsConf 2015

Deploy

Page 56: Fury DevopsConf 2015

Deploy

Page 57: Fury DevopsConf 2015

Deploy

Page 58: Fury DevopsConf 2015

Deploy

Page 59: Fury DevopsConf 2015

En definitiva ...

Page 60: Fury DevopsConf 2015

❖ fury get apparel-home

❖ fury run

❖ fury create-version 0.0.1

❖ DEPLOY !!!

Page 61: Fury DevopsConf 2015

Cómo queda Todo en Prod ?

Page 62: Fury DevopsConf 2015

Arquitectura

Fury

Cor

e

VPC-1Subnet A app 1

Subnet B app 1

SubnetC app 1

SubnetD app 1

Subnet A app 2

Subnet B app 2

SubnetC app 2

SubnetD app 2

VPC-NSubnet A app X

Subnet B app X

SubnetC app X

SubnetD app X

Az A

Az B

Az C

Az D

ServicesLogs DC-IN DC-OUT Others

External Traffic BalancingC

loud

Form

atio

nE

C2

Api

ELB

Oth

ers

Page 63: Fury DevopsConf 2015

Arquitectura

VPC-1

Subnet A app 1

Page 64: Fury DevopsConf 2015

Arquitectura

VPC-1

Subnet A app 1

Server i-0XXXXXmercadolibre/docker-meetup:0.0.1

datadogrsyslog JMX

docker-compose.yml

local-api

Page 65: Fury DevopsConf 2015

Mantenimiento de la app

Page 66: Fury DevopsConf 2015

Mantenimiento

● Logs

● Metricas

● Ops

Page 67: Fury DevopsConf 2015

Logs

Page 68: Fury DevopsConf 2015

Logs

Logs Collector[tags:parser]

stdout

stdout

stdout

Page 69: Fury DevopsConf 2015

Logs

Page 70: Fury DevopsConf 2015

Metricas

Page 71: Fury DevopsConf 2015

Metricas

Page 72: Fury DevopsConf 2015

Metricas

Page 73: Fury DevopsConf 2015

Operaciones

Page 74: Fury DevopsConf 2015

Operaciones

Page 75: Fury DevopsConf 2015

Operaciones

Server i-0XXXXX

mercadolibre/docker-meetup:0.0.1

local-api

fury api

Action

Page 76: Fury DevopsConf 2015

Wrapping Up

Page 77: Fury DevopsConf 2015

Gracias

[email protected] Team

Page 78: Fury DevopsConf 2015

Gracias

[email protected] Team