apiVersion: apps/v1 kind: Deployment metadata: name: veza-chat-server namespace: veza-production labels: app: veza-chat-server component: chat version: v1.0.0 spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app: veza-chat-server template: metadata: labels: app: veza-chat-server version: v1.0.0 annotations: prometheus.io/scrape: "true" prometheus.io/port: "8081" spec: securityContext: runAsNonRoot: true runAsUser: 1001 runAsGroup: 1001 fsGroup: 1001 containers: - name: chat-server image: veza-chat-server:latest imagePullPolicy: Always ports: - name: http containerPort: 8081 protocol: TCP - name: websocket containerPort: 8082 protocol: TCP env: - name: RUST_LOG value: "info" - name: DATABASE_URL valueFrom: secretKeyRef: name: veza-secrets key: database-url - name: JWT_SECRET valueFrom: secretKeyRef: name: veza-secrets key: jwt-secret resources: requests: cpu: "500m" memory: "512Mi" limits: cpu: "2000m" memory: "2Gi" readinessProbe: httpGet: path: /health port: 8081 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 3 successThreshold: 1 failureThreshold: 3 livenessProbe: httpGet: path: /health port: 8081 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3 lifecycle: preStop: exec: command: ["/bin/sh", "-c", "sleep 15"] terminationGracePeriodSeconds: 30