apiVersion: apps/v1 kind: Deployment metadata: name: todo labels: app: todo spec: replicas: 1 selector: matchLabels: app: todo strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 revisionHistoryLimit: 3 template: metadata: labels: app: todo spec: containers: - name: todo image: ghcr.io/mayne0213/todo:latest imagePullPolicy: Always ports: - containerPort: 3000 protocol: TCP env: - name: NODE_ENV value: production - name: DATABASE_URL valueFrom: secretKeyRef: name: todo-secrets key: database-url resources: requests: memory: 50Mi cpu: 20m limits: memory: 120Mi livenessProbe: httpGet: path: /api/health port: 3000 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /api/health port: 3000 initialDelaySeconds: 5 periodSeconds: 5 restartPolicy: Always