Общая диаграмма управления — Проблемы с именем приложения

#kubernetes-helm

Вопрос:

У меня есть много служб, которые мне нужно будет развернуть в Kubernetes. Хотя значения различаются, структура установки одинакова для 85% из них. Я хотел бы использовать общую диаграмму управления для этих 85%.

Сначала это казалось очень выполнимым, я могу просто передать пользовательский values.yaml файл для каждой диаграммы.

Но потом я понял, что содержание диаграммы.yaml нельзя переопределить. В частности, свойства appVersion и name должны быть переопределены для каждого развертывания.

Действительно ли мне нужно вести отдельную таблицу для всех этих микросервисов для резки печенья? Или есть способ создать общую диаграмму и переопределить свойства appVersion и name в диаграмме.файл yaml?

Ответ №1:

Я еще немного покопался и обнаружил, что это было запрошено в 2018 году.

https://github.com/helm/helm/issues/3555

Это не движение (но много голосов). В конце концов его закрыли как несвежее. Это было повторно запрошено здесь:

https://github.com/helm/helm/issues/8194

У него есть несколько веских аргументов в поддержку этого, но никакого движения со стороны команды руля.

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

Ответ №2:

Вероятно, вам действительно нужно «создать диаграмму» с отдельным Chart.yaml файлом для каждой службы, но вы можете перенести фактическую реализацию в диаграмму общей библиотеки.

Напишите обычную диаграмму управления, которая содержит 85% общих частей. Вы можете протестировать его развертывание, если хотите, но, вероятно, большинство интересных частей будут приняты в качестве значений. Убедитесь, что это где-то доступно; два самых простых варианта будут в хранилище диаграмм или как часть монорепо.

Теперь ваша служебная диаграмма просто должна быть включена, чтобы включить общую диаграмму. Используя синтаксис Helm 3, это может выглядеть так:

 apiVersion: 2           # Helm 3 syntax with inline requirements
name: some-service
version: 0.0.1
appVersion: 20210317
dependencies:
  - name: application   # the shared chart
    version: '^1.0'
    repository: 'http://helm.example.com/charts'
 

В файле служебной диаграммы values.yaml вам необходимо обязательно включить в параметры общей диаграммы под ключом, соответствующим name: (или, если общая диаграмма настроена таким образом, global: ):

 application:
  redis:
    enabled: false
 

Если вы зависите от настроек в Chart.yaml файле, диаграмма общей библиотеки будет отображаться Chart.yaml как собственная .Chart , что может повлиять на сгенерированные имена (если вы назовете вещи {{ .Release.Name }}-{{ .Chart.Name }}-suffix , они будут видеть библиотеки .Chart.Name , а не службы).

Служебная диаграмма на самом деле не нуждается в собственной templates , и я считаю, что диаграмма будет установлена правильно, если templates каталога там нет. Вы можете добавить больше YAML, templates если вам нужно. Сложнее всего подавить или изменить то, что находится в таблице библиотеки, и в основном это необходимо для поддержки всех возможных опций, которые могут потребоваться службе. (Вы можете обернуть весь файл YAML {{ if }}...{{ end }} или включить несколько объектов YAML в один файл , разделенных --- , что может помочь предоставить такую возможность.)