apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-{{ .Values.backend.name }} namespace: {{ .Values.global.namespace }} labels: app: {{ .Release.Name }}-{{ .Values.backend.name }} component: backend spec: replicas: {{ .Values.backend.replicaCount }} selector: matchLabels: app: {{ .Release.Name }}-{{ .Values.backend.name }} template: metadata: labels: app: {{ .Release.Name }}-{{ .Values.backend.name }} component: backend spec: initContainers: - name: wait-for-postgres image: postgres:16-alpine command: - /bin/sh - -c - | until pg_isready -h {{ .Release.Name }}-{{ .Values.postgres.name }}-headless -p {{ .Values.postgres.port }}; do echo "Waiting for PostgreSQL..." sleep 2 done echo "PostgreSQL is ready!" containers: - name: {{ .Values.backend.name }} image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag }}" imagePullPolicy: {{ .Values.backend.image.pullPolicy }} ports: - containerPort: {{ .Values.backend.service.targetPort }} name: http protocol: TCP env: {{- if .Values.backend.env }} {{- range $key, $value := .Values.backend.env }} - name: {{ $key }} value: {{ $value | quote }} {{- end }} {{- end }} - name: DATABASE_URL valueFrom: secretKeyRef: name: {{ .Release.Name }}-db-credentials key: DATABASE_URL startupProbe: httpGet: path: / port: http initialDelaySeconds: 15 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 30 livenessProbe: httpGet: path: / port: http initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: / port: http initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 2 resources: requests: cpu: {{ .Values.backend.resources.requests.cpu }} memory: {{ .Values.backend.resources.requests.memory }} limits: cpu: {{ .Values.backend.resources.limits.cpu }} memory: {{ .Values.backend.resources.limits.memory }}