apiVersion: apps/v1 kind: Deployment metadata: name: api namespace: crawlapi spec: replicas: 3 selector: matchLabels: app: api template: metadata: labels: app: api spec: containers: - name: api image: crawlapi/api:latest ports: - containerPort: 3000 env: - name: DATABASE_URL value: "postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres:5432/crawlapi" - name: REDIS_URL value: "redis://redis:6379" - name: S3_ENDPOINT value: "http://minio:9000" - name: S3_BUCKET value: "crawlapi" - name: PLAYWRIGHT_SCRIPT_PATH value: "/app/playwright/pool.js" envFrom: - secretRef: name: crawlapi-secrets resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" livenessProbe: httpGet: path: /metrics port: 3000 initialDelaySeconds: 10 periodSeconds: 30 readinessProbe: httpGet: path: /metrics port: 3000 initialDelaySeconds: 5 periodSeconds: 10 startupProbe: httpGet: path: /metrics port: 3000 failureThreshold: 30 periodSeconds: 10 --- apiVersion: v1 kind: Service metadata: name: api namespace: crawlapi spec: selector: app: api ports: - port: 3000 targetPort: 3000 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: api namespace: crawlapi annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" cert-manager.io/cluster-issuer: letsencrypt spec: ingressClassName: nginx tls: - hosts: - api.crawlapi.dev secretName: api-tls rules: - host: api.crawlapi.dev http: paths: - path: / pathType: Prefix backend: service: name: api port: number: 3000