# Helm Один из самых популярных пакетных менеджеров для Kubernetes. **Управление helm** **Установка helm:** ``` curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm ``` **Репозиторий**
КомандаДоп. пар.Описание
helm repolistСписок репозиториев
add repo\_name repo\_urlДобавить репозиторий repo\_name с адресом repo\_url ``` helm repo add stable https://kubernetes-charts.storage.googleapis.com/ ``` Часто используют bitnami, но в России он сейчас закрыт. Есть зеркало: ``` helm repo add bitnami https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami ```
updateобновить репозиторий
helm search repo keywordПоиск чартов по репозиториям ключевого слова keyword
hub keywordВ официальном репозитории
--max-col-width=0\+ hub/repo полный вывод текста
--output yaml+hub/repo вывод в yaml
--versionsОтсортировать по версиям чарта
**Плагины** Он сам по себе мощный, но [ссылка на плагины](https://helm.sh/docs/community/related/)
КомандаДоп. пар.Описание
helm plugin install url Установка плагина
helm plugin list Список плагинов
helm plugin update pl\_name Обновление плагина
helm plugin unistall pl\_name Удаление плагина
**Переменные окружения** Зависит от переменных окружения. Основные переменные:
ПеременнаяОписание
XDG\_CACHE\_HOMEРазмещение кешированных данных. По умолчанию ~/.cache/helm
XDG\_CONFIG\_HOMEРазмещение конфигурационного файла По умолчанию ~/.config/helm
XDG\_DATA\_HOMEРазмещение плагинов helm По умолчанию ~/.local/share/helm
HELM\_DRIVERДрайвер для хранения данных. Secret - хранение авторизационных данных в файле, может быть configmap и memory
HELM\_NO\_PLUGINSОтключить плагины
KUBECONFIGРазмещение конфигурационного файла kubectl
**Charts**
КомандаДоп. пар.Описание
helm installname\_chart repoУстановить из репозитория repo чарт name\_chart
--...Переменные внутри чарта ``` helm install kubeapps --namespace kubeapps bitnami/kubeapps ```
--debug --dry-run pr\_name path\_to\_chпротестировать без установки чарта
helm inspect values name\_chart > ...Сохранение чарта в файл ``` helm inspect values stable/kube-ops-view > kube-ops-view.yaml ```
helm lint --strict path-to-chart Проверить соответствие values схеме
helm fetch name\_chart Скачать чарт в tar
--untarИ распаковать ``` helm fetch bitnami/wordpress --untar ```
helm ls --namespace namespaceсписок установленных чартов
helm upgrade...Обновление
helm rollback ch\_name count Откатить чарт ch\_name на count назад ``` helm rollback redis 1 --namespace=redis ```
helm uninstall name\_ch ``` helm uninstall kubeapps --namespace kubeapps ```
**Общая структура чарта** Helm автоматически определяет последовательность применения шаблонов в чарте.
Директория/файлОписаниеОбяз.
Chart.yamlМетаданные чарта+
templates/Ресурсы кубера в формате yaml helm (yaml с переменными) Но файлы начинающиеся с \_ не обрабатываются, \_\*.tpl обрабатываются как helper файлы. + если не составной
templates/NOTES.txtИнструкции по использованию-
values.yamlПеременные по умолчанию-
.helmignoreФайлы исключения при упаковке чарта-
charts/Зависимости (другие чарты)-, при отсутствии helm их сгенерирует в соответствии с Chart.yaml
Chart.lockПервично примененные зависимости.-, будет создан автоматически
crds/Зависимости, которые должны быть собраны до основного чарта-
README.mdОписание-
LICENSEЛицензия-
value.shema,jsonШаблон в json формате-
files/Дополнительные файлы
**templates/** Измененные yaml. Добавлены переменные в формате Go шаблонизации. Переменные берутся из файла values.yaml ``` apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }} data: configuration.txt: |- {{ .Values.configurationData }} ``` Родительские пространства имен у переменных:
Пространство именОписание
.ReleaseПеременные, связанные с релизом в устанавливаемой системе. .Release.Name - имя релиза .Release.Namespace - пространство имен релиза .Release.Revision - номер версии
.ValuesПеременные, размещенные в файле values.yaml
.ChartПеременные, получаемые из файла Chart.yaml Например, .Chart.Name, .Chart.Version .Chart.AppVersion
.FilesРабота с файлами в директории из директории files. Если файл не существует - вернется ошибка. .Files.Get - Извлекает содержимое файлов .Files.AsSecrets - Возвращает Base-64 закодированную строку для создания secret .Files.AsConfig - Возвращает данные для использования в виде ConfigMap
.SubchartsПространство имен дочерних чартов. Например .Subchart.MyChart.firstvalue
**values.yaml** В виде обычного key: value yaml **Chart.yaml** Чарты бывают application и library. Application используются для деплоя приложений, library - для предоставления именованных шаблонов, используемых в других чартах. В library чартах не может быть ни одного шаблона, только helper файлы. Обязательные поля:
ПолеОписание
apiVersionВерсия. В helm 3 формате используется v2
nameИмя чарта. Должно совпадать с именем директории чарта. В именах стоит использовать только -, например first-chart
versionВерсия. Формат X.Y.Z
Пример файла
КомандаДоп. пар.Описание
helm create chart\_name Создание шаблона чарта
helm install proj\_name path Создание проекта с названием proj\_name используя чарт по пути path
-f par\_fileссылка на другой файл параметров
--set foo=barРучная установка параметров
helm get manifest proj\_name Получить манифест проекта proj\_name
**Зависимости чарта** Заполняются в разделе dependencies файла Chart.yaml
КомандаДоп. пар.Описание
helm dependency buildпуть до Chart.yamlПерестроить зависимые чарты, базируясь на файле Chart.lock Если этого файла нет - то же что и update
helm dependency list Список зависимостей
helm dependency update Обновление чартов и генерация Chart.lock
В зависимостях могут быть условия: ``` dependencies: - name: dependency1 repository: https://example.com version: 1.x.x condition: dependency1.enabled tags: - monitoring: true - name: dependency2 repository: https://example.com version: 2.x.x condition: dependency2.enabled tags: - monitoring: true ``` В данном случае переменные dependency1.enabled и dependency2.enabled должны быть установлены в values.yaml файле. Можно несколько переменных через запятую, но лучше завести одну общую переменную и в values ее заполнять. Раздел tags разделяет по группам: если в родительском чарте переменная monitoring не выставлена - данные зависимости установлены не будут. Может быть несколько тэгов, но если хотя бы один подходит - будет добавлено. Дочерние параметры чарта могут быть переопределены. Можно импортировать параметры из дочернего чарта (если его параметры отмечены как экспортируемые). Также есть хуки, позволяющие выполнять что-то при достижении определенной стадии.