Helm `pre-install` ловит вызов скрипта во время установки helm - PullRequest
0 голосов
/ 22 мая 2019

Я хочу использовать pre-install крюк руля,

https://github.com/helm/helm/blob/master/docs/charts_hooks.md

в документации написано, что вам нужно использовать аннотацию, которая понятна, но что не понятно как это совместить?

apiVersion: ...
kind: ....
metadata:
  annotations:
    "helm.sh/hook": "pre-install"

для моего случая мне нужно выполнить bash-скрипт, который создаст некоторую переменную env, где я должен поместить этот пре-хук-скрипт в мою диаграмму, чтобы helm мог использовать

перед установкой?

Полагаю, мне нужно создать внутри папки templates файл с именем: pre-install.yaml Это правда? если да, куда мне поместить команды, которые создают переменные env во время установки диаграммы?

UPDATE Команда, которую мне нужно выполнить в pre-install, выглядит следующим образом:

export DB=prod_sales 
export DOMAIN=www.test.com
export THENANT=VBAS 

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Хук Хелм запускает некоторый другой объект Kubernetes, чаще всего Job, который запускает отдельный Pod. Настройки переменных среды будут влиять только на текущий процесс и потомки, которые он запускает позже, в том же контейнере Docker, в том же модуле Pod. То есть: вы не можете использовать такие механизмы, как предустановочные хелмы Helm или Kubernetes initContainers, для установки таких переменных среды, как этот.

Если вы просто хотите установить переменные окружения в фиксированные строки, как показано в вопросе, вы можете напрямую установить это в спецификации Pod . Если переменные, ну, в общем, переменные, но вы не хотите жестко их кодировать в спецификации Pod, вы также можете поместить их в ConfigMap и затем установить переменные среды из этого ConfigMap . Вы также можете использовать шаблоны Helm для ввода настроек из конфигурации во время установки.

env:
  - name: A_FIXED_VARIABLE
    value: A fixed value
  - name: SET_FROM_A_CONFIG_MAP
    valueFrom:
      configMapKeyRef:
        name: the-config-map-name
        key: someKey
  - name: SET_FROM_HELM
    value: {{ .Values.environmentValue | quote }}

С указанными вами конкретными значениями путь значений Helm, вероятно, самый простой. Вы можете запустить команду как

helm install --set db=prod_sales --set domain=www.test.com ...

и затем иметь доступ к .Values.db, .Values.domain, и т. Д. в ваших шаблонах.

Если значение действительно действительно динамическое и вы не можете установить его другим способом, вы можете использовать сценарий точки входа Docker, чтобы установить его во время запуска контейнера. В этом ответе я описываю эквиваленты универсального Docker, включая настройку сценария точки входа.

1 голос
/ 22 мая 2019

Вы можете взять в качестве примера встроенную рулевую диаграмму из проекта arc *, здесь - исходный код.
* Arc - тип загрузчика для проектов Laravel, который может Dockerize /Кубернетизировать существующие приложения, написанные на этом PHP-фреймворке.

...