n8n: controllers: main: type: deployment replicas: 1 strategy: Recreate revisionHistoryLimit: 3 containers: main: image: repository: ghcr.io/n8n-io/n8n tag: 2.2.1 pullPolicy: IfNotPresent env: - name: GENERIC_TIMEZONE value: US/Central - name: DB_TYPE value: postgresdb - name: DB_POSTGRESDB_DATABASE valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: dbname - name: DB_POSTGRESDB_HOST valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: host - name: DB_POSTGRESDB_PORT valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: port - name: DB_POSTGRESDB_USER valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: user - name: DB_POSTGRESDB_PASSWORD valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: password - name: N8N_METRICS value: true - name: QUEUE_HEALTH_CHECK_ACTIVE value: true - name: EXECUTIONS_MODE value: queue - name: QUEUE_BULL_REDIS_HOST value: redis-replication-n8n-master.n8n - name: N8N_ENCRYPTION_KEY valueFrom: secretKeyRef: name: n8n-config-secret key: key - name: WEBHOOK_URL value: https://n8n.alexlebens.net/ probes: liveness: enabled: true custom: true spec: httpGet: path: /healthz port: 5678 initialDelaySeconds: 0 periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3 readiness: enabled: true custom: true spec: httpGet: path: /healthz/readiness port: 5678 initialDelaySeconds: 0 periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3 resources: requests: cpu: 10m memory: 128Mi worker: type: daemonset revisionHistoryLimit: 3 pod: nodeSelector: kubernetes.io/arch: amd64 containers: main: image: repository: ghcr.io/n8n-io/n8n tag: 2.2.1 pullPolicy: IfNotPresent command: - n8n args: - worker # - --concurrency=10 env: - name: GENERIC_TIMEZONE value: US/Central - name: DB_TYPE value: postgresdb - name: DB_POSTGRESDB_DATABASE valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: dbname - name: DB_POSTGRESDB_HOST valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: host - name: DB_POSTGRESDB_PORT valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: port - name: DB_POSTGRESDB_USER valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: user - name: DB_POSTGRESDB_PASSWORD valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: password - name: N8N_METRICS value: true - name: N8N_RUNNERS_ENABLED value: true - name: N8N_BLOCK_ENV_ACCESS_IN_NODE value: true - name: N8N_GIT_NODE_DISABLE_BARE_REPOS value: true - name: QUEUE_HEALTH_CHECK_ACTIVE value: true - name: EXECUTIONS_MODE value: queue - name: QUEUE_BULL_REDIS_HOST value: redis-replication-n8n-master.n8n - name: N8N_ENCRYPTION_KEY valueFrom: secretKeyRef: name: n8n-config-secret key: key - name: WEBHOOK_URL value: https://n8n.alexlebens.net/ probes: liveness: enabled: false custom: true spec: httpGet: path: /healthz port: 5678 initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3 readiness: enabled: false custom: true spec: httpGet: path: /healthz/readiness port: 5678 initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3 resources: requests: cpu: 10m memory: 128Mi webhook: type: daemonset revisionHistoryLimit: 3 pod: nodeSelector: kubernetes.io/arch: amd64 containers: main: image: repository: ghcr.io/n8n-io/n8n tag: 2.2.1 pullPolicy: IfNotPresent command: - n8n args: - webhook env: - name: GENERIC_TIMEZONE value: US/Central - name: DB_TYPE value: postgresdb - name: DB_POSTGRESDB_DATABASE valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: dbname - name: DB_POSTGRESDB_HOST valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: host - name: DB_POSTGRESDB_PORT valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: port - name: DB_POSTGRESDB_USER valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: user - name: DB_POSTGRESDB_PASSWORD valueFrom: secretKeyRef: name: n8n-postgresql-18-cluster-app key: password - name: N8N_METRICS value: true - name: QUEUE_HEALTH_CHECK_ACTIVE value: true - name: EXECUTIONS_MODE value: queue - name: QUEUE_BULL_REDIS_HOST value: redis-replication-n8n-master.n8n - name: N8N_ENCRYPTION_KEY valueFrom: secretKeyRef: name: n8n-config-secret key: key - name: WEBHOOK_URL value: https://n8n.alexlebens.net/ - name: N8N_DIAGNOSTICS_ENABLED value: false - name: N8N_VERSION_NOTIFICATIONS_ENABLED value: false probes: liveness: enabled: true custom: true spec: httpGet: path: /healthz port: 5678 initialDelaySeconds: 0 periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3 readiness: enabled: true custom: true spec: httpGet: path: /healthz/readiness port: 5678 initialDelaySeconds: 0 periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3 resources: requests: cpu: 10m memory: 128Mi service: main: controller: main ports: http: port: 80 targetPort: 5678 protocol: HTTP worker: controller: worker ports: http: port: 80 targetPort: 5678 protocol: HTTP webhook: controller: webhook ports: http: port: 80 targetPort: 5678 protocol: HTTP serviceMonitor: main: selector: matchLabels: app.kubernetes.io/name: n8n-main app.kubernetes.io/instance: n8n-main serviceName: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}' endpoints: - port: http interval: 3m scrapeTimeout: 1m path: /metrics worker: selector: matchLabels: app.kubernetes.io/name: n8n-worker app.kubernetes.io/instance: n8n-worker serviceName: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}' endpoints: - port: http interval: 3m scrapeTimeout: 1m path: /metrics webhook: selector: matchLabels: app.kubernetes.io/name: n8n-webhook app.kubernetes.io/instance: n8n-webhook serviceName: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}' endpoints: - port: http interval: 3m scrapeTimeout: 1m path: /metrics route: main: kind: HTTPRoute parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: traefik-gateway namespace: traefik hostnames: - n8n.alexlebens.net rules: - backendRefs: - group: '' kind: Service name: n8n-main port: 80 weight: 100 matches: - path: type: PathPrefix value: / - path: type: PathPrefix value: /webhook-test/ - backendRefs: - group: '' kind: Service name: n8n-webhook port: 80 weight: 100 matches: - path: type: PathPrefix value: /webhook/ - path: type: PathPrefix value: /webhook-waiting/ - path: type: PathPrefix value: /form/ persistence: data: storageClass: ceph-block accessMode: ReadWriteOnce size: 5Gi advancedMounts: main: main: - path: /data readOnly: false cache: type: emptyDir advancedMounts: worker: main: - path: /home/node/.n8n readOnly: false webhook: main: - path: /home/node/.n8n readOnly: false postgres-18-cluster: mode: recovery recovery: method: objectStore objectStore: index: 1 backup: objectStore: - name: garage-local index: 1 destinationBucket: postgres-backups externalSecretCredentialPath: /garage/home-infra/postgres-backups isWALArchiver: true # - name: garage-remote # index: 1 # destinationBucket: postgres-backups # externalSecretCredentialPath: /garage/home-infra/postgres-backups # retentionPolicy: "90d" # data: # compression: bzip2 # - name: external # index: 1 # endpointURL: https://nyc3.digitaloceanspaces.com # destinationBucket: postgres-backups-ce540ddf106d186bbddca68a # externalSecretCredentialPath: /garage/home-infra/postgres-backups # isWALArchiver: false scheduledBackups: - name: live-backup suspend: false immediate: true schedule: "0 0 0 * * *" backupName: garage-local # - name: weekly-backup # suspend: true # immediate: true # schedule: "0 0 4 * * SAT" # backupName: garage-remote # - name: daily-backup # suspend: true # immediate: true # schedule: "0 0 0 * * *" # backupName: external redis-replication: existingSecret: enabled: false redisReplication: clusterSize: 3 redisSentinel: enabled: true clusterSize: 3 volsync-target-data: pvcTarget: n8n