“It is not the strongest of the species that survive, nor the most intelligent, but the one most responsive to change.” — Charles Darwin

“DevOps is a set of practice that seeks to reduce the gap between software development and software operation.”

Use Cloud and DevOps to build immutable infrastructure by agile development using collaborative open source tools:
-Terraform or Cloud Formation for infrastructure provisioning and scaling.
-Packer for building server images or containers using:
-chef cookbooks, puppet modules or ansible playbooks to build servers.

Immutable Infrastructure

"One of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains." - Steve Jobs

Immutable Infrastructure is NOT using Chef Server or Puppet Master to pull running updates regularly on all your servers. Instead servers fall into 3 groups (in order of preference):
  • Serverless infrastructure. Cloud services like AWS RDS, Lamba, SQS etc.

  • Custom Images or Containers. Use Packer with chef solo/puppet apply/ansible in development to build custom images to use in test and live.

  • Configure remaining servers directly. Use chef solo/puppet apply/ansible by pushing changes to servers using tools like test-kitchen or pulling changes from AWS S3.

  • Immutable infrastructure where ever possible - replace servers instead of updating them.

  • Only one git repository for all environments - use a production branch and allow other branches and allow servers to be built from different branches.

  • Puppet Forge, Chef Community or Ansible Galaxy to minimise the amount of config management to write. Contribute if there is no generic cookbook/module/playbook for your software component.

  • Tools like test-kitchen to run configuration and verification tests.

  • Don't use Configuration Management tools for deployment of applications.

It works best with a cloud where it can replace some of the functions of Chef Server or Puppet Master:
  • Know where your servers are and what their roles are instead of chef server or puppermaster. (eg AWS Console).

  • Orchestrate the servers with a dsl (eg cloudformation with cfndsl).

  • Monitor the servers, manage the log files and generate alarms (e.g. AWS CloudWatch).

  • Run your databases as services (e.g. AWS RDS).

Try and keep it simple and build as little as possible yourself as this will make you as efficient as possible.

Chef Solo at AirBNB
DevOps is Not a Feature!
De-Centralise and Conquer: Masterless Puppet in a Dynamic Environment
9 Reasons Provisioning Tools Aren’t Ideal for Deploying Enterprise Apps Why You Should Be Using Nodeless-Masterless Puppet
Testing infrastructure with Test Kitchen
Scaling Puppet in EC2
Keep Chef out of your Docker containers
Chef Cookbook Continuous Integration


Post a Comment