apiVersion: apps/v1 kind: Deployment metadata: name: agent-monitor-blue namespace: agent-monitor labels: app.kubernetes.io/name: agent-monitor app.kubernetes.io/instance: agent-monitor app.kubernetes.io/version: "1.0.0" app.kubernetes.io/component: server app.kubernetes.io/managed-by: kustomize slot: blue spec: replicas: 3 revisionHistoryLimit: 5 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app.kubernetes.io/name: agent-monitor app.kubernetes.io/instance: agent-monitor slot: blue template: metadata: labels: app.kubernetes.io/name: agent-monitor app.kubernetes.io/instance: agent-monitor app.kubernetes.io/version: "1.0.0" app.kubernetes.io/component: server app.kubernetes.io/managed-by: kustomize slot: blue spec: serviceAccountName: agent-monitor automountServiceAccountToken: false terminationGracePeriodSeconds: 30 securityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch seccompProfile: type: RuntimeDefault affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - agent-monitor topologyKey: kubernetes.io/hostname containers: - name: agent-monitor image: ${IMAGE_REGISTRY}/agent-monitor:blue imagePullPolicy: IfNotPresent ports: - name: http containerPort: 4820 protocol: TCP envFrom: - configMapRef: name: agent-monitor-config resources: requests: memory: "256Mi" cpu: "200m" limits: memory: "1Gi" cpu: "1000m" startupProbe: httpGet: path: /api/health port: http failureThreshold: 30 periodSeconds: 2 readinessProbe: httpGet: path: /api/health port: http initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 successThreshold: 1 failureThreshold: 3 livenessProbe: httpGet: path: /api/health port: http initialDelaySeconds: 15 periodSeconds: 15 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3 securityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: drop: - ALL volumeMounts: - name: data mountPath: /app/data - name: tmp mountPath: /tmp lifecycle: preStop: exec: command: ["sh", "-c", "sleep 5"] volumes: - name: data persistentVolumeClaim: claimName: agent-monitor-data - name: tmp emptyDir: sizeLimit: 100Mi