Mark Lavi

$ cat .signature

Technology Evangelist, ||
A Sequoia Capital funded company:
mobile:+1-650-400-2100 || Twitter @calm_mark || GitHub @mlavi

$ cat .profile || curl


  • DevOps Lead at Pertino (Cloud VPN provider)
  • Operations at Kaazing (HTML5 WebSocket pioneer)
  • Webmaster at,, Silicon Graphics
    • Technology Evangelist for LDAP and JavaScript

Infrastructure as Code blog =

Presenter Notes


Presenter Notes

What is DevOps?

  • A culturally rendered term, but Mark's time tested definition follows:
  • DevOps is the process of reducing friction between a developer's mind and delivering that value to the customer.

  • DevOps has many implications: values, people, tools, and practices.

Illustration: DevOps Automation Diagram

Presenter Notes

How to journey to DevOps?

  • Break down silos that impede holistic solutions and change.
    • Dev+Ops, not developers vs. QA vs. operations
    • Fail fast, fix fast
  • Relentless iteration and automation to achieve goals:
    • Continuous Delivery: multiple production deploys/day
    • Continuous Feedback = close loop Ops
      • DevOps is a bi-directional process for customers: internal and external
      • What is the health of our application, APIs, key performance metrics?
    • Developers evolve into service engineers

Presenter Notes

Infrastructure as Code

Software engineering practices applied to infrastructure:

  • Version everything: even the database
  • Configuration Management
    • Automate all the things!
  • Ephemeral stacks and environments
    • Test all the things!
    • Challenge: full stack orchestration
  • Immutable Infrastructure
    • Pets versus Cattle
    • Bespoke, hand-crafted, snowflake servers == dark magick == friction
    • Automation friction == technical debt == a bug

Presenter Notes

Infrastructure as Code

  • My dream: behavior and test driven operations
    • I am searching for others to discuss this topic!

Presenter Notes

Calm = DevOps Automation Platform

  • Control your hybrid clouds and containers:
    • AWS EC2, PXE, KVM, VMware vCenter, OpenStack, Docker, XenServer
  • Overlay and integrate your systems:
    • Configuration Management: Chef, Puppet, Salt
    • Jenkins, git, Nagios, etc.: anything with an API or (power)shell access
  • Architectural blueprints define resources, orchestration, and operations:
    • RBAC, approvals, notifications, and financial budget controls.
    • Push button, ephemeral stacks
    • Continuous delivery for cattle or pets
    • Close loop operations
  • A picture is worth a thousand words, let me know if you'd like a T-shirt or sticker!

Presenter Notes

Container Thought Experiments

Containers represent:

  • An ideal approach for continuous delivery of immutable infrastructure artifacts
  • Production challenges remain: deployment, monitoring, metrics, logs, networking, persistence
  • Early days: Docker as a tool versus Docker tool set as a platform
  • PERL motto: "There is more than one way to do it."

How do we take advantage of containers properly?

Presenter Notes

"Heavy Containers"

    $ grep -e FROM -e RUN Dockerfile
    FROM ubuntu:14.04.2
    RUN apt-get update && apt-get install -y apache2 php5


  • Full operating system (OS)
  • Configuration management by shell
  • No difference from a Virtual Machine

Proposed Solution:

  • Refactor into composable container layers
  • Leverage minimalist OS
  • Reuse configuration management

Presenter Notes

Full Stack Components

  • application:
    • code
    • code libraries and frameworks
    • static application configuration data
  • run time facilities:
    • language run time binaries
    • language run time configuration
    • language run time dependencies
  • server facility:
    • server binaries
    • server configuration
    • server run time configuration
    • server start up customization
    • server plug-ins
    • server plug-in dependencies

Presenter Notes

Container Refactoring

Each container built independently:

  • docker build -t server/facility
    • FROM minimalist/OS
    • RUN puppet-agent apply
  • docker build -t operations/facilities
    • FROM minimalist/OS
    • RUN chef-solo -c ~/solo.rb -j ~/node.json
  • packer build -var 'image-tag=application/microserviceX' build.json
    • build.json: { "builders": [ { "type": "docker", "image": "{{image-tag}}", "commit": true } ], "provisioners": [ { "type": "ansible-local" } ], "post-processors": [ { "type": "docker-tag" } ] }

Presenter Notes

Compose Layers

  • FROM server/facility
  • FROM server/runtime
  • FROM operations/facilities
  • FROM developer/tools
  • FROM application/microserviceX

Presenter Notes

Container Refactor Benefits

  • Each container layer can be maintained by a different team
  • Each built on a different cadence and cacheable
  • Composed together into a deployable artifact
  • Enables continuous delivery of immutable infrastructure artifacts
    • Shift from configuration management at deploy-time (run time) to build time
  • Reuse your Configuration Management for other cases

Presenter Notes

Container Deployment

Job Schedulers, Tools, and Services:

Presenter Notes

Container Challenges

  • Dynamic updates to load balancer, DNS, monitoring, and service discovery and configuration management systems
  • Architectures which are not immutable, e.g:
    • Code or API versions which cannot coexist, preventing rolling blue-green deployments and rollbacks.

Presenter Notes

Thank You, Questions?

Presenter Notes