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 минут, но это можно уменьшить (хотя я помню, что читал, что все, что меньше минуты, может быть проблематичным).
Если изменения внесены в более чем одно пространство имен, они будут применены все за один раз. Мне никогда не приходилось проверять, применяются ли все изменения к нескольким пространствам имен одновременно, поскольку они обычно выполняются довольно быстро. Однако я должен сказать, что мы не тестировали его в «сотнях пространств имен», пока вы пишете, но он отлично работает в некоторых из них.