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

#kubernetes #kustomize

Вопрос:

У меня есть три прикладных сервиса кластеров баз данных PostgreSQL в Kubernetes:

  • кластер-тип-1
  • кластер-тип-2
  • кластер-тип-3

что мне нужно развернуть с помощью Kustomize в трех разных средах:

  • разработка
  • постановка
  • производство

Множество примеров Kustomize показывают, как подходить к развертыванию приложения в различных средах. Теперь предположим, что у меня есть один YAML для приложения и один для настройки:

  • приложение.yaml
  • конфигурация.yaml

Типичный подход в Kustomize заключается в создании базы для одной среды, а затем дельты в наложении для каждой среды:

 production (base)
 |_ kustomize.yaml
 |_ application.yaml
 |_ config.yaml
 |_ staging
 |     |_ kustomize.yaml (with delta patches)
 |_ dev
     |_ kustomize.yaml (with delta patches)
 

Теперь мои два файла YAML довольно похожи не только по среде, но и по типу кластера. Проблема в том, что я не знаю наилучшего подхода к управлению вторым измерением развертывания (тип кластера).

Один из подходов может заключаться в следующем наложении:

  • dev-кластер-тип-1
  • dev-кластер-тип-2
  • dev-кластер-тип-3
  • этап-кластер-тип-1
  • этап-кластер-тип-2
  • этап-кластер-тип-3
  • производство-кластер-тип-2
  • производство-кластер-тип-3

таким образом, в основном двухмерная матрица развертывания 3×3 становится массивом из девяти элементов. Кто-нибудь знает, существует ли лучший подход?

PS Я знаю, что существуют альтернативы кустомизации, такие как Spruce, которые позволяют использовать шаблоны с переменными, а затем для каждого элемента матрицы просто использовать соответствующие переменные. Тем не менее, я хотел бы знать, как лучше всего работать с Kustomize без слишком большого дублирования кода.