Helm `pre-install `hook, вызывающий скрипт во время установки helm

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

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

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

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

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

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

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

ОБНОВИТЬ Команда, которую мне нужно выполнить в pre-install, выглядит так:

export DB=prod_sales 
export DOMAIN=www.test.com
export THENANT=VBAS 
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
5 929
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Спасибо, пожалуйста, посмотрите мое обновление, мне нужно установить их для изображения в pre-install, как мне это сделать? Я не вижу этого в примере, который вы публикуете...

JDC 22.05.2019 21:32
Ответ принят как подходящий

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

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

Вы можете поместить ENV в POD.yaml в папке шаблона. Это будет самый простой вариант.

Другие вопросы по теме