GitOps: внесение изменений в ресурсы k8s в нескольких пространствах имен

У нас есть мультитенантный кластер Kubernetes, в котором размещены различные клиентские среды. Пространства имен Kubernetes используются для изоляции этих клиентских сред. Для каждого из этих пространств имен настроен аналогичный набор ресурсов k8s (развертывания, конфигурационная карта и т. Д.). Некоторые из этих ресурсов идентичны в пространствах имен, а некоторые нет.

С точки зрения непрерывной доставки я изучаю варианты, позволяющие беспрепятственно вносить изменения в эти идентичные компоненты (в разных пространствах имен). Git-Ops / Pull-based-Continuous-Delivery кажется хорошим подходом, который позволит нам беспрепятственно управлять сотнями пространств имен в различных кластерах.

Изучал пару инструментов Git-Ops, таких как ArgoCD, Fluxv2 и т. Д., Но не мог понять, позволят ли эти инструменты развертывать изменения в нескольких пространствах имен одновременно (или в пределах предсказуемого временного окна). Будет полезно, если вы сможете направить / посоветовать мне с точки зрения выбора правильного инструмента / подхода для выполнения развертывания в нескольких пространствах имен. Также будет хорошо понять, можно ли настроить эти инструменты Git-Ops для обработки таких сценариев.

Иллюстрация того, как настраиваются пространства имен в нашем кластере k8s.

      Namespace: customer1
Deployments: app1, common-app, common-service
Configmaps: cm1, common-cm

Namespace: customer2
Deployments: app2, common-app, common-service
Configmaps: cm2, common-cm

, , идентичны во всех средах / пространствах имен.

, , , не идентичны. У них разные теги изображений, метки и т. Д.

2 ответа

Я использую Fluxv2. Мой подход будет заключаться в создании диаграмм для, common-serviceи т. д. с одинаковыми значениями и определите пространство имен на отдельных

Так что вы можете поставить common-app диаграмма на clusters/production/charts/common-apps и укажите путь к диаграмме на нескольких HelmReleases что может выглядеть так

      ---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: common-apps
  namespace: customer1
  labels:
    chart: common-apps
spec:
  interval: 1m
  releaseName: common-apps
  chart:
    spec:
      chart: clusters/production/charts/common-apps
      sourceRef:
        kind: GitRepository
        name: manifests
        namespace: flux-system
  values:
    some_key: some_value
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: common-apps
  namespace: customer2
  labels:
    chart: common-apps
spec:
  interval: 1m
  releaseName: common-apps
  chart:
    spec:
      chart: clusters/production/charts/common-apps
      sourceRef:
        kind: GitRepository
        name: manifests
        namespace: flux-system
  values:
    some_key: some_value

Мы используем Flux для развертывания ресурсов в нашем кластере K8s.

эти инструменты позволят вам вносить изменения в несколько пространств имен одновременно (или в пределах предсказуемого временного окна).

Да, Flux в основном отслеживает любые изменения в вашем репозитории git и применяет их к кластеру. По умолчанию Flux проверяет наличие изменений каждые 5 минут, но это можно уменьшить (хотя я помню, что читал, что все, что меньше минуты, может быть проблематичным).

Если изменения внесены в более чем одно пространство имен, они будут применены все за один раз. Мне никогда не приходилось проверять, применяются ли все изменения к нескольким пространствам имен одновременно, поскольку они обычно выполняются довольно быстро. Однако я должен сказать, что мы не тестировали его в «сотнях пространств имен», пока вы пишете, но он отлично работает в некоторых из них.

Другие вопросы по тегам