Какие объекты нужны, чтобы задеплоить Node.js приложение в Kubernetes?

«Какие объекты нужны, чтобы задеплоить Node.js приложение в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для деплоя типичного Node.js приложения (например, веб-сервера) в Kubernetes создается набор манифестов. Вот основные объекты:

  1. Deployment — управляет репликами контейнера с приложением. Важно настроить корректные liveness и readiness пробы.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nodejs-app
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nodejs-api
      template:
        metadata:
          labels:
            app: nodejs-api
        spec:
          containers:
          - name: api
            image: myregistry/node-app:latest
            ports:
            - containerPort: 3000
            env:
            - name: NODE_ENV
              value: "production"
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: app-secrets
                  key: database-host
            livenessProbe:
              httpGet:
                path: /health
                port: 3000
              initialDelaySeconds: 30
            resources:
              requests:
                memory: "256Mi"
                cpu: "100m"
  2. Service — предоставляет доступ к подам приложения. Для внешнего веб-доступа часто используется тип LoadBalancer или связка ClusterIP + Ingress.

    apiVersion: v1
    kind: Service
    metadata:
      name: nodejs-service
    spec:
      selector:
        app: nodejs-api
      ports:
      - port: 80
        targetPort: 3000
      type: LoadBalancer
  3. ConfigMap & Secret — для хранения конфигурации (например, портов, флагов) и секретов (ключи API, строки подключения к БД).

  4. HorizontalPodAutoscaler (HPA) — для автоматического масштабирования подов на основе нагрузки CPU, характерной для Node.js.

  5. Ingress (опционально) — для маршрутизации трафика, управления SSL/TLS и виртуальными хостами, если сервисов несколько.