feat(helm): add PDB and per-component affinity support (#327)
Add PodDisruptionBudget templates for api, control plane, and worker (disabled by default). Support per-component affinity overrides with backward-compatible global affinity fallback.
This commit is contained in:
parent
03f47e29c8
commit
9943957fb7
5 changed files with 87 additions and 4 deletions
|
|
@ -87,7 +87,7 @@ spec:
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
{{- toYaml . | nindent 8 }}
|
{{- toYaml . | nindent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- with .Values.affinity }}
|
{{- with (.Values.api.affinity | default .Values.affinity) }}
|
||||||
affinity:
|
affinity:
|
||||||
{{- toYaml . | nindent 8 }}
|
{{- toYaml . | nindent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ spec:
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
{{- toYaml . | nindent 8 }}
|
{{- toYaml . | nindent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- with .Values.affinity }}
|
{{- with (.Values.controlPlane.affinity | default .Values.affinity) }}
|
||||||
affinity:
|
affinity:
|
||||||
{{- toYaml . | nindent 8 }}
|
{{- toYaml . | nindent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
||||||
56
helm/hindsight/templates/pdb.yaml
Normal file
56
helm/hindsight/templates/pdb.yaml
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
{{- if and .Values.api.enabled .Values.api.podDisruptionBudget.enabled }}
|
||||||
|
apiVersion: policy/v1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ include "hindsight.fullname" . }}-api
|
||||||
|
labels:
|
||||||
|
{{- include "hindsight.api.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.api.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ .Values.api.podDisruptionBudget.minAvailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.api.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ .Values.api.podDisruptionBudget.maxUnavailable }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "hindsight.api.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
{{- if and .Values.controlPlane.enabled .Values.controlPlane.podDisruptionBudget.enabled }}
|
||||||
|
apiVersion: policy/v1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ include "hindsight.fullname" . }}-control-plane
|
||||||
|
labels:
|
||||||
|
{{- include "hindsight.controlPlane.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.controlPlane.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ .Values.controlPlane.podDisruptionBudget.minAvailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.controlPlane.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ .Values.controlPlane.podDisruptionBudget.maxUnavailable }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "hindsight.controlPlane.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
{{- if and .Values.worker.enabled .Values.worker.podDisruptionBudget.enabled }}
|
||||||
|
apiVersion: policy/v1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ include "hindsight.fullname" . }}-worker
|
||||||
|
labels:
|
||||||
|
{{- include "hindsight.worker.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.worker.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ .Values.worker.podDisruptionBudget.minAvailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.worker.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ .Values.worker.podDisruptionBudget.maxUnavailable }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "hindsight.worker.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
|
@ -99,7 +99,7 @@ spec:
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
{{- toYaml . | nindent 8 }}
|
{{- toYaml . | nindent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- with .Values.affinity }}
|
{{- with (.Values.worker.affinity | default .Values.affinity) }}
|
||||||
affinity:
|
affinity:
|
||||||
{{- toYaml . | nindent 8 }}
|
{{- toYaml . | nindent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,15 @@ api:
|
||||||
timeoutSeconds: 3
|
timeoutSeconds: 3
|
||||||
failureThreshold: 3
|
failureThreshold: 3
|
||||||
|
|
||||||
|
# Pod disruption budget
|
||||||
|
podDisruptionBudget:
|
||||||
|
enabled: false
|
||||||
|
minAvailable: 1
|
||||||
|
# maxUnavailable: 1
|
||||||
|
|
||||||
|
# Pod affinity/anti-affinity (overrides global affinity for this component)
|
||||||
|
# affinity: {}
|
||||||
|
|
||||||
# Environment variables
|
# Environment variables
|
||||||
env:
|
env:
|
||||||
#HINDSIGHT_API_LLM_PROVIDER: "groq"
|
#HINDSIGHT_API_LLM_PROVIDER: "groq"
|
||||||
|
|
@ -122,6 +131,15 @@ worker:
|
||||||
# HTTP port for metrics/health (matches service.targetPort)
|
# HTTP port for metrics/health (matches service.targetPort)
|
||||||
HINDSIGHT_API_WORKER_HTTP_PORT: "8889"
|
HINDSIGHT_API_WORKER_HTTP_PORT: "8889"
|
||||||
|
|
||||||
|
# Pod disruption budget
|
||||||
|
podDisruptionBudget:
|
||||||
|
enabled: false
|
||||||
|
minAvailable: 1
|
||||||
|
# maxUnavailable: 1
|
||||||
|
|
||||||
|
# Pod affinity/anti-affinity (overrides global affinity for this component)
|
||||||
|
# affinity: {}
|
||||||
|
|
||||||
# Secret environment variables (inherited from api.secrets if not specified)
|
# Secret environment variables (inherited from api.secrets if not specified)
|
||||||
secrets: {}
|
secrets: {}
|
||||||
|
|
||||||
|
|
@ -165,6 +183,15 @@ controlPlane:
|
||||||
timeoutSeconds: 3
|
timeoutSeconds: 3
|
||||||
failureThreshold: 3
|
failureThreshold: 3
|
||||||
|
|
||||||
|
# Pod disruption budget
|
||||||
|
podDisruptionBudget:
|
||||||
|
enabled: false
|
||||||
|
minAvailable: 1
|
||||||
|
# maxUnavailable: 1
|
||||||
|
|
||||||
|
# Pod affinity/anti-affinity (overrides global affinity for this component)
|
||||||
|
# affinity: {}
|
||||||
|
|
||||||
# Environment variables
|
# Environment variables
|
||||||
env:
|
env:
|
||||||
NODE_ENV: "production"
|
NODE_ENV: "production"
|
||||||
|
|
@ -263,7 +290,7 @@ nodeSelector: {}
|
||||||
# Tolerations
|
# Tolerations
|
||||||
tolerations: []
|
tolerations: []
|
||||||
|
|
||||||
# Affinity
|
# Affinity (applied to all components unless overridden per-component)
|
||||||
affinity: {}
|
affinity: {}
|
||||||
|
|
||||||
# Autoscaling
|
# Autoscaling
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue