First, DevOps took the IT world by storm. Now, GitOps is garnering similar interest and adoption. There’s a relationship between the two: The latter can be thought of as a more specific version of the former.
“If DevOps is a way of life, GitOps is prescriptive about how you practice it,” says E.G. Nadhan, chief architect and strategist, Red Hat North America. “GitOps advocates a cloud-native or microservices-centric vision from the get-go.”
It also prescribes a foundational tool, and it’s right there in the name: the version control system Git. As Red Hat director of developer experience Don Schenck wrote recently, GitOps basically means: “Store everything in Git.”
Schenck explains that this is, of course, an oversimplified definition. But that is actually the foundation: “You store your code and infrastructure and build configuration information in your Git repository,” Schenck says. “Tools such as OpenShift Pipelines, ArgoCD, and Kustomize work with and within this concept to make things happen and pull it all together.”
(Check out Schenck’s blog post – “Why should developers care about GitOps?” – for more from the developer POV.)
We’re here to build out a deeper understanding of GitOps for IT leaders and their teams: What is it? Why is it important? And how do you explain it to others, especially if they're not fluent in the realms of cloud-native and Kubernetes? Let’s start with a handful of clear definitions you can use.
What is GitOps?
“GitOps is a prescriptive, controlled way of practicing DevOps unified around a single repository of artifacts for all actors involved across the development and operations teams in the software development lifecycle.” –E.G. Nadhan, chief architect and strategist, Red Hat North America
“GitOps consists of [a] set of automation practices and tools that enables effective management of infrastructure and continuous deployment for cloud native applications.”–Jitendra Thethi, VP of research and innovation, Capgemini Engineering
“GitOps is a pattern, where a source control system (like Git) is used as a reliable source of information about infrastructure and any changes can be applied just after a pull-request (classic pipeline for Git). GitOps is a pattern for Infrastructure as Code used to control, maintain and manage any resources (preferably cloud resources) and collect information about infrastructure, services, applications and deployments. Also, GitOps as a separate practice may well be a part of a set of DevOps practices, and it is aimed at closer interactions with developers.”–Raman Khvashcheuski, DevOps department manager at Exadel
“GitOps is the acknowledgement that everything is (or should be) defined as code. With all code in Git, Git becomes the source of truth (or, to be a little more precise, the desired state of the whole system). If Git is the source of truth, you cannot run operations manually by executing random commands. Doing so would mean that Git would stop being the only source of truth. Instead, the only goal of humans (operations) is to define the desired state as code and store it in Git. Then, let the machines synchronize that with the actual state. Such synchronization must be continuous so that the two states are (almost) always in sync. In other words, GitOps is about defining everything as code, storing that code in Git, and letting the machines detect the drift between the desired and the actual state – and making sure that drifts are resolved as soon as possible, hence resulting in the two states being almost always in sync.” –Viktor Farcic, open source program manager & developer relations at Shipa
[ How can operators help your team? Get the free eBook: O'Reilly: Kubernetes Operators: Automating the Container Orchestration Platform. ]
Why is GitOps important? What are the benefits of GitOps?
Perhaps the best way to add context to these definitions – and to also think about the best ways to explain and evangelize GitOps if the need arises – is to consider what makes it important.
Here’s as good a starting point as any: GitOps can alleviate what at times may seem like an overwhelmingly complex array of technical decisions for cloud-native development and infrastructure. Just look at the CNCF Cloud Native Landscape – you practically need a Jumbotron to fit everything on a single screen.
GitOps simplifies cloud-native choices
Choice is great, but it can also be overwhelming, especially for teams that are already stretched thin or that don’t have a wealth of existing cloud-native experience.
“In a world replete with a plethora of choices for tools and platforms, GitOps centers – and thus simplifies – the activities involved around a single tool of choice: Git,” Nadhan says. “This approach shifts the focus to practicing the art of DevOps without being distracted by administrative, environmental details around tooling choices.”
[ Still learning about cloud-native? Download our cheat sheet: What’s the difference between a pod, a cluster, and a container? ]
GitOps is also a prescriptive method of making some of the loftier promises of DevOps and cloud-native technologies attainable and accessible to a wide array of organizations and teams.
“What makes GitOps so important is that it now provides a specific framework for accomplishing goals that were known long before GitOps emerged,” Farcic says. “Defining everything as code is not new. Neither is storing the code in a code repository (Git). Neither is making sure that our systems are in sync with what is in Git. What is new is a clearly defined process for how to accomplish that.”
GitOps includes automation and enforcement
GitOps is a mix of automation and enforcement – which makes it sound a little mean or scary, but is actually a good thing that ensures harmony between the desired state of your system and the actual state.
“You continuously pull information stored in Git and compare that info – the desired state – with the state of the system – the actual state,” Farcic says. “If there is a drift – a difference between the two states – you can perform the necessary actions to converge the actual into the desired state, thus making the two the same.”
This continuous syncing between desired state and actual state in turn makes modern software pipelines and infrastructure – think cloud-native and hybrid cloud environments – far more manageable than would be the case otherwise. This helps make systems more stable, reliable, and scalable – again, consider GitOps as a specific execution of the broader promise of DevOps.
“GitOps is a part of DevOps practices and can improve stability and make infrastructure predictable because all changes are documented,” Khvashcheuski says. “Developers can look at the history for all changes and restore the previous state if any problem is detected, or if the infrastructure or service was damaged. Also, GitOps can help scale infrastructure and automate many manual processes to minimize routine tasks and errors. GitOps is often used to create a guaranteed and consistent infrastructure for different environments. All these points make GitOps important for modern infrastructure and pipelines.”
[ Related read: Kubernetes: 6 open source tools to put your cluster to the test. ]
GitOps can boost deployment speed
Speed is another commonly cited benefit of DevOps, as epitomized by faster and more frequent deployments than in a traditional monolithic pipeline. GitOps again offers a specific way of achieving that potential.
“GitOps enables engineers to manage continuous deployments and infrastructure management as code in order to drive automation, bring repeatability, reduce downtime and eliminate human interventions as part of continuous release cycles,” Thethi says.
Thethi adds that the simplest way to explain GitOps to others – especially non-technical people – is to simply refer them to their favorite apps and services. GitOps (or something like it) is one way in which those apps are made available to us.
“Your favorite apps and websites are served from hundreds and thousands of [computers] across the globe and new features are made available to us on a continuous basis,” Thethi says. “To make this an efficient process, all this activity is automated and is driven primarily by code. [GitOps enables] the management of code to control such huge infrastructure and ensure delivery of your application in the most performant way.”
Is GitOps a fit for your team?
So is GitOps right for you and your team? “Probably” might be the most reasonable answer – there’s a reason why GitOps has become so popular. Unless your organization has zero cloud footprint and no plans to adopt containers and other cloud-native technologies – in which case, you’re probably not reading this article – GitOps is worth evaluating as a particular mode of practicing DevOps principles and automating more of your pipeline and infrastructure.
According to Red Hat's Nadhan, one of the best factors to consider is just how cloud-native your organization is going to go – and how quickly.
“If you are an organization with a near-term goal to expedite the adoption of container platforms in the cloud, go GitOps,” Nadhan says. “If you are an organization dealing with the need to revitalize your workforce with a shift in the mindset and the need to co-exist with more traditional applications, start with DevOps and eventually go GitOps for select workloads.”
[ Want cloud-native app advice? Get the eBook: O'Reilly: Kubernetes patterns for designing cloud-native apps. ]