Как вы разворачивали сервисы (деплой)?

«Как вы разворачивали сервисы (деплой)?» — вопрос из категории Архитектура и DevOps-практики, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мой стандартный пайплайн деплоя сервисов строился вокруг контейнеризации (Docker) и оркестрации (Kubernetes), с полной автоматизацией через CI/CD.

Процесс:

  1. CI (Continuous Integration): При пуше кода в Git (например, в ветку main) запускался пайплайн в GitLab CI/CD или GitHub Actions. Он выполнял:
    • Сборку Docker-образа.
    • Запуск юнит- и интеграционных тестов.
    • Загрузку образа в приватный registry (Harbor, ECR, GCR).
  2. CD (Continuous Deployment): После успешной сборки автоматически или по approval обновлялся манифест в Kubernetes.

Пример Deployment манифеста для Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: backend-service
  template:
    metadata:
      labels:
        app: backend-service
    spec:
      containers:
      - name: app
        image: my-registry/backend:${COMMIT_SHA}
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 5
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"

Сопутствующая инфраструктура:

  • Конфигурация: Использовал Helm charts или Kustomize для управления конфигами разных сред (dev/staging/prod).
  • Инфраструктура: Виртуальные машины, сети, балансировщики создавались через Terraform.
  • Наблюдаемость: На каждый сервис настраивал метрики (Prometheus), логи (Loki) и трейсинг (Jaeger). Всегда добавлял readiness/liveness пробы.
  • Стратегия деплоя: Применял rolling updates по умолчанию, для критичных сервисов тестировал blue-green или canary-деплой с помощью Istio или Flagger.