apiVersion: apps/v1 kind: Deployment metadata: name: prod-pod labels: app: inventory-api spec: replicas: 1 # Reduced replicas to 1 to ensure easier scheduling selector: matchLabels: app: inventory-api strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 template: metadata: labels: app: inventory-api spec: containers: - name: app image: ${IMAGE_REPOSITORY}:${IMAGE_TAG} imagePullPolicy: IfNotPresent # Changed from Always to IfNotPresent to reduce pull issues resources: requests: cpu: "50m" # Reduced CPU request memory: "128Mi" # Reduced memory request limits: cpu: "300m" # Reduced CPU limit memory: "384Mi" # Reduced memory limit ports: - containerPort: 8000 name: http env: - name: SECRET_KEY valueFrom: secretKeyRef: name: inventory-api-secrets key: secret-key - name: SERVER_NAME value: "Inventory Management System" - name: SERVER_HOST value: "https://inventory.example.com" - name: FIRST_SUPERUSER value: "admin@example.com" - name: FIRST_SUPERUSER_PASSWORD valueFrom: secretKeyRef: name: inventory-api-secrets key: admin-password livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 3 volumeMounts: - name: storage-volume mountPath: /app/storage volumes: - name: storage-volume persistentVolumeClaim: claimName: inventory-api-pvc # Enhanced tolerations to allow more flexible scheduling tolerations: - operator: "Exists" # This will tolerate all taints # Affinity settings to help with scheduling affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: "kubernetes.io/os" operator: In values: - linux # No nodeSelector to allow maximum scheduling flexibility