From 203806e4d98661ee4fc4efef2dd0d7278ee44fd0 Mon Sep 17 00:00:00 2001 From: ppawlowski Date: Wed, 24 Jun 2026 19:20:03 +0200 Subject: [PATCH 1/4] Add pdb template --- helm/flowfuse/templates/pdb.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 helm/flowfuse/templates/pdb.yaml diff --git a/helm/flowfuse/templates/pdb.yaml b/helm/flowfuse/templates/pdb.yaml new file mode 100644 index 00000000..85a5597a --- /dev/null +++ b/helm/flowfuse/templates/pdb.yaml @@ -0,0 +1,22 @@ +{{- if .Values.forge.podDisruptionBudget.enabled }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: flowfuse + namespace: {{ .Release.Namespace }} + labels: + {{- include "forge.labels" . | nindent 4 }} + {{- with .Values.forge.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.forge.podDisruptionBudget.minAvailable }} + minAvailable: {{ .Values.forge.podDisruptionBudget.minAvailable }} + {{- end }} + {{- if .Values.forge.podDisruptionBudget.maxUnavailable }} + maxUnavailable: {{ .Values.forge.podDisruptionBudget.maxUnavailable }} + {{- end }} + selector: + matchLabels: + {{- include "forge.forgeSelectorLabels" . | nindent 6 }} +{{- end }} From d45af544451c6ef0f20bec7d65ba2eb6f2e3fd97 Mon Sep 17 00:00:00 2001 From: ppawlowski Date: Wed, 24 Jun 2026 19:20:12 +0200 Subject: [PATCH 2/4] Add pdb unit tests --- helm/flowfuse/tests/pdb_test.yaml | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 helm/flowfuse/tests/pdb_test.yaml diff --git a/helm/flowfuse/tests/pdb_test.yaml b/helm/flowfuse/tests/pdb_test.yaml new file mode 100644 index 00000000..a68a2396 --- /dev/null +++ b/helm/flowfuse/tests/pdb_test.yaml @@ -0,0 +1,42 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json +suite: test forge PodDisruptionBudget +templates: + - pdb.yaml +set: + forge.domain: "chart-unit-tests.com" +tests: + - it: should not render PDB by default + asserts: + - hasDocuments: + count: 0 + + - it: should render PDB when enabled with minAvailable + set: + forge.podDisruptionBudget.enabled: true + asserts: + - isKind: + of: PodDisruptionBudget + - equal: + path: metadata.name + value: flowfuse + - equal: + path: spec.minAvailable + value: 1 + - notExists: + path: spec.maxUnavailable + - equal: + path: spec.selector.matchLabels.app + value: flowforge + + - it: should render maxUnavailable when set + set: + forge.podDisruptionBudget: + enabled: true + minAvailable: null + maxUnavailable: 1 + asserts: + - equal: + path: spec.maxUnavailable + value: 1 + - notExists: + path: spec.minAvailable From a8360e39d6fc5608f71212e18c84975139fdf7eb Mon Sep 17 00:00:00 2001 From: ppawlowski Date: Wed, 24 Jun 2026 19:20:22 +0200 Subject: [PATCH 3/4] Update docs --- helm/flowfuse/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/helm/flowfuse/README.md b/helm/flowfuse/README.md index 3e50483b..83b2020f 100644 --- a/helm/flowfuse/README.md +++ b/helm/flowfuse/README.md @@ -67,6 +67,9 @@ For other values please refer to the documentation below. - `forge.revisionHistoryLimit` global default for number of old ReplicaSets/ControllerRevisions to retain for rollback across all Deployments and StatefulSets managed by this chart (default `10`). Can be overridden per component. - `forge.tolerations` allows to configure [tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for the core application deployment (default `[]`) - `forge.priorityClassName` allows to set [priorityClassName](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) for all deployments created by this Helm chart (default not set) + - `forge.podDisruptionBudget.enabled` enables a [PodDisruptionBudget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for the core application deployment (default `false`) + - `forge.podDisruptionBudget.minAvailable` minimum number/percentage of pods that must remain available during voluntary disruption (default `1`). Mutually exclusive with `maxUnavailable`. + - `forge.podDisruptionBudget.maxUnavailable` maximum number/percentage of pods unavailable during voluntary disruption (default not set). Mutually exclusive with `minAvailable`. - `forge.service.type` allows to set the service type for the core application service (default `ClusterIP`) - `forge.service.nodePort` allows to set custom nodePort value when `forge.service.type` value is set to `NodePort` (default not set) - `forge.logging.level` sets logging level for the Forge app (default: `info` from "info", "error", "debug", "warn", "trace", "fatal") From 25cf1ba543fd7f5aebfed867367721766a7ec5f9 Mon Sep 17 00:00:00 2001 From: ppawlowski Date: Wed, 24 Jun 2026 19:20:43 +0200 Subject: [PATCH 4/4] Update values and values schema files --- helm/flowfuse/values.schema.json | 14 ++++++++++++++ helm/flowfuse/values.yaml | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/helm/flowfuse/values.schema.json b/helm/flowfuse/values.schema.json index 0679b41f..355b750e 100644 --- a/helm/flowfuse/values.schema.json +++ b/helm/flowfuse/values.schema.json @@ -838,6 +838,20 @@ "tolerations": { "type": "array" }, + "podDisruptionBudget": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "minAvailable": { + "type": ["integer", "string"] + }, + "maxUnavailable": { + "type": ["integer", "string"] + } + } + }, "logPassthrough": { "type": "boolean" }, diff --git a/helm/flowfuse/values.yaml b/helm/flowfuse/values.yaml index f6564046..97bf3343 100644 --- a/helm/flowfuse/values.yaml +++ b/helm/flowfuse/values.yaml @@ -133,6 +133,11 @@ forge: priorityClassName: "" + podDisruptionBudget: + enabled: false + minAvailable: 1 + # maxUnavailable: 1 # set instead of minAvailable (mutually exclusive) + logPassthrough: false customHostname: enabled: false