apiVersion: v1 kind: Namespace metadata: name: nodered --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: node-red-pvc namespace: nodered labels: app: node-red spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: node-red namespace: nodered labels: app: node-red spec: replicas: 1 selector: matchLabels: app: node-red template: metadata: labels: app: node-red spec: securityContext: fsGroup: 1000 containers: - name: nodered image: nodered/node-red:4.1 args: ["--settings", "/config/settings.js"] env: - name: NODE_OPTIONS value: "--trace-warnings" ports: - containerPort: 1880 securityContext: runAsUser: 1000 runAsGroup: 1000 allowPrivilegeEscalation: false resources: limits: memory: "512Mi" cpu: "500m" requests: memory: "256Mi" cpu: "250m" livenessProbe: httpGet: path: / port: 1880 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: / port: 1880 initialDelaySeconds: 5 periodSeconds: 5 volumeMounts: - name: node-red-storage mountPath: /data - name: node-red-settings mountPath: /config/settings.js subPath: settings.js volumes: - name: node-red-storage persistentVolumeClaim: claimName: node-red-pvc - name: node-red-settings configMap: name: node-red-settings --- apiVersion: v1 kind: ConfigMap metadata: name: node-red-settings namespace: nodered data: settings.js: | module.exports = { httpAdminRoot: '/', httpNodeRoot: '/', userDir: '/data', flowFile: 'flows.json', credentialSecret: 'yzM0ol6Zn5kd1234', adminAuth: { type: "credentials", users: [{ username: "admin", password: "", permissions: "*" }] }, uiPort: process.env.PORT || 1880, mqttReconnectTime: 15000, serialReconnectTime: 15000, debugMaxLength: 1000, functionGlobalContext: {}, exportGlobalContextKeys: false, logging: { console: { level: "info", metrics: false, audit: false } }, editorTheme: { projects: { enabled: false } } }; --- apiVersion: v1 kind: Service metadata: name: node-red-service namespace: nodered labels: app: node-red spec: type: ClusterIP ports: - port: 1880 targetPort: 1880 protocol: TCP name: http selector: app: node-red --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: node-red-hpa namespace: nodered labels: app: node-red spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: node-red minReplicas: 1 maxReplicas: 3 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: node-red namespace: nodered spec: hostnames: - nodered.italiadatacenter.com parentRefs: - name: main-gateway namespace: nginx-gateway rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: node-red-service port: 1880