🎉 DevOps Interview Prep Bundle is live — 1000+ Q&A across 20 topicsGet it →
All Articles

ArgoCD Image Updater Review: Automated Image Updates for GitOps Teams (2026)

Hands-on review of ArgoCD Image Updater — the tool that automatically updates Kubernetes deployment images when new container versions are pushed. What it does well, its limitations, and how it compares to Flux Image Automation.

Shubham5 min read
Share:Tweet

One of the friction points in GitOps is image updates. Your CI pipeline builds and pushes a new Docker image. Now someone needs to update the image tag in the Git repository so ArgoCD deploys it. Options: manually update the YAML, write a CI script that commits to Git, or automate it with a dedicated tool.

ArgoCD Image Updater is the dedicated tool. It watches container registries for new images and automatically updates the image tags in your GitOps repository — the missing link between "CI pushes a new image" and "ArgoCD deploys it."

What ArgoCD Image Updater Does

Image Updater runs as a separate deployment in your cluster (alongside ArgoCD). It:

  1. Watches container registries for new image tags matching a pattern
  2. When a new tag appears, updates the image tag in your Git repository (or ArgoCD application spec)
  3. ArgoCD picks up the Git change and deploys the new version

The result: push a new image to your registry, and it is automatically deployed to your configured environments — without a human touching Git.

Installation

bash
kubectl apply -n argocd -f \
  https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml

Create a registry secret if using a private registry:

bash
kubectl create secret docker-registry registry-credentials \
  --docker-server=ghcr.io \
  --docker-username=my-github-user \
  --docker-password=$GITHUB_TOKEN \
  -n argocd

Configuring an Application for Automatic Updates

Image Updater works through annotations on ArgoCD Application objects:

yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: payment-api
  namespace: argocd
  annotations:
    # Which images to watch
    argocd-image-updater.argoproj.io/image-list: payment=ghcr.io/myorg/payment-api
 
    # Update strategy — semver: only update when a higher semver is found
    argocd-image-updater.argoproj.io/payment.update-strategy: semver
 
    # Only consider tags matching this pattern
    argocd-image-updater.argoproj.io/payment.allow-tags: regexp:^v[0-9]+\.[0-9]+\.[0-9]+$
 
    # How to write back the update — git or argocd (argocd is in-cluster, no git commit)
    argocd-image-updater.argoproj.io/write-back-method: git
 
    # Branch to commit to
    argocd-image-updater.argoproj.io/git-branch: main
 
    # Commit message template
    argocd-image-updater.argoproj.io/payment.helm.image-tag: image.tag
spec:
  source:
    repoURL: https://github.com/myorg/gitops-config
    targetRevision: main
    path: apps/payment-api
    helm:
      releaseName: payment-api

Update Strategies

Image Updater offers several strategies for deciding which new tag to apply:

semver (most useful for production):

yaml
argocd-image-updater.argoproj.io/payment.update-strategy: semver

Only updates if the new tag is a higher semantic version. v1.2.3v1.2.4 is allowed, v1.2.3v1.2.2 is not. Prevents accidental downgrades.

latest (use for development):

yaml
argocd-image-updater.argoproj.io/payment.update-strategy: latest

Always uses the most recently pushed tag. Combined with :latest or date-based tags. Good for staging/dev environments.

digest:

yaml
argocd-image-updater.argoproj.io/payment.update-strategy: digest

Tracks by image digest instead of tag. Updates even if the tag did not change (useful when you push to a mutable tag like main).

name (alphabetical order): Useful when you use date-based or build-number tags where alphabetical order maps to recency.

Write-Back Methods

Git write-back (recommended for production GitOps): Image Updater commits the new image tag to your Git repository as a new file (.argocd-source-<app-name>.yaml by default) that ArgoCD merges with your main application source:

bash
# File created by Image Updater in your repo
# .argocd-source-payment-api.yaml
helm:
  parameters:
  - name: image.tag
    value: v1.4.2
    forceString: true

This means the change is tracked in Git — you can see who/what updated the image tag in your commit history.

ArgoCD write-back (in-cluster, no git commit): Image Updater updates the ArgoCD Application object directly. Faster but means the update is not in Git — it will be overwritten on the next git sync. Useful for development environments where you do not want constant commits.

What Works Well

Semver filtering is reliable. Once configured, it correctly identifies semantic version ordering and will not downgrade your deployment. This is the feature that makes it safe for production use.

Registry polling is efficient. Image Updater caches registry responses and only polls at a configured interval (default 2 minutes). It does not hammer your registry on every check.

Multi-environment support. By having separate ArgoCD Applications per environment (dev, staging, prod), you can configure Image Updater to auto-update dev and staging but require manual approval (no Image Updater annotation) for production.

Helm and Kustomize support. Works with Helm values file updates and Kustomize image overrides — not just raw Deployment YAML.

Where It Falls Short

No approval gates. Image Updater is all-or-nothing per application. You cannot say "auto-update staging but require a human approval before production." The typical pattern is: Image Updater manages dev/staging; a separate pipeline or manual PR manages production.

Commit noise. With git write-back, every image update generates a commit. If you deploy 10 times per day, that is 10 commits to your gitops repo, all from Image Updater. Use branch-based or .argocd-source-* file approach to keep this separate from your main config.

Registry authentication complexity. Supporting ECR (AWS Elastic Container Registry) requires special IAM setup because ECR tokens expire every 12 hours. Image Updater handles it but requires specific configuration.

yaml
# ECR credentials configuration
argocd-image-updater.argoproj.io/image-list: api=123456789.dkr.ecr.us-east-1.amazonaws.com/my-api
argocd-image-updater.argoproj.io/api.pull-secret: pullsecret:argocd/ecr-credentials

No notification on update. Image Updater does not notify Slack/Teams when it updates an image. You need to set up ArgoCD notifications separately to track what it is doing.

Comparison: Image Updater vs Flux Image Automation

If you use Flux instead of ArgoCD, Flux has a built-in image automation controller that does the same thing. The concepts are identical but the configuration differs.

For pure ArgoCD users, Image Updater is the natural choice. For teams evaluating GitOps tools, Flux's built-in image automation is one advantage.

Verdict

ArgoCD Image Updater solves a real problem in GitOps workflows and does it well for most cases. The semver strategy for production deployments is reliable, and the git write-back mode keeps your GitOps repository as the source of truth.

The lack of built-in approval gates means you still need a separate mechanism for controlled production promotions — Image Updater is not a full continuous delivery platform. Pair it with ArgoCD's sync policies and notifications for a complete workflow.

Score: 7/10 — Solid tool for its specific job. Does exactly what it says with the expected limitations of a focused tool rather than a platform.


More ArgoCD content? Read our ArgoCD vs Flux deep dive and build a GitOps pipeline with ArgoCD and Helm.

🔧

Today I Fixed

Short real fixes from production — posted daily

Browse fixes
Newsletter

Stay ahead of the curve

Get the latest DevOps, Kubernetes, AWS, and AI/ML guides delivered straight to your inbox. No spam — just practical engineering content.

Related Articles

Comments