summaryrefslogtreecommitdiff
path: root/f3s/argo-rollouts
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-01-15 21:01:35 +0200
committerPaul Buetow <paul@buetow.org>2026-01-15 21:01:43 +0200
commit8e0cf186a1e1dba042e4dd4eb6727889d2b22bbd (patch)
tree5f1c70195961a5bbf3cc8765f8cec87ae474f2f7 /f3s/argo-rollouts
parent617a9f741bad57640e06f03b67b8ea2983c5904e (diff)
feat: add Argo Rollouts controller and tracing-demo canary rollout demo
Diffstat (limited to 'f3s/argo-rollouts')
-rw-r--r--f3s/argo-rollouts/Justfile33
-rw-r--r--f3s/argo-rollouts/README.md85
-rw-r--r--f3s/argo-rollouts/values.yaml28
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