> Как описать Deployment в Kubernetes для репликации приложения (Node.js, JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: TrendTech
Стек: Node.js, JavaScript
> Пример ответа
Короткий ответ
Deployment в Kubernetes описывает желаемое состояние реплицированного приложения: образ контейнера, количество реплик, стратегию обновления и политику перезапуска. Для frontend-приложения на Node.js это обычно включает контейнер с nginx или Node.js сервером, readiness/liveness probes для проверки здоровья, resource limits и selector для связи с Service. Deployment автоматически поддерживает заданное число реплик и выполняет rolling update при изменении спецификации.
Подробное объяснение
Deployment - это Kubernetes resource, который управляет ReplicaSet и обеспечивает декларативное обновление подов. Для frontend-приложения на Node.js ключевые поля:
- replicas: количество экземпляров приложения (обычно 2-3 для отказоустойчивости)
- selector: matchLabels для связи с подами
- template: описание пода (контейнер с образом, порты, env variables, probes)
- strategy: тип обновления (RollingUpdate с maxSurge и maxUnavailable)
- revisionHistoryLimit: количество хранимых версий для rollback
Особенности для frontend:
- Если приложение - статика (SPA), контейнер обычно содержит nginx, а Node.js используется только для сборки
- Если приложение - SSR (Next.js, Nuxt), контейнер запускает Node.js сервер
- Readiness probe проверяет, что сервер отвечает на HTTP-запросы (например,
/health) - Liveness probe перезапускает под, если приложение зависло
На практике
При описании Deployment для frontend на Node.js:
- Используй resource requests/limits - frontend-приложения часто потребляют мало CPU, но могут иметь пики памяти при сборке или SSR
- Настрой readinessProbe с начальной задержкой (initialDelaySeconds) - Node.js серверу нужно время для инициализации
- Для статики используй nginx в контейнере, а Node.js только для сборки в multi-stage build
- Добавь env variables через ConfigMap или Secret для конфигурации (API endpoint, feature flags)
- Укажи terminationGracePeriodSeconds - дай время Node.js завершить активные соединения
- Для SSR приложений добавь podAntiAffinity чтобы поды были на разных нодах
Пример кода
YAMLapiVersion: apps/v1kind: Deploymentmetadata:name: frontend-applabels:app: frontendspec:replicas: 3strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 0selector:matchLabels:app: frontendtemplate:metadata:labels:app: frontendspec:containers:- name: appimage: myregistry/frontend:1.2.3ports:- containerPort: 3000env:- name: API_URLvalueFrom:configMapKeyRef:name: frontend-configkey: api-urlresources:requests:memory: "128Mi"cpu: "100m"limits:memory: "256Mi"cpu: "200m"readinessProbe:httpGet:path: /healthport: 3000initialDelaySeconds: 5periodSeconds: 10livenessProbe:httpGet:path: /healthport: 3000initialDelaySeconds: 15periodSeconds: 20terminationGracePeriodSeconds: 30
Как отвечать на собеседовании
Начни с определения Deployment как декларативного способа управления репликацией. Упомяни, что для frontend важно различать статику (SPA) и SSR - это влияет на выбор образа и probes. Подчеркни практические аспекты: resource limits для Node.js, readiness probe для graceful shutdown, стратегия обновления с maxUnavailable=0 для zero-downtime. Если спросят про масштабирование, добавь HPA (Horizontal Pod Autoscaler) на основе CPU или custom metrics.
Что проверяет интервьюер
- Понимание lifecycle пода и probes
- Знание стратегий обновления (RollingUpdate, Recreate)
- Умение настраивать ресурсы для Node.js приложений
- Понимание разницы между frontend-статикой и SSR
- Знание best practices: health checks, graceful shutdown, resource limits
- Способность объяснить, как Deployment взаимодействует с Service и Ingress
Типичные ошибки
- Отсутствие readiness probe - трафик идёт на ещё не готовый под
- Слишком маленький initialDelaySeconds - Node.js не успевает запуститься
- maxUnavailable=1 при одном реплике - при обновлении будет downtime
- Отсутствие resource limits - под может потребить всю память ноды
- Использование latest тега образа - невозможно откатиться
- Неправильный port в probe - если приложение слушает на 3000, а probe на 80
- Игнорирование terminationGracePeriodSeconds - Node.js не успевает завершить соединения
> Похожие задачи по frontend
С какими транспортными протоколами и технологиями вы работали (брокеры сообщений, вебсокеты, вебхуки)
Какие факторы в работе для вас неприемлемы
Какой сборщик используете
Писали ли вы тесты
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью