New to DevOps?
Confused about all the terminology and the funky new tools? If so, this 101 will provide you with the much needed knowledge on DevOps.
Have you ever been invited to a meeting where coffee drinking, pizza eating coders with Chef script T-shirts start to drop names like ZooKeeper, Habitat, Mesos, Bamboo and Kitchen CI? And then walked out of the meeting thinking “I’m going to Docker the Kubernetes out of them!” ?
If so, you should spend the next 5 minutes reading my summary notes on DevOps and DevOps toolchain. I guarantee it will increase your IQ score by a minimum of 3 points, help you sound 10 percent smarter and ensure 20 percent more participation in any DevOps-y meetings.
Introduction to DevOps
DevOps is the practice of operations and development engineers participating together through the entire service lifecycle, from the design and development process all the way to production support.
DevOps is also characterized by operations staff making use of many of the same techniques as developers for their systems work.
The three pillars of DevOps are;
- infrastructure automation
- continuous delivery
- reliability engineering
The three building blocks of DevOps are Agile, Lean and SDLC.
There are principles you can use to guide you in taking the core DevOps values and bringing them to life. The most respected set of principles is called The Three Ways
- systems thinking: focus on the overall outcome of the entire pipeline in our value chain
- amplifying feedback loops: creating, shortening and amplifying feedback loops
- culture of continuous experimentation and learning: create an environment of experimentation and learning
The Three Ways provide a practical framework to take the core DevOps values and effectively implement specific processes and tools in alignment with them.
Five most common DevOps methodologies:
- People over processes over tools
- Continuous Delivery; it’s the practice of coding, testing,and releasing software frequently, in really small batches so that you can improve the overall quality and velocity.
- Lean Management (work in small batches, work in progress limits, feedback loops, visualisation)
- Visible Ops Change Control
- Infrastructure as Code (systems treated like code, checked into source control, reviewed built and tested, managed programmatically)
10 Practices for DevOps success;
- Incident Command System (how to respond)
- Developers on call
- Status pages (informing users)
- Blameless post-mortems
- Embedded Teams (Ops member in Dev team and vice versa)
- The Cloud (API driven way to create and control infrastructure)
- Andon Cords (like a cord on a bus, anyone can stop ship if something is not right)
- Dependency injection: a software design pattern, where application must be unaware of its external dependencies. Instead, they are passed into the application at run-time. This is very important for well-behaved application in an infrastructure as a code environment
- Blue-Green deployment: two identical systems, upgrade one, test, point production traffic to it, if something fails, point production traffic back to the original system
- Chaos monkey: focus on making the overall system highly available
Value Stream Mapping: where you analyse the entire pathway of value creation, and understand what exact value’s added where, how long it takes, and where waste resides in that pathway
In a container-based architecture, the server becomes less and less a part of the equation. Applications are packaged in a container with just enough OS and dependencies to support them, and then are swarmed across a bare-bones physical infrastructure.
Infrastructure as Code toolchain
Depends heavily on the backend infrastructure used; i.e. cloud, bare-metal
In Amazon’s Cloud, their CloudFormation templates allow you to specify instances, network, load balancers, and even security settings for your infrastructure in JSON format. Microsoft Azure has Azure Resource Manager templates that do much the same thing. Terraform, allow you to specify all these settings in a more abstract fashion, with the idea that it will work across multiple cloud providers.
Unfortunately, truly integrated tools that allow you to model and configure both infrastructure and application at the same time are less common .Ubuntu’s Juju is an open source tool that allows you to model and control the infrastructure and services running on it together. This is common in Docker world.
Configuration Management tools include; Chef, Puppet, Ansible, Salt, CFEngine.
These configuration management tools allow you to specify recipes for how a system should get built. This includes the OS dependencies, system configuration, accounts, SSL certs, and most importantly, your application.
While Chef is more about configuring infrastructure, Habitat extends down into the application build cycle, and then into the application deploy cycle, bookending and complementing Chef.
Service Discovery Tools: Etcd, ZooKeeper and Consul are a few common tools to perform service discovery and state tracking across your infrastructure. They keep key value information and service health metrics and enable more real time orchestration of your systems
Containers generally don’t use Chef or Puppet as their configuration is generally handled with a simple text file called the Docker file. Docker Swarm, Google’s Kubernetes, and Mesos are three popular Docker platforms that do orchestration of containers. They allow you to bring in multiple hosts and run your container workload across all of them. They handle the deployment, the orchestration and scaling.