Использование Helm
В этом руководстве объясняются основы использования Helm для управления пакетами на вашем кластере Kubernetes. Руководство предполагает, что вы уже установили Helm CLI.
Если вы просто заинтересованы в нескольких командах, то можете начать с Краткого Руководства. В этой главе описаны особенности команд Helm.
Three Big Concepts
Chart – это пакет Helm. Он содержит описания ресурсов, необходимые для запуска приложения, инструмента или службы внутри кластера Kubernetes.
Репозиторий это место, где можно собирать charts-ы и делиться ими. Очень похоже на Perl's CPAN archive или Fedora Package Database, но для пакетов Kubernetes.
Релиз это пример charts-а, работающего в кластере Kubernetes. Один chart часто может быть установлен много раз в одном и том же кластере. Каждый раз, когда он устанавливается, создается новый release. Рассмотрим график MySQL. У каждого из них будет свой release, который, в свою очередь, будет иметь своё имя release name.
Зная эти понятия, объяснить работу Helm можно так:
Helm устанавливает charts в Kubernetes, создавая новый release для каждой установки. А для поиска новых графиков можно воспользоваться поиском Helm chart repositories.
'helm search': Поиск Charts
Helm поставляется с мощной поисковой командой. Он может быть использован для поиска двух различных типов источников:
helm search hub
ищет в the Artifact Hub, который агрегирует списки из различных хранилищhelm search repo
поиск в репозиториях, которые вы добавили в свой локальный каталог helm client (используяhelm repo add
). Этот поиск выполняется по локальным данным, не используя подключение к публичной сети.
Вы можете найти общедоступные chart-ы, запустив helm search hub
:
$ helm search hub wordpress
URL CHART VERSION APP VERSION DESCRIPTION
https://hub.helm.sh/charts/bitnami/wordpress 7.6.7 5.2.4 Web publishing platform for building blogs and ...
https://hub.helm.sh/charts/presslabs/wordpress-... v0.6.3 v0.6.3 Presslabs WordPress Operator Helm Chart
https://hub.helm.sh/charts/presslabs/wordpress-... v0.7.1 v0.7.1 A Helm chart for deploying a WordPress site on ...
Выше приведен поиск всех chart-ов wordpress
на Artifact Hub.
Поиск показывает все доступные chart-ы с определенным именем helm search hub
.
Используя helm search repo
, вы можете найти названия chart-ов в
уже добавленных вами репозиториях:
$ helm repo add brigade https://brigadecore.github.io/charts
"brigade" has been added to your repositories
$ helm search repo brigade
NAME CHART VERSION APP VERSION DESCRIPTION
brigade/brigade 1.3.2 v1.2.1 Brigade provides event-driven scripting of Kube...
brigade/brigade-github-app 0.4.1 v0.2.1 The Brigade GitHub App, an advanced gateway for...
brigade/brigade-github-oauth 0.2.0 v0.20.0 The legacy OAuth GitHub Gateway for Brigade
brigade/brigade-k8s-gateway 0.1.0 A Helm chart for Kubernetes
brigade/brigade-project 1.0.0 v1.0.0 Create a Brigade project
brigade/kashti 0.4.0 v0.4.0 A Helm chart for Kubernetes
Helm search использует приближённый поиск подстроки (fuzzy string matching), поэтому вы можете вводить части слов или фраз:
$ helm search repo kash
NAME CHART VERSION APP VERSION DESCRIPTION
brigade/kashti 0.4.0 v0.4.0 A Helm chart for Kubernetes
Поиск – это хороший способ найти доступные пакеты. Как только вы нашли пакет, который хотите установить, вы можете использовать helm install
для его установки.
'helm install': Установка пакета
Чтобы установить новый пакет, используйте команду helm install
. В самом простом случае она
ожидает два аргумента: имя выпуска _release_name_
, и имя chart-а, который Вы
хотите установить.
$ helm install happy-panda bitnami/wordpress
NAME: happy-panda
LAST DEPLOYED: Tue Jan 26 10:27:17 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
** Please be patient while the chart is being deployed **
Your WordPress site can be accessed through the following DNS name from within your cluster:
happy-panda-wordpress.default.svc.cluster.local (port 80)
To access your WordPress site from outside the cluster follow the steps below:
1. Get the WordPress URL by running these commands:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress'
export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "WordPress URL: http://$SERVICE_IP/"
echo "WordPress Admin URL: http://$SERVICE_IP/admin"
2. Open a browser and access WordPress using the obtained URL.
3. Login with the following credentials below to see your blog:
echo Username: user
echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
После установки wordpress
chart-а обратите внимание, что при установке создается
новый объект release. Текущей релиз называется happy-panda
. (Если вы хотите
чтобы Helm сгенерировал имя за вас, оставьте название релиза и используйте
--generate-name
.)
Во время установки helm
клиент напечатает полезную информацию о том, какие
ресурсы были созданы, каково состояние релиза, а также есть ли
дополнительные шаги настройки, которые вы можете воспроизвести.
Helm не ждет, пока все ресурсы будут запущены, прежде чем он завершит свою работу. Для многих chart-ов требуются образ Docker-а размером более 600M, и их установка в Kubernetes кластер может занять много времени.
Чтобы отслеживать состояние релиза или перечитывать информацию о конфигурации, вы
можете использовать helm status
:
$ helm status happy-panda
NAME: happy-panda
LAST DEPLOYED: Tue Jan 26 10:27:17 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
** Please be patient while the chart is being deployed **
Your WordPress site can be accessed through the following DNS name from within your cluster:
happy-panda-wordpress.default.svc.cluster.local (port 80)
To access your WordPress site from outside the cluster follow the steps below:
1. Get the WordPress URL by running these commands:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress'
export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "WordPress URL: http://$SERVICE_IP/"
echo "WordPress Admin URL: http://$SERVICE_IP/admin"
2. Open a browser and access WordPress using the obtained URL.
3. Login with the following credentials below to see your blog:
echo Username: user
echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Выше показано текущее состояние вашего релиза.
Настройка Chart-а Перед установкой
Изначально Helm использует параметры конфигурации по умолчанию. Но вы всегда можете настроить chart используя свою конфигурацию
Чтобы увидеть, какие параметры есть в chart-е, используйте helm show values
:
$ helm show values bitnami/wordpress
## Global Docker image parameters
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
## Current available global Docker image parameters: imageRegistry and imagePullSecrets
##
# global:
# imageRegistry: myRegistryName
# imagePullSecrets:
# - myRegistryKeySecretName
# storageClass: myStorageClass
## Bitnami WordPress image version
## ref: https://hub.docker.com/r/bitnami/wordpress/tags/
##
image:
registry: docker.io
repository: bitnami/wordpress
tag: 5.6.0-debian-10-r35
[..]
Затем вы можете переопределить любой из этих параметров в файле формата YAML, а затем передать этот файл во время установки.
$ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
$ helm install -f values.yaml bitnami/wordpress --generate-name
Команды выше создадут пользователя для MariaDB с именем user0
и предоставят
этому пользователю доступ к созданной базе данных user0db
, но использует остальные значения chart-а по умолчанию.
Существует два способа передачи конфигурационных данных во время установки:
--values
(или-f
): Укажите YAML файл с конфигурацией. Это можно сделать несколько раз, и самый правый файл будет иметь приоритет--set
: переопределения в командной строке.
Если используются оба параметра, то значения --set
объединяются в --values
с более высоким
приоритетом. Переопределения, указанные с помощью --set
, сохраняются в ConfigMap.
Значения, которые были --set
, можно просмотреть для данного выпуска с помощью helm get values <release-name>
. Значения --set
, можно очистить, выполнив
helm upgrade
с --reset-values
.
Формат и Ограничения --set
Параметр --set
принимает ноль или более пар имя/значение. В самом простом случае он
используется следующим образом: --set name=value
. Пример в YAML формате:
name: value
Несколько значений разделяются символами,
. --set a=b,c=d
в YAML формате выглядит так:
a: b
c: d
Поддерживаются более сложные выражения. Например, --set outer.inner=value
outer:
inner: value
Списки могут быть предоставлены путем включения значений в {
и }
. Например, --set name={a, b, c}
:
name:
- a
- b
- c
Начиная с Helm 2.5.0, доступ к элементам списка возможен с помощью
синтаксиса индекса массива. Например, --set servers[0].port=80
:
servers:
- port: 80
Можно задать несколько значений. Строка --set servers[0].port=80,servers[0].host=example
становится:
servers:
- port: 80
host: example
Иногда вам нужно использовать специальные символы в --set
. Вы можете использовать
обратную косую черту для экранирования символов; --set name=value1\,value2
:
name: "value1,value2"
Точно так же вы можете экранировать точки, что может пригодиться, когда
chart-ы используют функцию toYaml
для анализа аннотаций, меток и
селекторов узлов. Пример синтаксиса --set nodeSelector."kubernetes\.io/role"=master
:
nodeSelector:
kubernetes.io/role: master
Глубоко вложенные структуры данных может быть трудно выразить используя --set
. Разработчикам чартов рекомендуется учитывать использование --set
при разработке формата файла values.yaml
(читать подробнее про
Values Files).
Дополнительные Методы Установки
helm install
может установить один из нескольких источников:
- Репозиторий chart-ов (как мы видели выше)
- Локальное хранилище chart-ов (
helm install foo foo-0.1.1.tgz
) - Распакованная директория с chart-ами (
helm install foo path/to/foo
) - Полный URL до chart-а (
helm install foo https://example.com/charts/foo-1.2.3.tgz
)
'helm upgrade' и 'helm rollback': Обновление Релиза и Восстановление После Сбоя
Когда выпускается новая версия chart-а или когда вы хотите изменить
конфигурацию своего релиза, вы можете использовать команду helm upgrade
.
Обновление использует существующий релиз и обновляет его в соответствии с предоставленной вами информацией. Из-за того, что chart-ы Kubernetes могут быть большими и сложными, Helm пытается выполнить наименее инвазивное обновление. Он будет обновлять только то, что изменилось с момента последнего релиза.
$ helm upgrade -f panda.yaml happy-panda bitnami/wordpress
В приведенном выше случае релиз happy-panda
обновляется с тем же chart,
но с новым файлом YAML:
mariadb.auth.username: user1
Вы можете использовать helm get values
, чтобы увидеть, заработала ли новая версия.
$ helm get values happy-panda
mariadb:
auth:
username: user1
Команда helm get
- это полезный инструмент для просмотра релизов в кластере.
И как мы видим выше, она показывает, что наши новые значения из panda.yaml
были
развернуты в кластере.
Теперь, если что-то идёт не так, как планировалось во время релиза, легко
откатиться к предыдущему релизу, используя helm rollback [RELEASE] [REVISION]
.
$ helm rollback happy-panda 1
Пример выше возвращает happy-panda к самой первой версии релиза. Версия
релиза - это инкрементная версия. Каждый раз, когда происходит установка, обновление или
откат, номер версии увеличивается на 1. Первый
номер редакции всегда равен 1. Мы можем использовать helm history [RELEASE]
, чтобы увидеть
номера версий для определенного релиза.
Полезные Опции для Установки/Обновлении/Отката
Существует несколько других полезных параметров, которые вы можете указать для настройки
поведения Helm во время установки/обновления/отката. Обратите внимание, что это
не полный список флагов cli. Чтобы увидеть описание всех флагов, просто запустите helm <command> --help
.
--timeout
: Go duration время ожидания выполнения Kubernetes команд. Стандартное время5m0s
.--wait
: Ждёт, пока все Pods не будут в состоянии готовности, Deployments должны иметь минимум (Desired
минусmaxUnavailable
) Pods в состоянии готовности и Services должны иметь IP адрес (и Ingress если естьLoadBalancer
) перед пометкой успешного релиза. Он будет ждать до значения--timeout
. Если тайм - аут достигнут, то релиз будет помечен какFAILED
. Заметка: в сценариях где в Deployment значенияreplicas
равно 1 иmaxUnavailable
не равно 0 как часть стратегии rolling update,--wait
вернёт значение ready, поскольку будет удовлетворено условие минимального количества Pod в состоянии ready.--no-hooks
: Это пропускает запуск hooks для команды--recreate-pods
(доступно только дляupgrade
иrollback
): Этот флаг приведёт к пересозданию всех pods (за исключением pods принадлежащих deployments). (УСТАРЕЛО в Helm 3)
'helm uninstall': Удаление Релиза
Когда потребуется удалить релиз из кластера, используйте команду helm uninstall
:
$ helm uninstall happy-panda
Это приведет к удалению релиза из кластера. Вы можете просмотреть все ваши текущие
развернутые релизы с помощью команды helm list
:
$ helm list
NAME VERSION UPDATED STATUS CHART
inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0
Из примера выше видно, что релиз happy-panda
был удален.
В предыдущих версиях Helm, когда релиз удалялся, запись о его
удалении оставалась. В Helm 3, удаление также удаляет запись об удалении релиза.
Если вы хотите сохранить запись об удалении выпуска, используйте helm uninstall --keep-history
. Использование helm list --uninstalled
покажет только те выпуски, которые
были удалены с флагом --keep-history
.
Флаг helm list --all
покажет вам все релизы,
сохраненные Helm, включая записи для неудачных или удаленных элементов (если был указан параметр --keep-history
):
$ helm list --all
NAME VERSION UPDATED STATUS CHART
happy-panda 2 Wed Sep 28 12:47:54 2016 UNINSTALLED wordpress-10.4.5.6.0
inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0
kindred-angelf 2 Tue Sep 27 16:16:10 2016 UNINSTALLED alpine-0.1.0
Обратите внимание, что поскольку релизы теперь удаляются по умолчанию, откат удаленного ресурса больше невозможен.
'helm repo': Работа с Репозиториями
Helm 3 больше не поставляется со стандартным хранилищем chart-ов. Группа команд helm repo
предоставляет возможности добавления, перечисления и удаления репозиториев.
Узнать о настроенных репозиториях можно с помощью helm repo list
:
$ helm repo list
NAME URL
stable https://charts.helm.sh/stable
mumoshu https://mumoshu.github.io/charts
Новые репозитории могут быть добавлены с помощью helm repo add
:
$ helm repo add dev https://example.com/dev-charts
Поскольку репозитории chart-ов часто меняются, в любой момент вы можете убедиться,
что ваш клиент Helm обновлен, запустив helm repo update
.
Репозитории могут быть удалены с помощью helm repo remove
.
Создание Собственных Chart-ов
Руководство по разработке Chart-ов объясняет, как
создавать свои собственные chart-ы. Но вы можете быстро начать работу с помощью команды helm create
:
$ helm create deis-workflow
Creating deis-workflow
Теперь у вас есть chart в ./deis-workflow
. Вы можете редактировать его и создавать свои собственные
шаблоны.
У Helm есть линтер для проверки корректности chart-а, воспользоваться им можно с помощью helm lint
.
Когда придет время упаковать chart в пакет для распространения вам поможет команда helm package
$ helm package deis-workflow
deis-workflow-0.1.0.tgz
Теперь вы можете с легкостью поставить этот chart в ваш Helm с помощью helm install
$ helm install deis-workflow ./deis-workflow-0.1.0.tgz
...
Упакованные chart-ы могут быть загружены в репозиторий chart-ов. Смотрите документацию по Helm chart репозитории для того, чтобы узнать новые детали.
Заключение
В этой главе рассмотрены основные схемы использования клиента helm
,
включая поиск, установку, обновление и удаление. Он также
охватывает полезные служебные команды, такие как helm status
, helm get
, и helm repo
.
Для получения дополнительной информации об этих командах обратитесь к встроенной справке Helm: helm help
.