diff --git a/apps/nginx-canary/application.yaml b/apps/nginx-canary/application.yaml
new file mode 100644
index 0000000..1cc990e
--- /dev/null
+++ b/apps/nginx-canary/application.yaml
@@ -0,0 +1,20 @@
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: nginx-canary
+ namespace: argocd
+spec:
+ project: default
+ source:
+ repoURL: http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops
+ path: apps/nginx-canary
+ targetRevision: HEAD
+ destination:
+ server: https://kubernetes.default.svc
+ namespace: nginx-canary
+ syncPolicy:
+ automated:
+ prune: true
+ selfHeal: true
+ syncOptions:
+ - CreateNamespace=true
diff --git a/apps/nginx-canary/configmap.yaml b/apps/nginx-canary/configmap.yaml
new file mode 100644
index 0000000..4a8e3f8
--- /dev/null
+++ b/apps/nginx-canary/configmap.yaml
@@ -0,0 +1,180 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: nginx-canary-html
+ namespace: nginx-canary
+data:
+ index.html: |
+
+
+
+
+
+ Hello from MCP v2 — Canary
+
+
+
+
+
🐤 Canary Release
+
v2.0.0
+
Hello from MCP v2
+
Canary deployment — receiving experimental traffic
+
⚠ This is a CANARY build — not yet promoted to stable
+
+
Your IP Address
+
Detecting...
+
+
+
+
+
+
Image
+
nginx:1.25-alpine
+
+
+
+
+
+
+
+
+ nginx.conf: |
+ server {
+ listen 80;
+ server_name _;
+ root /usr/share/nginx/html;
+ index index.html;
+ add_header X-Version "v2.0.0" always;
+ add_header X-Track "canary" always;
+ location / {
+ try_files $uri $uri/ =404;
+ }
+ }
diff --git a/apps/nginx-canary/deployment.yaml b/apps/nginx-canary/deployment.yaml
new file mode 100644
index 0000000..0e5b363
--- /dev/null
+++ b/apps/nginx-canary/deployment.yaml
@@ -0,0 +1,56 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx-canary
+ namespace: nginx-canary
+ labels:
+ app: nginx-canary
+ track: canary
+ version: v2.0.0
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: nginx-canary
+ template:
+ metadata:
+ labels:
+ app: nginx-canary
+ track: canary
+ version: v2.0.0
+ spec:
+ containers:
+ - name: nginx
+ image: nginx:1.25-alpine
+ ports:
+ - containerPort: 80
+ volumeMounts:
+ - name: html
+ mountPath: /usr/share/nginx/html/index.html
+ subPath: index.html
+ - name: html
+ mountPath: /etc/nginx/conf.d/default.conf
+ subPath: nginx.conf
+ resources:
+ requests:
+ cpu: 50m
+ memory: 64Mi
+ limits:
+ cpu: 200m
+ memory: 128Mi
+ readinessProbe:
+ httpGet:
+ path: /
+ port: 80
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ livenessProbe:
+ httpGet:
+ path: /
+ port: 80
+ initialDelaySeconds: 10
+ periodSeconds: 20
+ volumes:
+ - name: html
+ configMap:
+ name: nginx-canary-html
diff --git a/apps/nginx-canary/namespace.yaml b/apps/nginx-canary/namespace.yaml
index 8d2327f..04f8c8b 100644
--- a/apps/nginx-canary/namespace.yaml
+++ b/apps/nginx-canary/namespace.yaml
@@ -4,3 +4,4 @@ metadata:
name: nginx-canary
labels:
track: canary
+ managed-by: argocd
diff --git a/apps/nginx-canary/service.yaml b/apps/nginx-canary/service.yaml
new file mode 100644
index 0000000..875a6b1
--- /dev/null
+++ b/apps/nginx-canary/service.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: nginx-canary
+ namespace: nginx-canary
+ labels:
+ app: nginx-canary
+ track: canary
+spec:
+ selector:
+ app: nginx-canary
+ ports:
+ - name: http
+ port: 80
+ targetPort: 80
+ type: ClusterIP