Helm. Определения и установка.
Helm — пакетный менеджер для Kubernetes. Его задача — упростить управление приложениями, объединив набор ресурсов в release для более атомарного управления ими.
Kubernetes не понимает, что разные сущности в кластере могут быть частью одного приложения. Для него deployment, service account, secret, configmap, pv/pvc - это разные не связанные между собой объекты. Но они при этом будут частью какого-то сервиса. В отличие от Kubernetes, Helm понимает, что разрозненные объекты могут быть частью какого-то приложения в кластере.
Helm можно сравнить с установщиком какой-либо программы. Запуская setup мы уверены в том, что установщик сам знает какие библиотеки ему нужно установить для работы приложения. Helm работает аналогичным образом. Но работает с yaml файлами. Также его работа аналогична работе таких менеджеров пакетов как apt, yum, npm, pip, etc.
Концепции
Важно понимать и различать основные понятия, которыми оперирует Helm:
- templates — шаблоны манифестов Kubernetes, которые войдут в релиз. Могут включать в себя Deployment, Service, Ingress, Certificate и другие объекты Kubernetes.
- values.yaml — Key-Value словарь, с помощью которого происходит шаблонизация манифестов;
- Chart.yaml - информация о самом чарте. Здесь лежит версия чарта, версия ПО, связанные технологии, информация об авторе, ссылка на сайт проекта и github;
- LICENSE - файл с описанием лицензии. Не является обязательным;
- README - файл с информацией о чарте. Не является обязательным;
- Chart — коллекция шаблонов templates, Values.yaml, мета-информация о чарте, зависимости чарта, объединенные в архив, который затем можно развернуть в релиз командой helm install или helm upgrade;
- Release — установленный чарт с конкретным именем в указанный неймспейс. Один и тот же чарт может быть установлен сколько угодно раз в одном или нескольких неймспейсах.
Особенности
- Встроенный шаблонизатор на основе Go templates
- Чарт (chart) — коллекция манифестов и зависимостей релиза (release);
- Возможность атомарно установить и удалить весь релиз;
- Возможность установить несколько раз один и тот же чарт;
- Удобный CLI по изменению параметров шаблона;
- Artifact Hub — глобальный реестр различных готовых чартов;
- Helm помнит обо всех действиях, произведённых в кластере;
- Если внести изменения в манифест напрямую, без использования helm, то это не проблема. Helm учтёт эти изменения;
- Один и тот же чарт можно установить несколько раз в один и тот же кластер кубера;
- Helm в своей истории не хранит пользовательские данные. Поэтому апгрейд версии может привести к потере данных;
- Helm, по сути, передаёт значения в файлы каталога templates из файлов values.yaml и Chart.yaml.
Установка
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh
brew install 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 completion bash > /etc/bash_completion.d/helm
helm version
helm env ELM_BIN="helm" HELM_CACHE_HOME="/Users/cameda/Library/Caches/helm" HELM_CONFIG_HOME="/Users/cameda/Library/Preferences/helm" HELM_DATA_HOME="/Users/cameda/Library/helm" HELM_DEBUG="false" HELM_KUBEAPISERVER="" HELM_KUBEASGROUPS="" HELM_KUBEASUSER="" HELM_KUBECAFILE="" HELM_KUBECONTEXT="" HELM_KUBETOKEN="" HELM_MAX_HISTORY="10" HELM_NAMESPACE="default" HELM_PLUGINS="/Users/cameda/Library/helm/plugins" HELM_REGISTRY_CONFIG="/Users/cameda/Library/Preferences/helm/registry/config.json" HELM_REPOSITORY_CACHE="/Users/cameda/Library/Caches/helm/repository" HELM_REPOSITORY_CONFIG="/Users/cameda/Library/Preferences/helm/repositories.yaml"
--debug - enable verbose output -h - help