Ответ
В продакшене контейнерами управляют не вручную, а с помощью оркестраторов. Я в основном работаю с Kubernetes.
Ключевые практики, которые я применяю:
- Декларативное описание: Все приложения разворачиваются через манифесты YAML (Deployments, StatefulSets), которые хранятся в Git.
- Отказоустойчивость и здоровье:
- Настраиваю
livenessProbeиreadinessProbeдля каждого контейнера. - Задаю
resource requests/limitsдля CPU и памяти. - Запускаю несколько реплик (replicas) приложения.
- Настраиваю
- Безопасные обновления: Использую стратегию
RollingUpdateдля деплоя без простоя. - Мониторинг и логирование: Контейнеры пишут логи в stdout, которые собирает Fluentd. Метрики приложений и самих подов забирает Prometheus.
Пример Deployment для продакшена:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-production
spec:
replicas: 3
selector:
matchLabels:
app: api
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: myregistry/api:v1.2.3
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
readinessProbe:
httpGet:
path: /ready
port: 8080
Для автоматизации всего этого процесса используется GitOps (например, ArgoCD), который автоматически синхронизирует состояние кластера с манифестами в Git-репозитории.