
Series of blog posts show progress of updating/adding to EKS Cluster, this post covers adding Argo Rollouts.
Argo Rollouts:
- Then build progressive delivery
- Install Argo Rollouts through Argo CD.
- Convert the Gateway demo
Deploymentinto aRollout. - Demonstrate blue/green deployment.
- Add canary releases.
- Connect Rollouts to Gateway API.
- Add Prometheus analysis.
- Deploy an intentionally unhealthy version.
- Demonstrate automated rollback.
terraform plan
Phase 1: Install the Argo Rollouts controller through Argo CD.
Context & Layout Reasoning:
- We will install the Argo Rollouts controller through Argo CD. Think of the controller as the engine & the Helm repo installs the package for that particular engine.
- Below is the dependency order
- Install CRDs
- Start the controller
- Deploy a rollout
- Controller immediately recognize & manages it
| Main Argo Rollouts repository | builds and releases the software |
| Argo Helm repository | packages that software for configurable Helm installation. |
| Your GitOps repository | stores your chosen configuration and tells Argo CD to install it. |
| ArgoCD | Matches k8s manifests in cluster to match git |
| Argo Rollouts Controller | Interpret rollout strategy & safely move application from one version to another. W/no controller K8s could store the rollout custom resource after CRD is installed, BUT nothing would happen for the rollout. Argo Rollouts controller watches the rollout resources & performs the actions. – Git repo – ArgoCD – Rollout Manifest – Argo Rollouts controller – ReplicaSets, Pods, & Services |
K8s Rollout vs K8s
- K8s rollout is NOT handled by k8s cuz k8s does NOT know how to handle
- Canary steps
- Blue/green switching
- Pauses and manual promotion
- Analysis runs
- Automated rollback
- Stable versus canary ReplicaSets
Other Options:
- We could use the main repo argo-rollouts/install.yaml…
- However for my architecture layout already it makes sense to use
argoproj/argo-helmcuz it configurable Helm packaging used to install Argo Rollouts.- Git-managed values.yaml
- Controller resource requests and limits
- Dashboard enable/disable settings
- CRD installation settings
- Replica configuration
- Security-context configuration
- RBAC configuration
- Easier upgrades by changing targetRevision
- The same multi-source Argo CD pattern already used for Karpenter, Kyverno, Prometheus and other tools
Sequel Later….
- Later.. The demo workload &/or rollout strategy will arrive after…
apps/argo-rollouts/values.yaml
- The chart supports CRD installation and upgrades through
installCRDs; its defaults also provide non-root and read-only filesystem security settings.- The current stable controller is Argo Rollouts
v1.10.2; the current Helm chart is2.43.11. We’ll avoid thev1.11.0-rc1prerelease.
- The current stable controller is Argo Rollouts
- Sources:
applications/lab/platform/argo-rollouts.yaml
- Important to callout the annotation wave of “-1” cuz the controller is installed before Rollout workloads. Then also note the sources targetrevision utilized
=======================apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: argo-rollouts namespace: argocd annotations: # Install the controller before Rollout workloads. argocd.argoproj.io/sync-wave: "-1"spec: project: lab-platform sources: - repoURL: https://argoproj.github.io/argo-helm chart: argo-rollouts targetRevision: 2.43.11 helm: releaseName: argo-rollouts valueFiles: - $values/apps/argo-rollouts/values.yaml=======================

applications/lab/projects/lab-platform.yaml
- Add to sourceRepos & destinations, the clusterResourceWhitelist & namespaceResourceWhitelist did NOT change.
======================= sourceRepos: - https://argoproj.github.io/argo-helm=======================destinations: - namespace: argo-rollouts server: https://kubernetes.default.svc=======================
Validate Helm Chart & Install
=======================helm repo add argo \ https://argoproj.github.io/argo-helm=======================helm repo update=======================helm lint argo/argo-rollouts \ --version 2.43.11 \ --values apps/argo-rollouts/values.yaml=======================helm template argo-rollouts \ argo/argo-rollouts \ --version 2.43.11 \ --namespace argo-rollouts \ --values apps/argo-rollouts/values.yaml \ > /tmp/argo-rollouts-rendered.yaml=======================
GitOps validation workflow passes in GitHub Actions.
- Hopefully it passed?

.github/workflows/gitops-validate.yaml
- Add to the file only one entry to the existing
helm-rendermatrix & then thru the command add the helm template. - You will know its successful by seeing the extra job for argo-rollouts for metric helm-render.
=======================strategy: fail-fast: false matrix: include: - name: argo-rollouts repository: https://argoproj.github.io/argo-helm chart: argo-rollouts version: 2.43.11 values: apps/argo-rollouts/values.yaml namespace: argo-rollouts=======================helm template \ argo-rollouts \ argo-rollouts \ --repo https://argoproj.github.io/argo-helm \ --version 2.43.11 \ --values apps/argo-rollouts/values.yaml \ --namespace argo-rollouts \ --kube-version 1.31.0 \ --include-crds \ > /tmp/argo-rollouts-rendered.yamltest -s /tmp/argo-rollouts-rendered.yaml &&echo "Argo Rollouts rendered successfully"=======================

Phase 2: Deploy a simple Rollout demonstration workload.
applications/lab/projects/lab-platform.yaml
terraform apply