From 08897dff759655a07b26be642b2f8941d266a23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Spranger?= Date: Wed, 9 Jul 2025 22:54:54 +0100 Subject: [PATCH] feat: improve availability of HyperDX pods --- .changeset/nine-dingos-lead.md | 5 ++ .../templates/hyperdx-deployment.yaml | 11 ++++ charts/hdx-oss-v2/templates/hyperdx-pdb.yaml | 20 ++++++++ .../hdx-oss-v2/tests/app-deployment_test.yaml | 51 ++++++++++++++++++- charts/hdx-oss-v2/tests/app-pdb_test.yaml | 29 +++++++++++ charts/hdx-oss-v2/values.yaml | 3 ++ 6 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 .changeset/nine-dingos-lead.md create mode 100644 charts/hdx-oss-v2/templates/hyperdx-pdb.yaml create mode 100644 charts/hdx-oss-v2/tests/app-pdb_test.yaml diff --git a/.changeset/nine-dingos-lead.md b/.changeset/nine-dingos-lead.md new file mode 100644 index 0000000..fd01a2d --- /dev/null +++ b/.changeset/nine-dingos-lead.md @@ -0,0 +1,5 @@ +--- +"helm-charts": patch +--- + +feat: improve availability of HyperDX pods diff --git a/charts/hdx-oss-v2/templates/hyperdx-deployment.yaml b/charts/hdx-oss-v2/templates/hyperdx-deployment.yaml index 0a953f0..a0fd03e 100644 --- a/charts/hdx-oss-v2/templates/hyperdx-deployment.yaml +++ b/charts/hdx-oss-v2/templates/hyperdx-deployment.yaml @@ -36,6 +36,13 @@ spec: tolerations: {{- toYaml .Values.hyperdx.tolerations | nindent 8 }} {{- end }} + {{- if .Values.hyperdx.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml .Values.hyperdx.topologySpreadConstraints | nindent 8 }} + {{- end }} + {{- if .Values.hyperdx.priorityClassName }} + priorityClassName: {{ .Values.hyperdx.priorityClassName | quote }} + {{- end }} {{- if .Values.mongodb.enabled }} initContainers: - name: wait-for-mongodb @@ -53,6 +60,10 @@ spec: containerPort: {{ .Values.hyperdx.apiPort }} - name: opamp-port containerPort: {{ .Values.hyperdx.opampPort }} + {{- if .Values.hyperdx.resources }} + resources: + {{- toYaml .Values.hyperdx.resources | nindent 12 }} + {{- end }} envFrom: - configMapRef: name: {{ include "hdx-oss.fullname" . }}-app-config diff --git a/charts/hdx-oss-v2/templates/hyperdx-pdb.yaml b/charts/hdx-oss-v2/templates/hyperdx-pdb.yaml new file mode 100644 index 0000000..575ebe6 --- /dev/null +++ b/charts/hdx-oss-v2/templates/hyperdx-pdb.yaml @@ -0,0 +1,20 @@ +{{- if .Values.hyperdx.podDisruptionBudget.enabled }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "hdx-oss.fullname" . }}-pdb + labels: + {{- include "hdx-oss.labels" . | nindent 4 }} + app: {{ include "hdx-oss.fullname" . }} + {{- if .Values.hyperdx.labels }} + {{- with .Values.hyperdx.labels }} + {{- toYaml . | nindent 4 }} + {{- end -}} + {{- end }} +spec: + minAvailable: {{ .Values.hyperdx.podDisruptionBudget.minAvailable | default 1 }} + selector: + matchLabels: + {{- include "hdx-oss.selectorLabels" . | nindent 6 }} + app: {{ include "hdx-oss.fullname" . }} +{{- end }} diff --git a/charts/hdx-oss-v2/tests/app-deployment_test.yaml b/charts/hdx-oss-v2/tests/app-deployment_test.yaml index 1076f60..747aebd 100644 --- a/charts/hdx-oss-v2/tests/app-deployment_test.yaml +++ b/charts/hdx-oss-v2/tests/app-deployment_test.yaml @@ -47,4 +47,53 @@ tests: asserts: - equal: path: spec.replicas - value: 3 \ No newline at end of file + value: 3 + + - it: should set topology spread constraints when specified + set: + hyperdx: + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: DoNotSchedule + labelSelector: + matchLabels: + foo: bar + asserts: + - contains: + path: spec.template.spec.topologySpreadConstraints + content: + maxSkew: 1 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: DoNotSchedule + labelSelector: + matchLabels: + foo: bar + + - it: should set priority class name when specified + set: + hyperdx: + priorityClassName: system-node-critical + asserts: + - equal: + path: spec.template.spec.priorityClassName + value: system-node-critical + + - it: should set container resources when specified + set: + hyperdx: + resources: + limits: + memory: 1Gi + requests: + cpu: 100m + memory: 256Mi + asserts: + - equal: + path: spec.template.spec.containers[0].resources + value: + limits: + memory: 1Gi + requests: + cpu: 100m + memory: 256Mi diff --git a/charts/hdx-oss-v2/tests/app-pdb_test.yaml b/charts/hdx-oss-v2/tests/app-pdb_test.yaml new file mode 100644 index 0000000..25245ce --- /dev/null +++ b/charts/hdx-oss-v2/tests/app-pdb_test.yaml @@ -0,0 +1,29 @@ +suite: Test HyperDX App PodDisruptionBudget +templates: + - hyperdx-pdb.yaml +tests: + - it: should render the app pdb when enabled + set: + hyperdx: + podDisruptionBudget: + enabled: true + asserts: + - isKind: + of: PodDisruptionBudget + - equal: + path: spec.minAvailable + value: 1 + - matchRegex: + path: metadata.name + pattern: -pdb$ + + - it: should override minimum available replicas when specified + set: + hyperdx: + podDisruptionBudget: + enabled: true + minAvailable: 5 + asserts: + - equal: + path: spec.minAvailable + value: 5 diff --git a/charts/hdx-oss-v2/values.yaml b/charts/hdx-oss-v2/values.yaml index c45d811..c2c9858 100644 --- a/charts/hdx-oss-v2/values.yaml +++ b/charts/hdx-oss-v2/values.yaml @@ -191,6 +191,9 @@ hyperdx: replicas: 1 + podDisruptionBudget: + enabled: false + # Service configuration service: type: ClusterIP # Use ClusterIP for security. For external access, use ingress with proper TLS and authentication