Kubernetes-helm: использование одного шаблона для нескольких приложений - PullRequest
0 голосов
/ 10 октября 2019

Это то, что у меня сейчас есть:

С базовым helm create приходит файл values.yaml и папка template с deployment.yaml. Файл Deployment был адаптирован для управления приложением весенней загрузки в образе докера.

Теперь values.yaml содержит что-то вроде

myApp:
  repository: myApp.mycompany.com/demo/my-app-customers
  tag: stable

И deployment.yaml содержит

spec:
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.myApp.repository }}:{{ .Values.myApp.tag }}"

Допустим, мне нужно управлять другим весенним загрузочным приложением, очень близким к тому, что такое «my-app-Customers». Я подумал, что мне просто нужно добавить еще одну строку в values.yaml, например:

mySecondApp:
  repository: myApp.mycompany.com/demo/my-app-others
  tag: stable

Но это не сработает с deployment.yaml, потому что он использует .Values.myApp.repository. Это означает, что мне нужно создать еще один файл deployment-others.yaml, который использует .Values.mySecondApp.repository для развертывания этого второго приложения. Поэтому невозможно использовать один и тот же шаблон для разных приложений.

  • Я прав или я что-то упустил?
  • Был бы другой способ сделать это или мне нужноскопировать прошлый аналогичный файл развертывания (и другие) и иметь один файл шаблона для приложения?

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Если ресурс Deployment практически одинаков, вы можете просто рассмотреть свою диаграмму Хелма как абстракцию и указать значения, используя флаг --set.

helm install --set repository=myApp.mycompany.com/demo/my-first-app --name my-first-app /path/to/helm/chart my-first-app
helm install --set repository=myApp.mycompany.com/demo/my-second-app --name my-second-app /path/to/helm/chart my-second-app
0 голосов
/ 11 октября 2019

Стандартный способ сделать это - иметь файл second-deployment.yaml, который по сути является копией первого, но с разными метками и ссылками на значения. Обычно в _helpers.tpl помещаются некоторые шаблоны для создания таких вещей, как блоки меток, и вы можете расширить их для общих переменных среды или выгрузить часть конфигурации в ConfigMap, чтобы уменьшить дублирование.

Слой шаблонов Helm на самом деле не знает синтаксиса YAML, поэтому, пока каждый файл выдает действительный YAML, вы можете делать все, что захотите. Это может включать в себя несколько документов в одном файле, и они могут быть созданы с помощью шаблонов. Это может быть сложно, хотя. Базовая схема может выглядеть так:

{{- range list .Values.myApp .Values.mySecondApp -}}
---
...
spec:
  template:
    spec:
      containers:
        - name: {{ $.Chart.Name }}
          image: "{{ .repository }}:{{ .tag }}"
...
{{ end -}}

Если вы попробуете это, вы должны знать, что . является фрагментом объекта значений, а не корневым объектом, как это обычно бывает;обратите внимание, например, $.Chart.Name, чтобы явно указать имя диаграммы верхнего уровня.

...