This article provides a 10000 feet view of DevOps fundamentals and principles.
History
In 2007, Patrick Debois, a system administrator who was working on a Data Center migration project for the Belgium government, faced the downside of the conflicts between operations and development team.
He was searching for a solution to overcome the conflict.
In 2008 at the Agile Conference in Toronto, Patrick Debois attends the session titled “Agile Infrastructure” by software developer Andrew Shafer, but only one person was present in the hall who was Patrick Debois himself. Later Andrew Shafer cancels his own session, but Debois meets Andrew in the hallway and based on that conversation they form “Agile Systems Administration Group”.
In 2009, O’Reilly conducts the Velocty conference where John Allspaw and Paul Hammond deliver the famous talk on “10+ Deploys Per Day: Dev and Ops Cooperation at Flickr”, but Debois couldn’t attend the session.
But Debois gets the opportunity to organize the Velocity event in Belgium and decided to conduct a session called “DevOpsDays”. He took the first three letters of “Development” and “Operations” and added “Days” to it to name the talk. On October 30, 2009, numerous developers, system administrators and other IT domain experts attends the session. After the session, the discussion moved to twitter and Debois used a memorable hashtag "#DevOps" and the name known ever since.
The conflict
The traditional thinking was, Devs add new features to the site and Ops keep the site fast and stable. Ops usually discourage the change in the interest of stability. Most of the time, the ops get the blame and that added the mindset of adding lesser/slow changes to production system. But this slowness was indirectly affecting the business.
Business always wants change/upgrades to keep up with the market, but the traditional thinking was slowing that down.
So there were two solutions;
- Discourage the change in the interest of stability
- Allow the change, but lower the risk of instability using process and tools.
The second option was chosen, but needs a mindset among the teams. Devs who needed to think link Ops and Ops who needed to think like Devs.
The process
Plan
The first and foremost process of building an application is planning. This phase defines the business value and requirements.
Tools: SharePoint, Confluence, JIRA, Katana etc.
Code
A source code management system and a development IDE is needed in this phase.
Tools: GitHub, GitLab, Gitea, VS code, Eclipse, Atom etc
Build
The written software that is stored in a source code management system needs to be built to generate the binaries or packages. Packaging also happens at this phase.
Tools: Docker, GitHub Actions, Bitbucket pipelines, Jenkins etc
Test
The packaged software will undergo testing, and this phase will help to catch regressions and other common bugs.
Tools: Selenium, JUnit etc.
Release
Once the build phase is passed, a new version of the software will be generated and this phase.
Tools: GitHub actions, GitLab pipelines, Jenkins pipelines etc
Deploy
Once the software release is available, an automated system can pick the new version and deploy it in a platform.
Tools: ArgoCD, FlexCD , Jenkins etc.
Operate
The software will be deployed on a platform, and that platform can be on cloud or on-premise. The post deploy operation will happen in this phase.
Tools: Kubernetes, OpenShift, Cloud compute instances, Serverless etc.
Monitor
This is one of the important phase of the DevOps closed feedback loop. Developers are expected to define monitoring metrics and alerts to make sure the application is running healthy. If the monitoring system reports any anomalies, the feedback will go to the planning phase of the next software release.
Tools: Prometheus, Grafana, AlertManager, Distributed tracing, Logging etc.
About the Author
Ansil Hameed Kunju
Ansil has more than a decade of experience in different IT domains. He is an expert in DevOps.His skill set includes Linux, GCP, AWS, VMware, Nutanix, Rancher, Docker, Git, Python, Golang, Kubernetes, Istio, Prometheus, Grafana, ArgoCD, Jenkins, StackStorm and other CNCF projects.