Fury devops conf (1)

78
Mercadolibre’s Platform on top of AWS & Docker

Transcript of Fury devops conf (1)

Mercadolibre’s Platform on top of AWS & Docker

Gabriel [email protected]

@geisbruch

Matias [email protected]@matiasrege

Nicolas [email protected]

Qué es MercadoLibre (en IT) ?

Contexto

- ~18.000.000 de Requests por Minuto

- ~400 Deploys por dia

- ~700 Developers en 5 Centros de desarrollo

- ~20.000 Servidores Virtuales

- ~1500 Fisicos

Cómo nos organizamos con este CAOS?

Cómo mejoramos este MUNDO?

Cómo funciona la PLATAFORMA?

● Flexible

● Autoscaling

● SDN (Software defined Network)

● Interoperabilidad con nuestro DC

● Servicios de automatización y control

● Seguridad

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.

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

Veamos cómo usa la herramienta un

developer y que pasa por debajo

Proceso de desarrollo

Proceso de Desarrollo

Create App

Proceso de Desarrollo

Create App

Code !!!

Proceso de Desarrollo

Create App

Code !!!

Create Version

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Crear una Aplicación

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

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

Crear una Aplicacion

Create App Stack

Crear una Aplicacion

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

Empezando a Codear

Proceso de Desarrollo

Create App

Code !!!

Create Version

Deploy

Code

Get App(fury get)

Code

Get App(fury get)

Code

Code

Get App(fury get)

Code Run(fury run)

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

Code

fury run

Code

fury rundocker build -t app_build .

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

Create Version

Create Version

Create App

Code !!!

Create Version

Deploy

Create Version

fury create-version

Create Version

Create Version

Commit: xxxx

fury api

Create Version

Create Version

Commit: xxxx

fury apiJenkins

Build

Create Version

Create Version

Commit: xxxx

fury apiJenkins

Build

Create Version

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

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 .

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

Go to Prod !

Deploy

Create App

Code !!!

Create Version

Deploy

Crear un Scope

Crear un Scope

● Crear ELB (Elastic Load Balancer)

● Scope Domains

● Iniciar deploy

Deploy

Deploy

● Crear Máquinas

● Crear Nuevo Autoscaling group

● Intercambiar tráfico entre versiones (swap)

● Destruir maquinas viajes (o hacer rollback)

Deploy

Deploy

Deploy

Deploy

Deploy

Deploy

Deploy

Deploy

Deploy

En definitiva ...

❖ fury get apparel-home

❖ fury run

❖ fury create-version 0.0.1

❖ DEPLOY !!!

Cómo queda Todo en Prod ?

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

Arquitectura

VPC-1

Subnet A app 1

Arquitectura

VPC-1

Subnet A app 1

Server i-0XXXXXmercadolibre/docker-meetup:0.0.1

datadogrsyslog JMX

docker-compose.yml

local-api

Mantenimiento de la app

Mantenimiento

● Logs

● Metricas

● Ops

Logs

Logs

Logs Collector[tags:parser]

stdout

stdout

stdout

Logs

Metricas

Metricas

Metricas

Operaciones

Operaciones

Operaciones

Server i-0XXXXX

mercadolibre/docker-meetup:0.0.1

local-api

fury api

Action

Wrapping Up

Gracias

[email protected] Team

Gracias

[email protected] Team