d-day 2015 conteneurisé une startup

43
Comment nous avons conteneurisé une startup ? #devopsday

Upload: devops-d-day

Post on 06-Jan-2017

365 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: D-DAY 2015 Conteneurisé une startup

Comment nous avons conteneurisé une startup ?

#devopsday

Page 2: D-DAY 2015 Conteneurisé une startup

Jonathan Martin @john_iw2

Stéphane Cottin @vixns

Page 3: D-DAY 2015 Conteneurisé une startup

#architecture #hosting #opsdev #libre #r&d #techtrends #IoT #artprojects

Page 4: D-DAY 2015 Conteneurisé une startup

#startup #newyork #marseille #r&d #frenchtech #ecommerce #bpi #shake #network #bigdata

#dockerlover #opensourcelover #hashtaglover

Page 5: D-DAY 2015 Conteneurisé une startup

The first global cross-selling network between eMerchants

“ “

Page 6: D-DAY 2015 Conteneurisé une startup

Yuzu By Example

Page 7: D-DAY 2015 Conteneurisé une startup

At the beginning

Page 8: D-DAY 2015 Conteneurisé une startup

months to do a MVP 4

Page 9: D-DAY 2015 Conteneurisé une startup

No time to reinvent the wheel

Page 10: D-DAY 2015 Conteneurisé une startup

Symfony - Java - MongoDB

Page 11: D-DAY 2015 Conteneurisé une startup

PRODUCTION

Web BigData

-  2 physical servers -  Multiple VMs -  Chef & Chef server

-  2 physical servers -  Stack Cloudera (Hadoop/Spark/...)

Page 12: D-DAY 2015 Conteneurisé une startup

Six months later...

Page 13: D-DAY 2015 Conteneurisé une startup

A lot of technos joined Yuzu during the MVP

Welcome to nodejs, scala, elasticsearch, hbase, redis, kafka, couchbase,...

Page 14: D-DAY 2015 Conteneurisé une startup

They lived happily ever after

Page 15: D-DAY 2015 Conteneurisé une startup

It doesn’t work in production… … that’s works fine in my local env

“ “

Page 16: D-DAY 2015 Conteneurisé une startup

This Lib isn’t in the right version... It’s slow… why??

Where are my logs...

“ “

Page 17: D-DAY 2015 Conteneurisé une startup

Time to look around...

Page 18: D-DAY 2015 Conteneurisé une startup

Be kind, rewind Spring cleaning Microservices / 12 factors Resources isolation Improved security Continuous deployment Start-up compliant workflow Orchestration & supervision

Page 19: D-DAY 2015 Conteneurisé une startup

AND WINNERS ARE ... THE

Page 20: D-DAY 2015 Conteneurisé une startup

Docker + Mesos + Marathon + Consul

Page 21: D-DAY 2015 Conteneurisé une startup

{"container":{"type":"DOCKER","docker":{"image":"redis:2.6.17","network":"BRIDGE","portMappings":[{"containerPort":6379,"hostPort":0,"protocol":"tcp"}]}},"id":"redis","instances":1,"cpus":0.5,"mem":1024,"healthChecks":[{"protocol":"TCP","portIndex":0}]}

MARATHON wants JSON

Page 22: D-DAY 2015 Conteneurisé une startup
Page 23: D-DAY 2015 Conteneurisé une startup

Dynamic Configuration Docker

Registrator

Consul

Consul-template

Page 24: D-DAY 2015 Conteneurisé une startup

Logs, metrics, alerting...

Page 25: D-DAY 2015 Conteneurisé une startup

Collect everything collectd / fluentd / rsyslog

Convert to async messages kafka

Filter and keep valuable data riemann / elasticsearch / influxdb

Generate realtime alerts riemann

Addictive dashboards kibana / grafana / riemann-dash

Page 26: D-DAY 2015 Conteneurisé une startup

CHRONOS CRON for mesos

Page 27: D-DAY 2015 Conteneurisé une startup
Page 28: D-DAY 2015 Conteneurisé une startup

Our workflow

Page 29: D-DAY 2015 Conteneurisé une startup

Git flow

Jenkins DinD

Private Registry Docker

Doploy

Marathon & Chronos

Boot2Docker + Parallels

Page 30: D-DAY 2015 Conteneurisé une startup

Don’t / Do

Page 31: D-DAY 2015 Conteneurisé une startup

use tag "latest" on production

use explicit version tags for your docker images

DON’T

Page 32: D-DAY 2015 Conteneurisé une startup

use data containers for valuable data

storage layer may crash / change easy to forget when cleaning unused

containers / images

DON’T

Page 33: D-DAY 2015 Conteneurisé une startup

use shared storage (glusterfs, nfs, ...) for your codebase, working dirs, config files or sessions

sloooooooooow generate scary lock errors and timeouts

fscache crash full systems easily

DON’T

Page 34: D-DAY 2015 Conteneurisé une startup

tag your custom images with the VCS commit hash

●  makes your workflow better (same version tag in VCS and images)

●  prevent useless image rebuilds ( speedup deploys ) ●  easy way to know exactly which code version is running,

even if the tag was changed / deleted in the VCS

DO

Page 35: D-DAY 2015 Conteneurisé une startup

avoid shared filesystems

●  put all versioned data in containers ●  use external object storage for user files (S3, ceph, swift ,...) ●  use database / memcached / couchbase for sessions ●  use templates to generate local config files (consul-template ,

confd)

DO

Page 36: D-DAY 2015 Conteneurisé une startup

Use docker independant storage for critical data

●  lvm is your friend (unless you use and saturate thin volume metadata, use thin volumes with care)

●  use storage plugins with docker >= 1.9.0 (convoy ?) ●  redundant backups saves lives

DO

Page 37: D-DAY 2015 Conteneurisé une startup

Mistaking is

learning

Page 38: D-DAY 2015 Conteneurisé une startup

-  we tried to put the chicken in the egg

-  generate config files to shared storage

-  dns for discovery

-  use mongo replicaset without sharding

-  ...

Page 39: D-DAY 2015 Conteneurisé une startup

Chronos Collectd Consul Consul-template Couchbase Debian Docker Doploy ElasticSearch Fluentd Gearman Go Grafana Haproxy HBase InfluxDB Java Jenkins

Kafka Kibana Marathon Mesos MongoDB Nodejs OpenVpn PhalconPHP Redis Registrator Registry

Riemann Route53 S3 Scala Sentry Spark Statsd Symfony Zookeeper ...

Page 40: D-DAY 2015 Conteneurisé une startup

Switch from registrator to mesos-consul

Remove the lasts SPOFs

Move user files to S3

Use the docker storage/network plugins

XDCC

Improve logs & metrics filtering and alerting

Page 41: D-DAY 2015 Conteneurisé une startup

2015 Other mesos/docker stories

IPROFS A large scale php/drupal worldwide social app for “Institut français”

ARTE.TV We are migrating all their vod and svod services to mesos/docker (java apps)

VIXNS A mesos/docker cluster is collecting all logs and metrics from hundreds of servers

Page 42: D-DAY 2015 Conteneurisé une startup

Conclusion

Page 43: D-DAY 2015 Conteneurisé une startup

Questions?

@john_iw2 @vixns