#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 в один файл , разделенных ---
, что может помочь предоставить такую возможность.)