apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-backend labels: {{- include "armature.backend.labels" . | nindent 4 }} spec: replicas: {{ .Values.backend.replicaCount }} selector: matchLabels: app.kubernetes.io/name: {{ .Chart.Name }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/component: backend template: metadata: labels: app.kubernetes.io/name: {{ .Chart.Name }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/component: backend spec: {{- with .Values.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} # v0.32.0: Spread replicas across nodes for node-level HA. # preferred (not required) — if fewer nodes than replicas, pods # still schedule on the same node (degraded HA > no scheduling). affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: app.kubernetes.io/name: {{ .Chart.Name }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/component: backend topologyKey: kubernetes.io/hostname containers: - name: backend image: {{ include "armature.backend.image" . }} imagePullPolicy: {{ .Values.backend.image.pullPolicy }} ports: - name: http containerPort: {{ .Values.backend.port }} protocol: TCP envFrom: - configMapRef: name: {{ .Release.Name }}-config - secretRef: name: {{ include "armature.secretName" . }} env: - name: DATABASE_URL value: {{ include "armature.databaseURL" . | quote }} resources: {{- toYaml .Values.backend.resources | nindent 12 }} {{- if .Values.persistence.enabled }} volumeMounts: - name: data mountPath: /data {{- end }} # v0.32.0: Liveness — process alive (no dependency checks). livenessProbe: httpGet: path: {{ .Values.basePath }}/healthz/live port: http initialDelaySeconds: 10 periodSeconds: 30 # v0.32.0: Readiness — PG reachable. Failure pulls pod from Service. readinessProbe: httpGet: path: {{ .Values.basePath }}/healthz/ready port: http initialDelaySeconds: 5 periodSeconds: 10 failureThreshold: 3 {{- if .Values.persistence.enabled }} volumes: - name: data persistentVolumeClaim: claimName: {{ .Release.Name }}-data {{- end }}