Файлы Values
В предыдущем разделе мы рассмотрели встроенные объекты, которые предоставляют шаблоны Helm. Один из встроенных объектов — Values. Этот объект обеспечивает доступ к значениям, переданным в чарт. Его содержимое формируется из нескольких источников:
- Файл
values.yamlв чарте - Если это субчарт — файл
values.yamlродительского чарта - Файл values, переданный в
helm installилиhelm upgradeс помощью флага-f(helm install -f myvals.yaml ./mychart) - Отдельные параметры, переданные с помощью
--set(например,helm install --set foo=bar ./mychart)
Список выше приведён в порядке возрастания приоритета: values.yaml используется по умолчанию и может быть переопределён файлом values.yaml родительского чарта, который, в свою очередь, может быть переопределён пользовательским файлом values, а тот — параметрами --set.
Файлы values — это обычные YAML-файлы. Давайте отредактируем mychart/values.yaml, а затем изменим наш шаблон ConfigMap.
Удалим значения по умолчанию из values.yaml и установим только один параметр:
favoriteDrink: coffee
Теперь мы можем использовать это значение в шаблоне:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favoriteDrink }}
Обратите внимание: в последней строке мы обращаемся к favoriteDrink как к атрибуту Values: {{ .Values.favoriteDrink }}.
Посмотрим на результат.
$ helm install geared-marsupi ./mychart --dry-run --debug
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart
NAME: geared-marsupi
LAST DEPLOYED: Wed Feb 19 23:21:13 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
favoriteDrink: coffee
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: geared-marsupi-configmap
data:
myvalue: "Hello World"
drink: coffee
Поскольку favoriteDrink в файле values.yaml по умолчанию установлен как coffee, именно это значение отображается в шаблоне. Мы можем легко переопределить его, добавив флаг --set при вызове helm install:
$ helm install solid-vulture ./mychart --dry-run --debug --set favoriteDrink=slurm
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart
NAME: solid-vulture
LAST DEPLOYED: Wed Feb 19 23:25:54 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
favoriteDrink: slurm
COMPUTED VALUES:
favoriteDrink: slurm
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: solid-vulture-configmap
data:
myvalue: "Hello World"
drink: slurm
Поскольку --set имеет более высокий приоритет, чем файл values.yaml по умолчанию, наш шаблон генерирует drink: slurm.
Файлы values также могут содержать более структурированное содержимое. Например, мы можем создать раздел favorite в нашем файле values.yaml и добавить туда несколько ключей:
favorite:
drink: coffee
food: pizza
Теперь нам нужно немного изменить шаблон:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favorite.drink }}
food: {{ .Values.favorite.food }}
Хотя такая структуризация данных возможна, рекомендуется сохранять деревья значений неглубокими, отдавая предпочтение плоской структуре. Когда мы рассмотрим присвоение значений субчартам, вы увидите, как значения именуются с использованием древовидной структуры.
Удаление ключа по умолчанию
Если вам нужно удалить ключ из значений по умолчанию, вы можете переопределить его значение как null — тогда Helm удалит этот ключ при слиянии переопределённых значений.
Например, стабильный чарт Drupal позволяет настраивать проверку работоспособности (liveness probe), если вы используете собственный образ. Вот значения по умолчанию:
livenessProbe:
httpGet:
path: /user/login
port: http
initialDelaySeconds: 120
Если вы попытаетесь переопределить обработчик livenessProbe на exec вместо httpGet с помощью --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt], Helm объединит ключи по умолчанию и переопределённые, что приведёт к следующему YAML:
livenessProbe:
httpGet:
path: /user/login
port: http
exec:
command:
- cat
- docroot/CHANGELOG.txt
initialDelaySeconds: 120
Однако Kubernetes выдаст ошибку, поскольку нельзя объявлять более одного обработчика livenessProbe. Чтобы решить эту проблему, вы можете указать Helm удалить livenessProbe.httpGet, установив его в null:
helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null
На данный момент мы рассмотрели несколько встроенных объектов и использовали их для внедрения информации в шаблон. Теперь перейдём к другому аспекту движка шаблонов: функциям и конвейерам.