Development teams are moving at ever increasing velocity. Driven by dynamically changing requirements from the lines of business, they are embracing unprecedented levels of automation. Infrastructure teams are designing new automation frameworks as well. The traditional approach has been an imperative framework. This requires the operations team to define a set of instructions to be executed in order to achieve a state transition from what is in place now to the final goal. Example: Create a VM, Add Network Interface, Power on VM, etc. Planning and execution are the responsibility of the implementing team. Even with automation, imperative DevOps can be challenging to maintain at scale.
Declarative DevOps takes a different approach. Operations teams define the desired state for their system in a declarative way. They might define how many virtual machines they need, their resource requirements, network and storage configuration or what applications would be deployed to them. They would not define the steps to transition to this desired state, but would rely on an orchestration system to reconcile the active state of their environment with the desired state they have defined. Overwhelmingly, organizations are adopting Kubernetes as this desired state orchestration system.
Kubernetes is more than Container Orchestration
Kubernetes is generally thought of as an orchestrator of container based modern applications. It is definitely that, however it is much more. Kubernetes is an extensible platform that allows for the definition of custom resources that can be managed through the Kubernetes API. vSphere 7 with Kubernetes contains a Kubernetes control plane embedded in vSphere and makes extensive use of custom resources to allow developers to automate lifecycle management of their own Kubernetes clusters on-demand. This embedded Kubernetes API and stack of custom resources is called the Tanzu Kubernetes Grid Service for vSphere and provides a model for declarative DevOps.
What is GitOps
Taking the notion of declarative DevOps further is the concept of GitOps. GitOps defines Kubernetes cluster management and application delivery with Git as the single source of truth for your declarative infrastructure. The desired state of all infrastructure is stored in a Git-based source code management system. Teams describe the desired state of infrastructure and application environments like dev, test, staging and production in Git repos.
Continuous Integration pipelines push infrastructure and application changes to Git Repos. Continuous Delivery tools notice the changes and compare the actual state of the system to the desired state defined in the Git repo manifests, then attempt to reconcile the two.
vSphere 7 with Kubernetes Enables GitOps
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. It is deployed on running Kubernetes clusters – like the vSphere 7 with Kubernetes Supervisor Cluster – as a set of deployments, services, configmaps and secrets. DevOps teams set up the source code Git Repos and target kubernetes clusters for deployment of infrastructure and applications. As developer pipelines push new code to the repos, Argo CD orchestrates the deployment of that code into the appropriate target environments.
Let’s See it in Action
The following demonstration shows how the Argo CD continuous delivery platform, deployed using the vSphere Pod Service, automates Tanzu Kubernetes cluster lifecycle management through a GitOps operating model.