diff options
| author | Paul Buetow <paul@buetow.org> | 2026-01-15 21:01:35 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-01-15 21:01:43 +0200 |
| commit | 8e0cf186a1e1dba042e4dd4eb6727889d2b22bbd (patch) | |
| tree | 5f1c70195961a5bbf3cc8765f8cec87ae474f2f7 /f3s/argo-rollouts | |
| parent | 617a9f741bad57640e06f03b67b8ea2983c5904e (diff) | |
feat: add Argo Rollouts controller and tracing-demo canary rollout demo
Diffstat (limited to 'f3s/argo-rollouts')
| -rw-r--r-- | f3s/argo-rollouts/Justfile | 33 | ||||
| -rw-r--r-- | f3s/argo-rollouts/README.md | 85 | ||||
| -rw-r--r-- | f3s/argo-rollouts/values.yaml | 28 |
3 files changed, 146 insertions, 0 deletions
diff --git a/f3s/argo-rollouts/Justfile b/f3s/argo-rollouts/Justfile new file mode 100644 index 0000000..03ab061 --- /dev/null +++ b/f3s/argo-rollouts/Justfile @@ -0,0 +1,33 @@ +# Argo Rollouts deployment automation +# Deploys Argo Rollouts controller to the 'cicd' namespace + +NAMESPACE := "cicd" +RELEASE_NAME := "argo-rollouts" + +install: + helm repo add argo https://argoproj.github.io/argo-helm || true + helm repo update + kubectl apply -f - <<'EOF' +apiVersion: v1 +kind: Namespace +metadata: + name: {{NAMESPACE}} +EOF + helm install {{RELEASE_NAME}} argo/argo-rollouts --namespace {{NAMESPACE}} -f values.yaml + @echo "" + @echo "Argo Rollouts deployed successfully!" + @echo "Controller installed in {{NAMESPACE}} namespace" + @echo "" + +upgrade: + helm upgrade {{RELEASE_NAME}} argo/argo-rollouts --namespace {{NAMESPACE}} -f values.yaml + +uninstall: + helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} || true + +status: + kubectl get pods -n {{NAMESPACE}} -l app.kubernetes.io/name=argo-rollouts + kubectl get crd | grep rollout + +logs: + kubectl logs -n {{NAMESPACE}} -l app.kubernetes.io/name=argo-rollouts --tail=100 -f diff --git a/f3s/argo-rollouts/README.md b/f3s/argo-rollouts/README.md new file mode 100644 index 0000000..6f9e86e --- /dev/null +++ b/f3s/argo-rollouts/README.md @@ -0,0 +1,85 @@ +# Argo Rollouts Deployment for f3s Cluster + +Argo Rollouts is a Kubernetes controller for progressive delivery strategies including canary, blue-green, and A/B testing deployments. + +## Overview + +- **Namespace**: `cicd` (alongside ArgoCD) +- **Deployment Mode**: Single instance +- **CRD**: Rollout custom resource for progressive deployments +- **Integration**: Works with ArgoCD for GitOps-based rollouts + +## Installation + +```bash +just install +``` + +## Verification + +```bash +just status +``` + +Check that the rollouts controller pod is running: +```bash +kubectl get pods -n cicd -l app.kubernetes.io/name=argo-rollouts +``` + +Check CRD is installed: +```bash +kubectl get crd | grep rollout +``` + +## Demo: Tracing-Demo Frontend Rollout + +The frontend service uses a Canary strategy: + +1. Deploy new version +2. Send 50% traffic to new version +3. Monitor for 2 minutes +4. If successful, shift 100% traffic +5. If failures detected, rollback + +### Watch Rollout Progress + +```bash +# Real-time status +kubectl argo rollouts get rollouts tracing-demo-frontend -n services --watch + +# Full rollout status +kubectl argo rollouts status tracing-demo-frontend -n services + +# Describe rollout details +kubectl describe rollout tracing-demo-frontend -n services +``` + +### Trigger a New Rollout + +Update the frontend image tag in git (or use kubectl): + +```bash +# Patch to trigger new rollout +kubectl patch rollout tracing-demo-frontend -n services \ + --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"registry.lan.buetow.org:30001/tracing-demo-frontend:v2"}]' +``` + +Or via git commit and ArgoCD sync. + +### Manual Promotion (Skip Canary Steps) + +```bash +kubectl argo rollouts promote tracing-demo-frontend -n services +``` + +### Abort/Rollback + +```bash +kubectl argo rollouts abort tracing-demo-frontend -n services +``` + +## References + +- [Argo Rollouts Documentation](https://argoproj.github.io/argo-rollouts/) +- [Canary Strategy Guide](https://argoproj.github.io/argo-rollouts/features/canary/) +- [ArgoCD Integration](https://argoproj.github.io/argo-rollouts/generated/notification-services/argocd/) diff --git a/f3s/argo-rollouts/values.yaml b/f3s/argo-rollouts/values.yaml new file mode 100644 index 0000000..ed77670 --- /dev/null +++ b/f3s/argo-rollouts/values.yaml @@ -0,0 +1,28 @@ +# Argo Rollouts Helm Chart Values Override +# Following f3s cluster patterns: single instance deployment + +# Controller configuration +controller: + replicas: 1 + # Enable metrics for Prometheus integration + metrics: + enabled: true + serviceMonitor: + enabled: false # Will enable if Prometheus available + # Resource limits + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 250m + memory: 256Mi + +# Notification controller - disabled +notifications: + enabled: false + +# CRD installation +crds: + install: true + keep: true |
