:::caution Deferred β not deployed on this cluster n8n was the original Phase 16 automation plan. Phase 16 was replaced by Harbor as Sovereign Registry. n8n, Temporal, and Airflow are kept as planning reference docs but have never been deployed on this cluster. :::
Phase 17 β n8n β Visual Workflow Automation
n8n is a self-hosted workflow automation platform β like Zapier or Make, but running entirely on your cluster. You build workflows visually: connect nodes, define triggers, process data, call APIs. No data leaves your infrastructure.
What n8n Can Automateβ
Examples on this cluster:
β GitLab push β run Ansible playbook β notify Slack
β New Grafana alert β create GitLab issue β assign to team
β Cron: every night β backup check β email report
β API webhook β transform data β insert into PostgreSQL
β ArgoCD sync failure β page on-call β create incident
β New model in MLflow registry β trigger redeployment
β MAAS machine deployed β run Ansible configure-nodes.yml
Architectureβ
External trigger (webhook, cron, API)
β
βΌ
n8n Workflow Engine (k3s pod)
β
ββββββ΄βββββββββββββββββββββββββββββββββ
β Node 1: HTTP Request β
β Node 2: Transform / Filter β
β Node 3: Condition (if/else) β
β Node 4: GitLab API β
β Node 5: Send notification β
βββββββββββββββββββββββββββββββββββββββ
Deploy n8n in k3sβ
apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n
namespace: automation
spec:
replicas: 1
selector:
matchLabels:
app: n8n
template:
metadata:
labels:
app: n8n
spec:
containers:
- name: n8n
image: n8nio/n8n:latest
ports:
- containerPort: 5678
env:
- name: N8N_HOST
value: "n8n.yourdomain.com"
- name: N8N_PORT
value: "5678"
- name: N8N_PROTOCOL
value: "https"
- name: DB_TYPE
value: postgresdb
- name: DB_POSTGRESDB_HOST
value: postgres-svc
- name: DB_POSTGRESDB_DATABASE
value: n8n
- name: DB_POSTGRESDB_USER
valueFrom:
secretKeyRef:
name: n8n-secrets
key: db-user
- name: DB_POSTGRESDB_PASSWORD
valueFrom:
secretKeyRef:
name: n8n-secrets
key: db-password
- name: N8N_ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: n8n-secrets
key: encryption-key
volumeMounts:
- name: n8n-data
mountPath: /home/node/.n8n
volumes:
- name: n8n-data
persistentVolumeClaim:
claimName: n8n-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: n8n-pvc
namespace: automation
spec:
accessModes: [ReadWriteOnce]
storageClassName: longhorn
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: n8n
namespace: automation
spec:
type: LoadBalancer
selector:
app: n8n
ports:
- port: 5678
targetPort: 5678
kubectl create namespace automation
kubectl apply -f n8n.yaml
Access: http://10.0.0.203:5678 or https://n8n.yourdomain.com
Built-in Integrations (400+)β
| Category | Examples |
|---|---|
| Git | GitLab, GitHub, Gitea |
| Notifications | Slack, Discord, Email, Telegram |
| Databases | PostgreSQL, MySQL, MongoDB, Redis |
| Cloud | AWS, GCP, Azure |
| Monitoring | Grafana, Prometheus webhooks |
| Dev tools | Jira, Linear, Notion |
| HTTP | REST API, GraphQL, webhooks |
| Data | CSV, JSON, XML transform |
Example Workflow β GitLab Push β Deploy Notificationβ
Trigger: GitLab webhook (push to main)
β
HTTP Request node: call ArgoCD API β sync app
β
Wait node: poll ArgoCD until sync complete
β
Condition: sync succeeded?
βββ Yes β Slack message: "β
Deployed my-app v1.2"
βββ No β GitLab issue: "β Deploy failed β check ArgoCD"
Example Workflow β Nightly Cluster Health Reportβ
Trigger: Cron (every day at 08:00)
β
HTTP Request: Prometheus API β get node CPU/RAM
β
HTTP Request: kubectl proxy β get pod count per namespace
β
HTTP Request: Velero API β check last backup status
β
Merge + format data
β
Send Email: "Daily cluster report β 2026-04-12"
n8n as Glue for the Entire Platformβ
MAAS event β n8n β Ansible playbook
GitLab CI fail β n8n β Slack alert + auto-revert
MLflow model promoted β n8n β trigger ArgoCD sync
Chaos Mesh experiment done β n8n β save report to Notion
Grafana alert β n8n β create ticket in GitLab
Done Whenβ
β n8n pod Running with PostgreSQL backend
β UI accessible via browser
β First workflow created and triggered
β GitLab webhook connected
β At least one notification working (Slack or email)