GitOps and Declarative Delivery

GitOps takes one idea to its logical conclusion: if your infrastructure and deployments are declarative code, then git should be the single source of truth, and a machine — not a human running commands — should continuously make reality match git. It turns "deploy" from an action you perform into a state you declare, and it's how modern platforms run.

Infrastructure as code made infrastructure declarative and version-controlled. GitOps takes the next step: make git the single source of truth for the desired state of your systems, and have an automated agent continuously reconcile the running system to match what’s in git. Instead of pushing changes to production, you commit the desired state to git and the system pulls and applies it. This post covers the GitOps model, its principles, pull-based reconciliation, and why it’s become the standard way platforms deploy — especially on Kubernetes.

The core idea: git as the source of truth

GitOps rests on a simple, powerful premise: the desired state of your entire system — infrastructure and applications — lives in git, declaratively, and git is the single source of truth. Everything you want running is described in a git repository (as declarative IaC / Kubernetes manifests / config), and the actual running system is continuously made to match that repository. This means:

This reframes deployment fundamentally: from an imperative action (“push this out”) to a declarative state (“git says the system should be this; make it so”). The system is defined by git, and keeping it that way is automated. This is the declarative model from the IaC post, extended to the operational running of the whole system.

The GitOps principles

GitOps is often summarized by a few principles (as articulated by the OpenGitOps project):

These principles combine into a system where git is authoritative, changes are versioned and revertible, and an automated agent keeps reality matching git — no manual deployment, no drift.

Pull-based reconciliation

A distinctive GitOps mechanism is pull-based (vs push-based) deployment, and it matters for security and reliability:

Push-based (traditional CI/CD deploy):
  pipeline → (has prod credentials) → pushes changes INTO the cluster

Pull-based (GitOps):
  agent INSIDE the cluster → pulls desired state FROM git → applies it locally
  → continuously reconciles actual vs desired

Pull-based has real advantages: better security (no external system holds cluster-write credentials; the agent inside pulls), and continuous reconciliation (the agent constantly ensures actual matches desired, so it corrects drift automatically — if someone manually changes the cluster, the agent reverts it back to what git says). This continuous reconciliation is GitOps’s superpower over plain IaC: IaC applies changes when you run it; GitOps continuously enforces the git state, so drift (from the IaC post) is not just detected but automatically corrected. Tools like Argo CD and Flux implement this pull-based reconciliation for Kubernetes.

Why GitOps matters

GitOps delivers concrete benefits that make it the modern standard, especially for Kubernetes:

That last point connects GitOps to the platform: GitOps gives developers a familiar, safe, self-service deployment model — “change git, and the platform makes it real” — which is exactly the kind of paved-road capability an internal developer platform provides. Developers don’t need to know the deployment mechanics; they commit config to git and the platform’s GitOps reconciliation handles the rest.

GitOps as declarative operations

The takeaway: GitOps makes git the single source of truth for the whole system’s desired state (declaratively), with an automated agent pulling from git and continuously reconciling reality to match — turning deployment from an imperative action into a declared state. Its principles (declarative, versioned/immutable, pulled, continuously reconciled) deliver auditability, easy rollback, automatic drift correction, consistency, and security, via pull-based reconciliation (Argo CD, Flux on Kubernetes). It’s the operational culmination of the declarative model IaC started, and it’s how modern platforms deliver a safe, git-driven, self-service deployment experience to developers. With the DevOps foundation now covered (CI/CD, IaC, GitOps), the series turns to the platform-engineering discipline built on it — starting with the internal developer platform itself.

Key takeaways

Further reading

Sources & References