An Argo Rollouts plugin for Gloo Platform.
Install Argo Rollouts w/ downloaded Gloo Platform plugin (uses the vanilla quay.io/argoproj/argo-rollouts:latest
image, which then downloads the Gloo Platform plugin on startup)
kubectl create ns argo-rollouts
kubectl apply -k ./deploy
Deploy the initial rollout state - 100% to green
kubectl apply -f ./examples/0-rollout-initial-state-green
kubectl argo rollouts dashboard &
open http://localhost:3100/rollouts
Add a rollout revision to perform a canary rollout to blue
kubectl apply -f ./examples/1-rollout-canary-blue
The rollout should progress to 10% blue
and pause until manually promoted in the dashboard.
Requirements:
The plugin can be loaded into the controller runtime by building your own Argo Rollouts image, pulling it in an init container, or having the controller download it on startup. See Traffic Router Plugins for details.
See Kustomize patches in this repo for Argo Rollouts configuration examples.
Canary and stable services in the Rollout spec must refer to forwardTo
destinations in routes that exist in one or more Gloo Platform RouteTables.
RouteTable and route selection is specified in the plugin config. Either a RouteTable label selector or a named RouteTable must be specified. RouteSelector is entirely optional; this is useful to limit matches to specific routes in a RouteTable if it contains any references to canary or stable services that you do not want to modify.
strategy:
canary:
canaryService: canary
stableService: stable
trafficRouting:
plugins:
# the plugin name must match the name used in argo-rollouts-config ConfigMap
solo-io/glooplatform:
# select Gloo RouteTable(s); if both label and name selectors are used, the name selector
# takes precedence
routeTableSelector:
# (optional) label selector
labels:
app: demo
# filter by namespace
namespace: gloo-mesh
# (optional) select a specific RouteTable by name
# name: rt-name
# (optional) select specific route(s); useful to target specific routes in a RouteTable that has mutliple occurences of the canaryService or stableService
routeSelector:
# (optional) label selector
labels:
route: demo-preview
# (optional) select a specific route by name
# name: route-name
SetHeaderRoute
and SetMirrorRoute
in plugin.go