Как задеплоить код на все кластеры Kubernetes?

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

Ответ

Для деплоя на несколько кластеров Kubernetes мы используем GitOps-подход с инструментами вроде ArgoCD или FluxCD. Это позволяет централизованно управлять состоянием всех кластеров из одного Git-репозитория.

Пример с ArgoCD и ApplicationSet:

  1. Устанавливаем ArgoCD в каждый целевой кластер (или используем центральный сервер с доступом к ним).
  2. В Git-репозитории храним манифесты приложения (например, Helm-чарт или raw YAML).
  3. Создаем ApplicationSet, который автоматически создает приложение (Application) в каждом кластере, соответствующем селектору.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: my-app-multicluster
spec:
  generators:
  - clusters: # Генератор, перебирающий все зарегистрированные кластеры
      selector:
        matchLabels:
          environment: production # Или пустой селектор {} для всех кластеров
  template:
    metadata:
      name: '{{name}}-{{cluster.name}}'
    spec:
      project: default
      source:
        repoURL: 'https://github.com/my-org/app-manifests.git'
        targetRevision: main
        path: ./k8s/overlays/prod
      destination:
        server: '{{cluster.server}}' # Сервер API каждого кластера подставляется автоматически
        namespace: my-app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

Ключевые моменты:

  • Единственный источник истины: Состояние всех кластеров определяется содержимым Git-репозитория.
  • Автоматическая синхронизация: ArgoCD постоянно сравнивает желаемое состояние (Git) с фактическим (кластер) и вносит исправления.
  • Безопасность: Доступ к кластерам настраивается через сертификаты и контексты kubeconfig в ArgoCD.
  • Альтернативы: Для более простых сценариев можно использовать скрипты с kubectl --context=<cluster-name> apply -f ... или инструменты вроде Rancher Fleet.