Why GitOps is so hard to explain and automate.

Blog / GitOps operating model

GitOps becomes easier to trust when teams can see who proposes, who approves, what reconciles and how the result is checked.

Hand-drawn GitOps workflow showing engineer approval, EKS updates, AWS controllers and operational results

GitOps sounds simple: Git stores the desired state and a controller keeps the running system in line with it. We have seen teams understand that sentence and still struggle to answer what happens when two controllers disagree, a sync deletes data or the application looks green but is broken.

The explanation gets easier when we show the full workflow: proposal, approval, permissions, reconciliation, health checks and recovery. Every step needs an owner.

A useful mental model

GitOps is a loop from a proposed change to a checked result.

A change is prepared and reviewed. Git records what the team accepted. A controller applies that state. The platform then reports health, drift and test results before the next decision.

Hand-drawn GitOps control loop connecting a proposed change, engineering approval, reconciliation across Kubernetes workloads, and operational evidence
Sketch 01 / The control loop

A change moves through review and application. Health and test results return before the next change.

  1. 01

    Propose

    An engineer or AI-assisted workflow prepares a change for review.

  2. 02

    Approve

    Engineers check the diff, permissions, risk, test results and recovery path.

  3. 03

    Reconcile

    Argo CD compares Git with the live system and applies the approved state.

  4. 04

    Check

    Health, drift, security, performance and cost show whether the change worked.

Where explanations fail

Most diagrams hide the decisions that matter during a failure.

Four common gaps make GitOps harder to understand:

01Tool and operating rules

Argo CD handles reconciliation. Teams still choose repository ownership, promotion rules, permissions and the meaning of healthy.

02Git state and permissions

Git records the accepted state. Branch protection, review rules, CI policy, RBAC and IAM decide who can turn it into a real change.

03Several controllers

Kubernetes, Argo CD, cloud controllers, autoscalers and application operators all run their own loops at different times.

04Sync and outcome

A green sync shows that declared objects were applied. Runtime health, security, performance, cost and user checks show whether the change worked.

Once these gaps are visible, the team can decide where state belongs, which controller owns it, what access it receives and which checks show that the result is ready.

Managed controllers on EKS

EKS Managed Capabilities can run controllers while your team keeps the platform rules.

Amazon EKS Managed Capabilities provides managed Argo CD, AWS Controllers for Kubernetes (ACK) and kro. AWS runs these controller components outside the worker nodes. Their resources remain visible through Kubernetes APIs.

Managed Argo CD

AWS runs and maintains the Argo CD service. Your team still defines sources, Projects, target clusters, access and sync policy.

Managed ACK

ACK resources can represent selected AWS services through the Kubernetes API. Its IAM role should allow only the services and resources it needs to manage.

Managed kro

kro can group Kubernetes and ACK resources behind a smaller platform API. Use it when a repeated pattern benefits from shared defaults and one versioned interface.

This removes much of the controller maintenance. IAM capability roles, Kubernetes RBAC, repositories, target clusters, sync behaviour, logs and recovery paths still need clear owners and tested rules.

One reviewable flow

Keep one path from a proposed change to a checked result.

AI can organise operational context and prepare a change before review. It can also summarise health, drift, security and cost results after reconciliation. Engineers make the production decision, Git records what they approved and each controller receives only the access it needs.

AWS and EKS example

A reviewed GitOps path for EKS and AWS services.

We use this pattern to explain ownership. Each controller has a narrow job, and the team adds only the components required by the workload.

Hand-drawn architecture from an AI-assisted proposal through engineering approval and Git to managed Argo CD, EKS preview and production workloads, scoped AWS services, and a returning evidence loop
Sketch 02 / AWS platform

One recorded path from proposal to result, with a narrow job for every controller.

  1. 01
    Propose

    AI can organise context and prepare a diff. Approval stays with engineers.

  2. 02
    Approve

    Engineers review the change, test results, permissions, risk and recovery path.

  3. 03
    Apply

    Git records the decision and Argo CD applies the defined scope.

  4. 04
    Run

    EKS workloads and selected AWS services stay inside clear account limits.

  5. 05
    Check

    Operational results return to the team and inform the next reviewed change.

Choose controller ownership

Give each kind of state one clear owner.

We have seen problems when Terraform, ACK and console changes all manage the same resource. Decide which system owns each kind of state and keep the other controllers away from it.

01

Foundation state

Keep account, network, identity, cluster and capability setup in infrastructure as code with a clear owner.

02

Application deployment

Use Argo CD Applications and ApplicationSets to apply reviewed Git state across environments.

03

Selected AWS resources

Use ACK for workload-owned AWS resources that benefit from the same Kubernetes workflow, with limited IAM permissions.

04

Platform building blocks

Use kro when a repeated group of Kubernetes and ACK resources deserves a smaller platform API with shared defaults.

05

Operational context

Let AI organise controller logs, health, drift, tests, security findings and cost data into a proposal. Engineers approve production changes.

Controls that build trust

Design deletion, failure and recovery before increasing automation.

Teams trust GitOps sooner when they know what happens during a failed sync, a bad change or a deletion.

  • Git records the accepted state, and engineers approve production changes.
  • Repository access, cluster RBAC and capability IAM roles stay separate and use the minimum access needed.
  • Each environment has its own sync policy. Production can keep manual promotion, sync windows and stronger checks.
  • Preview and UAT environments check behaviour before production review.
  • Pruning, deletion, resource adoption and recovery are tested before automation grows.
  • Controller health and logs go to monitoring systems the team already owns.

Argo CD supports automated sync, pruning and self-healing. Each setting is a policy choice. Test environments may sync continuously, while production uses an explicit promotion and sync window. Choose the setup the team can explain, monitor and recover.

How to roll it out

Increase controller access one step at a time.

Hand-drawn six-stage GitOps rollout journey from mapping ownership and observing drift through preview reconciliation and scoped resources to reusable platform building blocks and production evidence
Sketch 03 / Learn before adding access

Start by making the loop visible. Increase its access after the team understands ownership, recovery and the results it reports.

  1. 01

    Map

    Record repositories, owners, environments, approval points and the current release path before choosing controllers.

  2. 02

    Observe

    Start with drift detection and health reporting so the team can see the loop without changing production.

  3. 03

    Apply in a test environment

    Automate one low-risk service or preview environment, including cleanup and failure handling.

  4. 04

    Add selected AWS resources

    Introduce ACK for resources with a clear owner, permission limit and deletion rule.

  5. 05

    Add a platform API

    Use kro when a repeated group of resources needs a smaller, versioned API.

  6. 06

    Expand production access

    Increase production automation after the team has tested results, recovery and permissions.

This gives the team time to learn normal controller behaviour and failure messages before production access grows. Repositories, permissions, logs and recovery are already familiar when the next step begins.

What success looks like

GitOps becomes easier to trust when five answers are clear.

GitOps connects proposed changes, review, deployment, drift correction and operational results. EKS Managed Capabilities can reduce controller maintenance. Argo CD applies application state, ACK can manage selected AWS resources and kro can provide a smaller API for repeated resource groups.

The implementation works when engineers can answer five questions without opening a diagram: who proposes, who approves, what reconciles, what access it has and how the team knows the result worked.

References and related resources

Read the implementation details.

From explanation to ownership

Design a GitOps loop your team can explain during an incident.

We can map repositories, EKS capabilities, permissions, preview environments, sync policy and operational checks around your current AWS platform.

Schedule a platform call