Введение
Helm – это менеджер пакетов для Kubernetes, который позволяет разработчикам и операторам более легко настраивать и разворачивать приложения в кластерах Kubernetes.
Пакеты Helm называются чартами, и они содержат шаблоны определений ресурсов, которые разворачивают и настраивают указанные приложения с минимальными усилиями со стороны пользователя. С помощью шаблонов вы можете управлять чартом, его настройками и поведением, передавая определения переменных, не модифицируя сам чарт. Пользовательские определения ресурсов, а также изменения уже развернутых определений, Helm управляет автоматически. Развернутый чарт, с возможными настройками, называется релизом.
В этом руководстве вы настроите Helm 3 и узнаете, как устанавливать, обновлять, откатывать и управлять чартами и релизами. Вы также узнаете, как создавать и упаковывать собственные чарты, а также настраивать хранилища чартов, которые содержат чарты, которые вы можете установить немедленно.
Предварительные требования
-
Кластер Kubernetes с включенным управлением доступом на основе ролей (RBAC). Для дополнительной информации о релизах вы можете проверить страницу релизов Helm.
-
Командный инструмент
kubectl
установлен на вашем локальном компьютере и настроен для подключения к вашему кластеру. Более подробную информацию о установкеkubectl
можно найти в официальной документации.Вы можете проверить свою связь с помощью следующей команды:
Если вы не получите ошибок, то подключены к кластеру. Если у вас есть доступ к нескольким кластерам с помощью
kubectl
, убедитесь, что выбран правильный контекст кластера, запустив:Вывод покажет доступные конфигурации:
ВыводТЕКУЩИЙ НАЗВАНИЕ КЛАСТЕР AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminЗдесь звездочка (
*
) указывает, что мы подключены к кластеруdo-fra1-helm3-example
. Чтобы переключиться на другие кластеры, выполните:
Когда вы подключены к правильному кластеру, переходите к Шагу 1 для начала установки Helm.
Шаг 1 — Установка Helm 3
В этом разделе вы установите Helm 3, используя предоставленный официальный скрипт оболочки.
Начните с перехода в /tmp
, где вы сохраните скрипт установки, выполнив:
Загрузите скрипт следующей командой:
Вы можете изучить get_helm.sh
в вашем текстовом редакторе, чтобы убедиться, что он безопасен.
Сделайте его исполняемым, установив разрешения на следующие:
Наконец, запустите его для установки Helm 3:
Вы получите вывод, аналогичный следующему:
OutputDownloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
Вы установили Helm 3 на свой компьютер. Теперь вы узнаете о хранилищах диаграмм и о том, как их использовать.
Шаг 2 — Настройка хранилищ диаграмм
Диаграммы Helm хранятся в хранилищах диаграмм, которые может использовать любой хостинг. По умолчанию Helm 3 не предварительно настроен ни с одним репозиторием. В предыдущих версиях Helm включал центральный отредактированный репозиторий диаграмм; однако дизайн Helm 3 специально развивался так, чтобы разработчики диаграмм могли управлять собственным репозиторием, что обеспечивает большую свободу и более быстрые выпуски. Это означает, что для каждой диаграммы, которую вы хотите использовать, вам нужно убедиться, что вы добавили хостинг-репозиторий в вашу установку Helm.
Чтобы помочь вам найти подходящий репозиторий, вы можете использовать ArtifactHub.io, открытый веб-сайт, управляемый CNCF, который каталогизирует диаграммы Helm и их репозитории. Он также отслеживает популярные и полезные диаграммы, которые используют другие проекты CNCF, поэтому отличается от репозитория stable
, из которого работали предыдущие версии Helm. Для общих проектов, таких как входы Nginx или инструменты мониторинга, это отличный источник.
Вы можете искать диаграмму, которую хотели бы установить, через домашнюю страницу. Поиск диаграммы nginx
покажет все индексированные диаграммы, которые с ней связаны.
Вы установите общественную версию, управляемую командой Kubernetes. Ищите ingress-nginx
, чтобы найти ее в результатах. Выберите ее, чтобы получить доступ к ее странице.
Каждая диаграмма должна иметь описание, описывающее, что она делает, вместе с командами для добавления ее репозитория в вашу установку и установки диаграммы. Если этого нет, вы все равно можете получить необходимые команды, нажав на кнопку INSTALL справа на странице.
Вы можете щелкнуть синюю кнопку рядом с командой, чтобы скопировать ее. Сделайте это для первой команды и выполните ее:
Чтобы добавить репозиторий в Helm, вы запускаете helm repo add
. Параметры, которые он принимает, – это имя репозитория и его местоположение.
Вывод будет:
Output"ingress-nginx" has been added to your repositories
При добавлении нового репозитория вам нужно сообщить Helm, что он содержит, запустив:
Вы получите следующий вывод, показывающий, что обновление прошло успешно:
OutputHang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈
На этом этапе вы узнали о ArtifactHub и то, что он предлагает. Вы также добавили новый репозиторий в свою установку Helm. В следующем шаге вы установите диаграмму Helm.
Шаг 3 — Установка диаграммы Helm
В предыдущем разделе вы добавили репозиторий для диаграммы ingress-nginx
. Теперь вы установите ее на свой кластер.
Каждая диаграмма имеет конфигурационные переменные, которые вы можете установить, чтобы изменить ее поведение. Эти переменные хранятся в файле, называемом values.yaml
, который является частью диаграммы. Если вы не загрузили диаграмму на свой компьютер, вам придется выполнить следующую команду, чтобы просмотреть ее:
Чтобы показать доступные переменные для ingress-nginx
, замените chart_name
:
Вывод будет длинным и покажет содержимое values.yaml
для ingress-nginx
.
Для установки диаграммы вы можете использовать helm install
:
A release is a deployed instance of the chart, and here you’re calling it ingress-nginx
.
Эта команда установит диаграмму в ваш кластер со значениями переменных по умолчанию. Если вы хотите изменить некоторые из них, вы можете передать новые значения переменных, используя --set
:
Вы можете повторить использование --set
для стольких переменных, сколько вам нужно. Поскольку мы сейчас не будем настраивать их, установите диаграмму так, как есть, выполнив:
Вывод будет аналогичным следующему:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...
Обратите внимание, что NAME
соответствует имени релиза, которое вы указали. Helm также перечисляет общую информацию, такую как статус релиза и пространство имен, в котором он развернут. Раздел NOTES
различается для разных диаграмм и обычно содержит руководство по быстрому старту или предупреждает о некоторых распространенных проблемах при использовании ресурсов диаграммы. Здесь отмечается, что создается балансировщик нагрузки и это может занять некоторое время.
Для проверки развернутых диаграмм используйте helm list
:
Вы увидите, что ingress-nginx
– единственная развернутая диаграмма на данный момент:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Вы можете найти услуги, предоставляемые в вашем кластере, запустив:
Вывод будет похож на следующий:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m
Теперь, когда вы развернули релиз в вашем кластере, вы сможете изменить его конфигурацию, пока он развернут.
Шаг 4 — Обновление Релиза
После того как релиз развернут, вам не нужно полностью разрушать его и заново развертывать, когда вам нужно изменить его конфигурацию. Вы можете использовать команду helm upgrade
для обновления релиза с новой версией чарта или для установки новых настроек.
Чарт ingress-nginx
предоставляет переменную controller.replicaCount
, которая контролирует количество развернутых подов контроллера. По умолчанию она установлена на один, что вы можете проверить, перечислив доступные поды:
Вы обнаружите, что там только один:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
Если вы хотите, чтобы их было больше для обеспечения избыточности (например, три), вы можете обновить
релиз и установить переменную в 3
, запустив:
Вы также передаете --reuse-values
, что указывает Helm использовать ваши изменения поверх развернутого релиза, сохраняя предыдущую конфигурацию.
В выводе Helm увеличит ревизию, чтобы указать, что релиз был обновлен:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
Вы можете перечислить доступные поды, запустив:
Вы обнаружите, что перечислено три пода, вместо одного:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s
Затем вы откатите изменения и удалите все выпуски.
Шаг 5 — Откат и удаление выпуска
Когда вы обновляете
выпуск, его номер ревизии увеличивается. Внутренне Helm хранит все ревизии выпуска, позволяя вам вернуться к предыдущей ревизии при необходимости.
Чтобы вернуть количество подов обратно к одному, вы можете снова выполнить helm upgrade
и вручную установить количество, потому что это небольшое изменение. Однако при работе с большими чартами с множеством переменных вручную откатывать непосильно и должно быть автоматизировано.
Чтобы откатить выпуск, используйте helm rollback
:
Вы можете использовать его, чтобы откатить изменения, сделанные в ingress-nginx
, откатившись к ревизии 1
:
Вы получите следующий вывод, указывающий, что действие выполнено успешно:
OutputRollback was a success! Happy Helming!
Вы можете проверить текущую ревизию, перечислив выпуски:
Вы увидите, что ревизия теперь 3
, а не 1
:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Helm считает каждое изменение, включая откаты, как новую ревизию выпуска. Вы можете убедиться, что ревизия 3
равна первой, проверив количество развернутых подов, запустив:
Вы увидите, что их всего один:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m
Чтобы удалить выпуск и все его ревизии, вы можете использовать helm delete
:
Поскольку вам больше не понадобится, удалите ingress-nginx
, выполнив следующую команду:
Результат будет:
Outputrelease "ingress-nginx" uninstalled
Вы можете перечислить релизы, чтобы проверить, что их нет:
Таблица вывода не будет содержать строк:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
Теперь, когда релиз удален, вы можете повторно использовать его имя для будущих развертываний.
Шаг 6 — (Необязательно) Создание пользовательских графиков
На этом необязательном этапе вы узнаете, как создать пользовательский график, куда поместить ваши определения ресурсов и как упаковать его для дальнейшего распространения.
Вы создадите новый график под названием example-chart
. Запустите следующую команду, чтобы создать его:
Это создаст новый каталог под названием example-chart
со следующими файлами и структурой:
charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml
Определения ресурсов, которые ваш график установит на целевых кластерах, находятся в каталоге templates
. Созданные Helm по умолчанию в качестве отправной точки развертывают контроллер входящего потока Nginx. Несмотря на то, что их расширение файла – YAML, они используют синтаксис шаблонов Go для сохранения настройки с помощью выделенных переменных, которые можно передавать. Вы можете проверить, показав содержимое service.yaml
, выполнив:
Вы увидите, что в нем есть директивы шаблонизации для генерации значений, окруженных двойными фигурными скобками:
Переменные, на которые ссылаются пользователи и которые определены в values.yaml
, доступны для пользователя. Текст NOTES
, который Helm показывает после развертывания, сохраняется в NOTES.txt
и также является шаблонизированным. Метаданные диаграммы, такие как имя, версия и версия развертываемого программного обеспечения, указываются в Chart.yaml
:
Чтобы проверить, что Helm развернет, вы можете передать --dry-run
и --debug
в helm install
, указывая на директорию диаграммы:
Вывод будет длинным и содержать все окончательные определения ресурсов, которые будут применены к вашему кластеру. Пока вы работаете над своей диаграммой, вы можете использовать helm upgrade
, чтобы загружать новые версии в Kubernetes.
Когда придет время поделиться своей готовой диаграммой, вы можете упаковать ее для дистрибуции, запустив:
Вывод будет:
OutputSuccessfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
Упакованную диаграмму можно установить так же, как и те, что добавлены из репозиториев:
На этом шаге вы создали пользовательскую диаграмму и развернули ее. Вы также упаковали ее и узнали о ее структуре.
Заключение
Теперь вы знаете, как использовать Helm для установки и обновления программного обеспечения, развернутого на вашем кластере Kubernetes. Вы добавили репозитории диаграмм и узнали, почему они важны и как ArtifactHub может помочь вам найти их. Вы также создали новую пользовательскую диаграмму и узнали о версиях выпусков и о том, как откатиться, если это необходимо.
Для получения дополнительной информации о создании пользовательских диаграмм посетите официальное руководство.