Skip to main content

:::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+)​

CategoryExamples
GitGitLab, GitHub, Gitea
NotificationsSlack, Discord, Email, Telegram
DatabasesPostgreSQL, MySQL, MongoDB, Redis
CloudAWS, GCP, Azure
MonitoringGrafana, Prometheus webhooks
Dev toolsJira, Linear, Notion
HTTPREST API, GraphQL, webhooks
DataCSV, 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)