Helm+Crossplane+LinkerD
March 6, 2023

Helm. Определения и установка.

Helm — пакетный менеджер для Kubernetes. Его задача — упростить управление приложениями, объединив набор ресурсов в release для более атомарного управления ими.

Kubernetes не понимает, что разные сущности в кластере могут быть частью одного приложения. Для него deployment, service account, secret, configmap, pv/pvc - это разные не связанные между собой объекты. Но они при этом будут частью какого-то сервиса. В отличие от Kubernetes, Helm понимает, что разрозненные объекты могут быть частью какого-то приложения в кластере.

Helm можно сравнить с установщиком какой-либо программы. Запуская setup мы уверены в том, что установщик сам знает какие библиотеки ему нужно установить для работы приложения. Helm работает аналогичным образом. Но работает с yaml файлами. Также его работа аналогична работе таких менеджеров пакетов как apt, yum, npm, pip, etc.

Концепции

Важно понимать и различать основные понятия, которыми оперирует Helm:

  1. templates — шаблоны манифестов Kubernetes, которые войдут в релиз. Могут включать в себя Deployment, Service, Ingress, Certificate и другие объекты Kubernetes.
  2. values.yaml — Key-Value словарь, с помощью которого происходит шаблонизация манифестов;
  3. Chart.yaml - информация о самом чарте. Здесь лежит версия чарта, версия ПО, связанные технологии, информация об авторе, ссылка на сайт проекта и github;
  4. LICENSE - файл с описанием лицензии. Не является обязательным;
  5. README - файл с информацией о чарте. Не является обязательным;
  6. Chart — коллекция шаблонов templates, Values.yaml, мета-информация о чарте, зависимости чарта, объединенные в архив, который затем можно развернуть в релиз командой helm install или helm upgrade;
  7. 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

MacOS

brew install helm

Ubuntu

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