advanced
Cloud Run
Деплойте контейнеры на managed serverless-платформу с масштабированием по запросам, сохраняя HTTP и переносимость контейнера.
Cloud Run — контейнерные HTTP-сервисы и jobs на полностью managed-платформе. Вы деплоите тот же Docker-образ, что локально; GCP масштабирует инстансы по concurrency запросов, поддерживает свои домены и из коробки связывается с IAM и Cloud Logging.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: api
spec:
template:
spec:
containers:
- image: gcr.io/project/api:1.4.0
ports:
- containerPort: 8080
env:
- name: NODE_ENV
value: production
resources:
limits:
memory: 512Mi
cpu: '1'
| Параметр | Назначение | |----------|------------| | Concurrency | Запросов на инстанс до scale-out | | Min instances | Меньше cold start, но плата за простой | | CPU always allocated | Удобнее для фоновой работы в контейнере |
Node.js API слушает `PORT`, обрабатывает `SIGTERM`, сессии и upload — во внешних хранилищах.
На интервью: Cloud Run vs Cloud Functions vs GKE; cold start и min instances; stateless-дизайн; IAM invoker; таймауты запросов.
Типовые ошибки: WebSocket или long-lived соединения без отдельного дизайна; запись на локальный диск; тяжёлый образ тормозит cold start; нет проверки готовности при старте.
Компромисс — простота эксплуатации и оплата за запросы против меньшего контроля над сетью, tuning нод и нестандартным runtime.
Чеклист:
- Неизменяемый образ на каждую revision.
- Сессии, кэш и upload — снаружи контейнера.
- Осознанно задайте concurrency, memory и timeout.
- Min instances — только там, где SLO по latency того требует.