Decision. Rollouts for services that need progressive delivery
Alternative. Plain rollingUpdate Deployments everywhere
Why. A canary catches a bad release before every replica gets it, at the cost of one CRD to learn.
Rolls out new versions gradually, canary or blue-green, instead of all at once
Argo Rollouts replaces the Deployment rollout strategy for services that need it: new revisions shift traffic gradually (canary steps) or switch over atomically (blue-green), with analysis in between. The strategy lives next to the app in Git.
Excerpt from argocd-apps/values.yaml in the argocd-apps chart,
with annotations added for this site:
argo-rollouts:
application: true
project: cluster-services
# false
autoSync: false
The full argo-rollouts/values.yaml from the service's
own chart:
argo-rollouts:
installCRDs: true
keepCRDs: true
clusterInstall: true
createClusterAggregateRoles: true
serviceAccount:
create: true
name: "argo-rollouts-service-account"
controller:
replicas: 1
# Monitoring: expose the rollouts controller Prometheus metrics on
# argo-rollouts-metrics:8090 (scraped by the `monitoring` Alloy
# DaemonSet → New Relic).
metrics:
enabled: true
trafficRouterPlugins:
- name: "argoproj-labs/gatewayAPI"
location: "https://github.com/argoproj-labs/rollouts-plugin-trafficrouter-gatew\
ayapi/releases/download/v0.11.0/gatewayapi-plugin-linux-arm64"
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
seccompProfile:
type: RuntimeDefault
providerRBAC:
enabled: true
providers:
istio: false
smi: false
ambassador: false
awsLoadBalancerController: false
awsAppMesh: false
traefik: false
apisix: false
contour: false
glooPlatform: false
gatewayAPI: true
dashboard:
enabled: true
readonly: false
component: rollouts-dashboard
createClusterRole: true
replicas: 1
image:
registry: quay.io
repository: argoproj/kubectl-argo-rollouts
tag: ""
pullPolicy: IfNotPresent
service:
type: ClusterIP
portName: dashboard
port: 3100
targetPort: 3100
serviceAccount:
create: true
name: "dasboard-argo-rollouts-sa"
ingress:
enabled: false
annotations:
istio.ingress.kubernetes.io/router.entrypoints: websecure
ingressClassName: istio
hosts:
- argo-rollouts.opi5cluster.co.uk
paths:
- /
pathType: Prefix
tls:
- secretName: opi5cluster-co-uk-domain-secret
hosts:
- argo-rollouts.opi5cluster.co.uk
notifications:
configmap:
create: true templates/http-route.yaml Gateway API HTTPRoute exposing the service through the Istio gateway under opi5cluster.co.uk.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: {{ .Release.Namespace }}-httproute
namespace: {{ .Release.Namespace }}
annotations:
link.argocd.argoproj.io/external-link: "https://argo-rollouts.opi5cluster.co.uk"
spec:
parentRefs:
- name: istio-gateway
namespace: istio
sectionName: websecure
hostnames:
- argo-rollouts.opi5cluster.co.uk
rules:
- backendRefs:
- name: argo-rollouts-dashboard
port: 3100 Decision. Rollouts for services that need progressive delivery
Alternative. Plain rollingUpdate Deployments everywhere
Why. A canary catches a bad release before every replica gets it, at the cost of one CRD to learn.