Введение
Helm — это менеджер пакетов для Kubernetes, который позволяет разработчикам и операторам легко настраивать и развертывать приложения в кластерах Kubernetes.
Пакеты Helm называются чартами и содержат шаблоны определений ресурсов, которые позволяют разворачивать и настраивать приложения с минимальными усилиями пользователя. С помощью шаблонов можно управлять чартом, его настройками и поведением, передавая определения переменных, не изменяя сам чарт. Helm автоматически управляет настраиваемыми определениями ресурсов, а также изменениями в предварительно развёрнутых определениях. Развёрнутый чарт с возможными настройками называется выпуском.
В этом руководстве вы настроите Helm 3 и узнаете, как устанавливать, обновлять, восстанавливать и управлять диаграммами и версиями. Вы также научитесь создавать и упаковывать собственные диаграммы, а также настраивать репозитории диаграмм, где будут размещаться диаграммы, которые можно будет установить немедленно.
Предпосылки
- Кластер Kubernetes с включенным управлением доступом на основе ролей (RBAC).
- Инструмент командной строки kubectl установлен на вашем локальном компьютере и настроен для подключения к вашему кластеру.
- Вы можете проверить свое соединение с помощью следующей команды:
kubectl cluster-info- Если ошибок нет, вы подключены к кластеру. Если вы обращаетесь к нескольким кластерам с помощью kubectl, убедитесь, что вы выбрали правильный контекст кластера, выполнив следующую команду:
kubectl config get-contexts- В выводе перечислены доступные настройки:
Output CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin- Здесь звёздочка (*) означает, что мы подключены к кластеру do-fra1-helm3-example. Чтобы переключить кластер, выполните:
kubectl config use-context context-name- После подключения к нужному кластеру перейдите к шагу 1, чтобы начать установку Helm.
Шаг 1 — Установка Helm 3
В этом разделе вы установите Helm 3, используя официально предоставленный скрипт оболочки.
Начните с перехода в /tmp, где вы можете найти скрипт установки, выполнив:
cd /tmpЗагрузите скрипт с помощью следующей команды:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3Вы можете проверить get_helm.sh в текстовом редакторе, чтобы убедиться в его безопасности.
Сделайте его исполняемым, установив следующие разрешения:
chmod u+x get_helm.shНаконец, запустите его, чтобы установить Helm 3:
./get_helm.shВы получите вывод, подобный следующему:
Output
Downloading 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, поэтому он отличается от стабильного репозитория, с которым работали предыдущие версии Helm. Это отличный ресурс для распространённых проектов, таких как логи Nginx или инструменты мониторинга.
Вы можете найти нужный чарт на главной странице. Поиск Nginx покажет все проиндексированные чарты, связанные с ним.
Вы установите версию сообщества, управляемую командой Kubernetes. Найдите ingress-nginx в результатах поиска. Выберите его, чтобы открыть страницу.

Каждый чарт должен иметь подробное описание задачи, а также инструкции по добавлению репозитория в установку чарта и его установке. В противном случае вы можете получить необходимые инструкции, нажав кнопку «УСТАНОВИТЬ» в правой части страницы.
Вы можете нажать синюю кнопку рядом с командой, чтобы скопировать её. Для первой команды выполните следующее и выполните её:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginxЧтобы добавить репозиторий в Helm, выполните команду helm repo add . В качестве параметров принимаются имя репозитория и его расположение.
Результат будет следующим:
Output
"ingress-nginx" has been added to your repositoriesПри добавлении нового репозитория необходимо сообщить Helm, что он содержит, выполнив команду:
helm repo updateВы получите следующий вывод, указывающий на то, что обновление прошло успешно:
Output
Hang 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 Chart
В предыдущем разделе вы добавили репозиторий ingress-nginx graph. Теперь вам нужно установить его на свой кластер.
У каждой диаграммы есть переменные конфигурации, которые можно задать для изменения её поведения. Эти переменные хранятся в файле values.yaml, который является частью диаграммы. Если вы не загрузили диаграмму на своё устройство, для её просмотра вам потребуется выполнить следующую команду:
helm show values chart_nameЧтобы отобразить доступные переменные для ingress-nginx, замените chart_name:
helm show values ingress-nginx/ingress-nginxВывод будет длинным и покажет содержимое файла values.yaml для ingress-nginx.
Для установки диаграммы вы можете использовать команду install:
helm install release_name repository/chart_nameРелиз — это развернутый экземпляр графа, здесь он называется ingress-nginx.
Эта команда устанавливает диаграмму со значениями по умолчанию для переменных в вашем кластере. Если вы хотите изменить некоторые из них, вы можете передать новые значения переменных с помощью параметра –set:
helm install ingress-nginx/ingress-nginx --set variable_name=variable_value
Вы можете повторять команду –set для любого количества переменных. Поскольку мы не будем настраивать её сейчас, установите её как есть, выполнив:
helm install ingress-nginx ingress-nginx/ingress-nginxВывод будет примерно следующим:
Output
NAME: 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 — единственный развернутый на данный момент граф:
Output
NAME 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Вы можете найти службы, имеющиеся в его кластере, выполнив следующее:
kubectl get servicesВывод будет примерно таким:
Output
NAME 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 — Обновите версию
После запуска версии вам не придётся её удалять и создавать заново, если потребуется изменить её конфигурацию. Вы можете использовать команду «Upgrade» для обновления версии с использованием новой версии диаграммы или для установки новых настроек.
На диаграмме ingress-nginx показана переменная controller.replicaCount, которая управляет количеством развёрнутых подов контроллера. По умолчанию она равна единице, что можно проверить, выведя список доступных подов:
kubectl get podsВы заметите, что есть только один:
Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12mЕсли вы хотите развернуть больше экземпляров для обеспечения избыточности (например, три), вы можете обновить версию и установить переменную на 3, выполнив:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-valuesВы также передаете --reuse-values , который указывает Helm поместить ваши изменения поверх развернутой версии и сохранить предыдущую конфигурацию.
В выходных данных Helm вносит исправления, указывающие на то, что версия была обновлена:
Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...Вы можете получить список доступных модулей, выполнив следующую команду:
kubectl get podsВместо одного вы увидите в списке три модуля:
Output
NAME 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 rollback release_name release_revisionС его помощью можно отменить изменения, внесенные в ingress-nginx, вернувшись к версии 1:
helm rollback ingress-nginx 1Вы получите следующий вывод, указывающий на то, что операция прошла успешно:
Output
Rollback was a success! Happy Helming!Текущую версию можно проверить, перечислив версии:
helm listВы заметите, что теперь номер редакции — 3, а не 1:
Output
NAME 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.0Helm рассматривает каждое изменение, включая откат, как новую версию релиза. Проверяя количество развёрнутых модулей, выполните:
kubectl get podsВы заметите, что есть только один:
Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41mЧтобы удалить версию и все ее редакции, можно использовать команду helm delete:
helm delete release_nameПоскольку он вам больше не понадобится, удалите ingress-nginx, выполнив следующую команду:
helm delete ingress-nginxРезультат будет следующим:
Output
release "ingress-nginx" uninstalledВы можете составить список версий, чтобы убедиться в отсутствии таковых:
helm listВ выходной таблице не будет строк:
Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
Теперь, когда версия удалена, вы можете повторно использовать ее имя для будущих развертываний.
Шаг 6 — (Необязательно) Создание пользовательских диаграмм
На этом необязательном этапе вы узнаете, как создать собственную диаграмму, где разместить определения ресурсов и как упаковать ее для дальнейшего распространения.
Вам нужно создать новую диаграмму с именем sample-chart. Для этого выполните следующую команду:
helm create 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Определения ресурсов, которые ваш граф устанавливает в целевых кластерах, находятся в каталоге шаблонов. Определения по умолчанию, созданные Helm в качестве отправной точки, разворачивают контроллер Ingress Nginx. Несмотря на расширение файла YAML, они используют синтаксис форматирования Go, что позволяет настраивать их с помощью открытых переменных, которые вы можете передавать. Вы можете просмотреть содержимое файла service.yaml, выполнив команду:
cat example-chart/templates/service.yamlВы заметите, что в нем есть инструкции по форматированию для создания значений, заключенных в двойные скобки:
OutputapiVersion: v1
kind: Service
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "mychart.selectorLabels" . | nindent 4 }}Ссылочные переменные доступны пользователю и определены в файле values.yaml. Текст HELM NOTES сохраняется в файле NOTES.txt после развертывания и также форматируется. Метаданные чарта, такие как название, версия и версия развертываемого программного обеспечения, указываются в файле Chart.yaml:
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"Чтобы проверить, что именно развертывает Helm, вы можете передать --dry-run и --debug команде helm install, указав каталог чарта:
helm install example-chart --dry-run --debug ./example-chartВывод будет обширным и будет включать все окончательные определения ресурсов, которые будут применены к вашему кластеру. Пока вы работаете с графом, вы можете использовать команду upgrade для отправки новых версий в Kubernetes.
Когда вы закончите делиться диаграммой, вы можете сделать ее доступной для распространения, выполнив:
helm package ./example-chartРезультат будет следующим:
Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgzУпакованную диаграмму можно установить так же, как и в добавленных репозиториях:
helm install example-chart example-chart-0.1.0.tgzНа этом этапе вы создали и развернули пользовательскую диаграмму. Вы также упаковали её и ознакомились с её структурой.
Результат
Теперь вы знаете, как использовать Helm для установки и обновления программного обеспечения, развёрнутого в кластере Kubernetes. Вы добавили репозитории чартов и узнали, почему они важны и как ArtifactHub может помочь вам их найти. Вы также создали новый настраиваемый чарт и узнали об изменениях релиза и о том, как при необходимости вернуться к предыдущей версии.












