SlideShare a Scribd company logo
Containerizing the largest Dutch e-commerce site:
The bol.com story
1the shop for everyone
•About me
•About bol.com
•Containers... in production
•Mayfly: the original container use case
•Choices, choices...
•Lessons learned
•Next steps
2
Content
About me
•Maarten Dirkse (@mdirkse)
•Developer with a history degree, 9+ years of experience (mostly Java)
•Work on the bol.com tools team. We provide the platform for the
organisation to build software: Jenkins, SCM, Mayfly (more on that later)
•Have been running containers in production* for almost 2 years.
(bol.com has been running containers in production, no *, for a little over
a year but really only for the past 5 months)
3
* production internally, for devs, not for customers
•Over 6,5 million active customers
•Virtual footprint of almost 1 visitors million
per day
•Over 14,5 million products
•Moved to our own DC two years ago
•VM-based architecture: 1 node per app
instance
•Everything is puppetized but was derived
from a static config source (Racktables)
•We’re hiring! http://banen.bol.com 4
About bol.com
> 95% > 75%
Brand awareness
Containers... in production
5the shop for everyone
^^ obligatory container ship pic
Containers... in production
•Several mission-critical apps running in containers... in VM’s
•Mesos + Marathon cluster that runs backend GUI for the webshop
•Home-grown spidering solution that runs on Google Container Engine
(also Mesos on GCE)
•Mesos + Marathon cluster that runs Mayfly...
6
Mayfly: the original use case
7the shop for everyone
^^ http://mayflycd.github.io/mayfly-talks/
What is Mayfly?
•Team had an idea for allowing teams to develop every service feature in
isolation to remove bottleneck of shared test environment
•Needed isolated runtime environment for every feature branch (that’s a
lot of environments)
•VM infrastructure was too static, too resource heavy, too slow
8
Containers to the rescue!
•Instead of having every feature branch deploy as a VM, deploy it as a
container
•Use of containers meant we could spin up environments in seconds and
pack more of them onto the hardware
•And so it was that containers were introduced at bol.com. But...
9
DockerCon 2014: docker + ?
Towards “peak container confusion”
10
Mesos
Marathon (or Aurora?)
Kubernetes
Synapse & Nerve
Paasta
AWS EC2 CS
CoreOS + Fleet
RancherOS
Spotify Helios
wut?
Choices, choices....
11the shop for everyone
^^ obligatory cat pic
The stack
•After trying Fleet (buggy) and Kubernetes (5 min old) we settled on
Mesos+Marathon running on CoreOS RHEL7 on bare metal
•Consul for service discovery, Kevlar for KV store.
•Choices made for Mayfly became the prototype for the bol.com
container infrastructure
12
Dynamic infrastructure is the future!
13
13
As the limitations of our VM-based infrastructure
became clear, the platform team became
convinced that the move to dynamic
infrastructure was a necessary step to take in
order to keep scaling the IT-architecture.
But wait, we’re not finished!
•After you’re done installing your new, mind-blowing tech you realize a lot
of loose ends still need to be tied up.
•Deploying docker to your machines? (and which version)?
--> Docker puppet module (https://github.com/garethr/garethr-docker)
•What about logs?
--> Logspout (https://github.com/gliderlabs/logspout)
•Zombie processes, SD registration?
--> ContainerPilot (https://github.com/joyent/containerpilot)
14
But wait, we’re not finished!
•How do you actually tell Marathon what to deploy?
--> Marathon terraform provider (https://github.com/Banno/terraform-provider-marathon)
•Install a (properly secured) Docker registry. We went with the stock
Docker registry behind a secured Nginx reverse-proxy
•Base images? We choose to use the RHEL7 base image as the root of
everything (known quantity in terms of ops support and security vetting)
•And mind how you create images...
15
BOB
•Needed a way to audit and vet images that would be run in our
landscape
•Created BOB, a wrapper tool for docker build and docker push
•BOB checks your Dockerfile’s and images, ensuring that they meet
company standards, before they’re pushed to the registry
•Nothing gets pushed to the registry if it hasn’t been built by BOB
16
BOB (the builder) running on Jenkins
17
Use cases
•Mayfly (see above)
•BIZ: lots of small, independently deployable modules with back office
functionality. Stateless, ideal for containerization.
•Spidering: horizontally scalable stateless processes that run in the cloud.
18
Lessons learned
19the shop for everyone
^^ nothing funny about this, most of ‘em were learned the hard way
Lessons learned 1/2
•Most of this stuff is relatively new or brand new, expect growing pains
•Don’t run your container orchestration software (Mesos, Marathon) in
containers. So if Docker dies, your platform doesn’t degrade with it.
•Running your apps in a container can sometimes lead to interesting
issues that don’t exist outside of containers (JVM memory issues, for
instance)
--> See https://www.youtube.com/watch?v=6ePUiQuaUos for example
20
Lessons learned 2/2
•Graphite-style metrics become problematic in a container world.
Prometheus exists, but we can’t just switch from one day to the next
•HA-Proxy & consul template combo is pretty brittle, we now use Fabio
-->https://github.com/eBay/fabio
•Keep it simple, make small changes
Static to dynamic is a sea change that is incredibly hard to oversee. Take
small steps that deliver value immediately
21
The cultural shift
•Beware the mindset transition that dev teams will have to experience
•Devs: “what do you mean I can’t ssh into the container?”)
•It takes time for ops people to adjust to the idea of dynamic
infrastructure. People tend to think from within their own constraints
--> OPS control over the app runtime will no longer be absolute
22
Next steps
23the shop for everyone
^^ obligatory lolcat
Next steps
24
•IP-per-container
(needed for per-container firewalls, aka to get security off our back)
•Per-app service descriptor that drives app infra and config (to replace
hiera data and feed Terraform)
•Migrating ever more apps to the dynamic infrastructure
Thank you!
Till next time
the shop for everyone

More Related Content

What's hot (20)

PPTX
Smarter deployments with octopus deploy
Thibaud Gravrand
 
ODP
Deploying your application on open stack using bosh presentation
capouch
 
PPTX
Docker (compose) in devops - prague docker meetup
Juraj Kojdjak
 
PDF
Continuous delivery of your legacy application
ColdFusionConference
 
PDF
Tame your test environment with Docker Compose
Kevin Bell
 
PDF
The Three Musketeers
Frederic Lemay
 
PDF
Packing It In: Images, Containers, and Config Management
Michael Goetz
 
PDF
Practical Continuous Deployment - Atlassian - London AUG 18 Feb 2014
Matthew Cobby
 
PDF
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Gavin Pickin
 
PDF
Octopus Deploy Tech Fest 2014
adriantwright
 
KEY
SFJS 6-19-2012
Adam Christian
 
KEY
Ship It ! with Ruby/ Rails Ecosystem
Yi-Ting Cheng
 
PDF
Splunk user group - automating Splunk with Ansible
Mark Phillips
 
PPTX
Continuous Delivery and Infrastructure as Code
Sascha Möllering
 
PPTX
Visual Studio Release Management - New weltanschauung or natural evolution? @...
Giulio Vian
 
PPTX
Command box, Package Manager, Automation, REPL
ColdFusionConference
 
PPTX
Implementation of the Continuous Integration based on Atlassian Bamboo
Анете Аннемария
 
PDF
Dev objective2015 lets git together
ColdFusionConference
 
PDF
Shitlist-driven development and other tricks for working on large codebases
Florian Weingarten
 
Smarter deployments with octopus deploy
Thibaud Gravrand
 
Deploying your application on open stack using bosh presentation
capouch
 
Docker (compose) in devops - prague docker meetup
Juraj Kojdjak
 
Continuous delivery of your legacy application
ColdFusionConference
 
Tame your test environment with Docker Compose
Kevin Bell
 
The Three Musketeers
Frederic Lemay
 
Packing It In: Images, Containers, and Config Management
Michael Goetz
 
Practical Continuous Deployment - Atlassian - London AUG 18 Feb 2014
Matthew Cobby
 
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Gavin Pickin
 
Octopus Deploy Tech Fest 2014
adriantwright
 
SFJS 6-19-2012
Adam Christian
 
Ship It ! with Ruby/ Rails Ecosystem
Yi-Ting Cheng
 
Splunk user group - automating Splunk with Ansible
Mark Phillips
 
Continuous Delivery and Infrastructure as Code
Sascha Möllering
 
Visual Studio Release Management - New weltanschauung or natural evolution? @...
Giulio Vian
 
Command box, Package Manager, Automation, REPL
ColdFusionConference
 
Implementation of the Continuous Integration based on Atlassian Bamboo
Анете Аннемария
 
Dev objective2015 lets git together
ColdFusionConference
 
Shitlist-driven development and other tricks for working on large codebases
Florian Weingarten
 

Similar to bol.com Dutch Container Day presentation (20)

PPTX
DockerCon 15 Keynote - Day 2
Docker, Inc.
 
PDF
Shipping NodeJS with Docker and CoreOS
Ross Kukulinski
 
PPTX
Introduction to Docker
Alan Forbes
 
PDF
Docker basic
Somenath Ghosh
 
PPTX
Being a Moby maintainer
Akihiro Suda
 
PDF
Whose Job Is It Anyway? Kubernetes, CRI, & Container Runtimes
Phil Estes
 
PPTX
Containerization using docker and its applications
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
PPTX
Containerization using docker and its applications
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
PPTX
Dev Ops Geek Fest: Automating the ForgeRock Platform
ForgeRock
 
PDF
Rackspace::Solve NYC - The Future of Applications with Ken Cochrane, Engineer...
Rackspace
 
PPTX
The challenge of application distribution - Introduction to Docker (2014 dec ...
Sébastien Portebois
 
PPTX
Built in NM - Meetup Talk - CTL Labs
Ross Jimenez
 
PPTX
Dockerize the World
damovsky
 
PDF
Cassandra and Docker Lessons Learned
DataStax Academy
 
PDF
Journey to the devops automation with docker kubernetes and openshift
Yusuf Hadiwinata Sutandar
 
PPTX
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
Van Phuc
 
PDF
Docker Oxford launch - Introduction to Docker
jonatanblue
 
PPTX
ma-formation-en-Docker-jlklk,nknkjn.pptx
imenhamada17
 
PDF
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
Gaetano Giunta
 
PDF
Cloud Native Landscape (CNCF and OCI)
Chris Aniszczyk
 
DockerCon 15 Keynote - Day 2
Docker, Inc.
 
Shipping NodeJS with Docker and CoreOS
Ross Kukulinski
 
Introduction to Docker
Alan Forbes
 
Docker basic
Somenath Ghosh
 
Being a Moby maintainer
Akihiro Suda
 
Whose Job Is It Anyway? Kubernetes, CRI, & Container Runtimes
Phil Estes
 
Containerization using docker and its applications
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
Containerization using docker and its applications
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
Dev Ops Geek Fest: Automating the ForgeRock Platform
ForgeRock
 
Rackspace::Solve NYC - The Future of Applications with Ken Cochrane, Engineer...
Rackspace
 
The challenge of application distribution - Introduction to Docker (2014 dec ...
Sébastien Portebois
 
Built in NM - Meetup Talk - CTL Labs
Ross Jimenez
 
Dockerize the World
damovsky
 
Cassandra and Docker Lessons Learned
DataStax Academy
 
Journey to the devops automation with docker kubernetes and openshift
Yusuf Hadiwinata Sutandar
 
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
Van Phuc
 
Docker Oxford launch - Introduction to Docker
jonatanblue
 
ma-formation-en-Docker-jlklk,nknkjn.pptx
imenhamada17
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
Gaetano Giunta
 
Cloud Native Landscape (CNCF and OCI)
Chris Aniszczyk
 
Ad

Recently uploaded (20)

PDF
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
PPTX
Earn Agentblazer Status with Slack Community Patna.pptx
SanjeetMishra29
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PDF
Per Axbom: The spectacular lies of maps
Nexer Digital
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PDF
Integrating IIoT with SCADA in Oil & Gas A Technical Perspective.pdf
Rejig Digital
 
PDF
Basics of Electronics for IOT(actuators ,microcontroller etc..)
arnavmanesh
 
PPTX
python advanced data structure dictionary with examples python advanced data ...
sprasanna11
 
PPTX
PCU Keynote at IEEE World Congress on Services 250710.pptx
Ramesh Jain
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
visibel.ai Company Profile – Real-Time AI Solution for CCTV
visibelaiproject
 
PPTX
Agentic AI in Healthcare Driving the Next Wave of Digital Transformation
danielle hunter
 
PPTX
The Yotta x CloudStack Advantage: Scalable, India-First Cloud
ShapeBlue
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PPTX
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
PDF
How Current Advanced Cyber Threats Transform Business Operation
Eryk Budi Pratama
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
Earn Agentblazer Status with Slack Community Patna.pptx
SanjeetMishra29
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
Per Axbom: The spectacular lies of maps
Nexer Digital
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
Integrating IIoT with SCADA in Oil & Gas A Technical Perspective.pdf
Rejig Digital
 
Basics of Electronics for IOT(actuators ,microcontroller etc..)
arnavmanesh
 
python advanced data structure dictionary with examples python advanced data ...
sprasanna11
 
PCU Keynote at IEEE World Congress on Services 250710.pptx
Ramesh Jain
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
visibel.ai Company Profile – Real-Time AI Solution for CCTV
visibelaiproject
 
Agentic AI in Healthcare Driving the Next Wave of Digital Transformation
danielle hunter
 
The Yotta x CloudStack Advantage: Scalable, India-First Cloud
ShapeBlue
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
How Current Advanced Cyber Threats Transform Business Operation
Eryk Budi Pratama
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
Ad

bol.com Dutch Container Day presentation

  • 1. Containerizing the largest Dutch e-commerce site: The bol.com story 1the shop for everyone
  • 2. •About me •About bol.com •Containers... in production •Mayfly: the original container use case •Choices, choices... •Lessons learned •Next steps 2 Content
  • 3. About me •Maarten Dirkse (@mdirkse) •Developer with a history degree, 9+ years of experience (mostly Java) •Work on the bol.com tools team. We provide the platform for the organisation to build software: Jenkins, SCM, Mayfly (more on that later) •Have been running containers in production* for almost 2 years. (bol.com has been running containers in production, no *, for a little over a year but really only for the past 5 months) 3 * production internally, for devs, not for customers
  • 4. •Over 6,5 million active customers •Virtual footprint of almost 1 visitors million per day •Over 14,5 million products •Moved to our own DC two years ago •VM-based architecture: 1 node per app instance •Everything is puppetized but was derived from a static config source (Racktables) •We’re hiring! http://banen.bol.com 4 About bol.com > 95% > 75% Brand awareness
  • 5. Containers... in production 5the shop for everyone ^^ obligatory container ship pic
  • 6. Containers... in production •Several mission-critical apps running in containers... in VM’s •Mesos + Marathon cluster that runs backend GUI for the webshop •Home-grown spidering solution that runs on Google Container Engine (also Mesos on GCE) •Mesos + Marathon cluster that runs Mayfly... 6
  • 7. Mayfly: the original use case 7the shop for everyone ^^ http://mayflycd.github.io/mayfly-talks/
  • 8. What is Mayfly? •Team had an idea for allowing teams to develop every service feature in isolation to remove bottleneck of shared test environment •Needed isolated runtime environment for every feature branch (that’s a lot of environments) •VM infrastructure was too static, too resource heavy, too slow 8
  • 9. Containers to the rescue! •Instead of having every feature branch deploy as a VM, deploy it as a container •Use of containers meant we could spin up environments in seconds and pack more of them onto the hardware •And so it was that containers were introduced at bol.com. But... 9
  • 10. DockerCon 2014: docker + ? Towards “peak container confusion” 10 Mesos Marathon (or Aurora?) Kubernetes Synapse & Nerve Paasta AWS EC2 CS CoreOS + Fleet RancherOS Spotify Helios wut?
  • 11. Choices, choices.... 11the shop for everyone ^^ obligatory cat pic
  • 12. The stack •After trying Fleet (buggy) and Kubernetes (5 min old) we settled on Mesos+Marathon running on CoreOS RHEL7 on bare metal •Consul for service discovery, Kevlar for KV store. •Choices made for Mayfly became the prototype for the bol.com container infrastructure 12
  • 13. Dynamic infrastructure is the future! 13 13 As the limitations of our VM-based infrastructure became clear, the platform team became convinced that the move to dynamic infrastructure was a necessary step to take in order to keep scaling the IT-architecture.
  • 14. But wait, we’re not finished! •After you’re done installing your new, mind-blowing tech you realize a lot of loose ends still need to be tied up. •Deploying docker to your machines? (and which version)? --> Docker puppet module (https://github.com/garethr/garethr-docker) •What about logs? --> Logspout (https://github.com/gliderlabs/logspout) •Zombie processes, SD registration? --> ContainerPilot (https://github.com/joyent/containerpilot) 14
  • 15. But wait, we’re not finished! •How do you actually tell Marathon what to deploy? --> Marathon terraform provider (https://github.com/Banno/terraform-provider-marathon) •Install a (properly secured) Docker registry. We went with the stock Docker registry behind a secured Nginx reverse-proxy •Base images? We choose to use the RHEL7 base image as the root of everything (known quantity in terms of ops support and security vetting) •And mind how you create images... 15
  • 16. BOB •Needed a way to audit and vet images that would be run in our landscape •Created BOB, a wrapper tool for docker build and docker push •BOB checks your Dockerfile’s and images, ensuring that they meet company standards, before they’re pushed to the registry •Nothing gets pushed to the registry if it hasn’t been built by BOB 16
  • 17. BOB (the builder) running on Jenkins 17
  • 18. Use cases •Mayfly (see above) •BIZ: lots of small, independently deployable modules with back office functionality. Stateless, ideal for containerization. •Spidering: horizontally scalable stateless processes that run in the cloud. 18
  • 19. Lessons learned 19the shop for everyone ^^ nothing funny about this, most of ‘em were learned the hard way
  • 20. Lessons learned 1/2 •Most of this stuff is relatively new or brand new, expect growing pains •Don’t run your container orchestration software (Mesos, Marathon) in containers. So if Docker dies, your platform doesn’t degrade with it. •Running your apps in a container can sometimes lead to interesting issues that don’t exist outside of containers (JVM memory issues, for instance) --> See https://www.youtube.com/watch?v=6ePUiQuaUos for example 20
  • 21. Lessons learned 2/2 •Graphite-style metrics become problematic in a container world. Prometheus exists, but we can’t just switch from one day to the next •HA-Proxy & consul template combo is pretty brittle, we now use Fabio -->https://github.com/eBay/fabio •Keep it simple, make small changes Static to dynamic is a sea change that is incredibly hard to oversee. Take small steps that deliver value immediately 21
  • 22. The cultural shift •Beware the mindset transition that dev teams will have to experience •Devs: “what do you mean I can’t ssh into the container?”) •It takes time for ops people to adjust to the idea of dynamic infrastructure. People tend to think from within their own constraints --> OPS control over the app runtime will no longer be absolute 22
  • 23. Next steps 23the shop for everyone ^^ obligatory lolcat
  • 24. Next steps 24 •IP-per-container (needed for per-container firewalls, aka to get security off our back) •Per-app service descriptor that drives app infra and config (to replace hiera data and feed Terraform) •Migrating ever more apps to the dynamic infrastructure
  • 25. Thank you! Till next time the shop for everyone