# ============================================= # Deployment — Node.js REST API # Stateless application layer that handles all # CRUD operations for tasks. Reads environment # variables for DB and Redis connection info. # ============================================= apiVersion: apps/v1 kind: Deployment metadata: name: taskmanager-api namespace: taskmanager labels: app: taskmanager-api spec: replicas: 2 selector: matchLabels: app: taskmanager-api template: metadata: labels: app: taskmanager-api spec: containers: - name: api image: taskmanager-api:latest # Use local image — do not pull from registry imagePullPolicy: Never ports: - containerPort: 3000 env: - name: PORT value: "3000" - name: POSTGRES_HOST value: postgres - name: POSTGRES_PORT value: "5432" - name: POSTGRES_DB value: taskmanager - name: POSTGRES_USER valueFrom: secretKeyRef: name: postgres-secret key: username - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgres-secret key: password - name: REDIS_HOST value: redis - name: REDIS_PORT value: "6379" readinessProbe: httpGet: path: /api/health port: 3000 initialDelaySeconds: 15 periodSeconds: 10 livenessProbe: httpGet: path: /api/health port: 3000 initialDelaySeconds: 30 periodSeconds: 15 resources: requests: memory: "128Mi" cpu: "100m" limits: memory: "512Mi" cpu: "500m" --- # ============================================= # Deployment — Nginx Frontend # Serves the static HTML/CSS/JS task manager # UI and reverse-proxies /api/ calls to the # API service inside the cluster. # ============================================= apiVersion: apps/v1 kind: Deployment metadata: name: taskmanager-frontend namespace: taskmanager labels: app: taskmanager-frontend spec: replicas: 1 selector: matchLabels: app: taskmanager-frontend template: metadata: labels: app: taskmanager-frontend spec: containers: - name: frontend image: taskmanager-frontend:latest imagePullPolicy: Never ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 10 resources: requests: memory: "64Mi" cpu: "50m" limits: memory: "128Mi" cpu: "200m" --- # ============================================= # Deployment — Adminer # Lightweight web interface for browsing the # PostgreSQL database directly in a browser. # ============================================= apiVersion: apps/v1 kind: Deployment metadata: name: taskmanager-adminer namespace: taskmanager labels: app: taskmanager-adminer spec: replicas: 1 selector: matchLabels: app: taskmanager-adminer template: metadata: labels: app: taskmanager-adminer spec: containers: - name: adminer image: adminer:latest imagePullPolicy: IfNotPresent ports: - containerPort: 8080 env: - name: ADMINER_DEFAULT_SERVER value: postgres - name: ADMINER_DESIGN value: dracula resources: requests: memory: "64Mi" cpu: "50m" limits: memory: "128Mi" cpu: "200m"