Використання Helm
Цей посібник пояснює основи використання Helm для керування пакунками у вашому кластері Kubernetes. Передбачається, що ви вже встановили клієнт Helm.
Якщо вас цікавить лише виконання кількох швидких команд, можливо, ви захочете почати з Посібника зі швидкого старту. У цьому розділі розглядаються особливості команд Helm та пояснюється, як використовувати Helm. Цей посібник передбачає, що ви знайомі з чартами, репозиторіями та релізами. Для ознайомлення з цими компонентами див. Вступ до Helm.
'helm search': Пошук чартів
Helm постачається з потужною командою пошуку. Її можна використовувати для пошуку двох типів джерел:
helm search hubздійснює пошук у Artifact Hub, який містить чарти helm із десятків різних репозиторіїв.helm search repoздійснює пошук у репозиторіях, які ви додали до свого локального клієнта helm (за допомогоюhelm repo add). Цей пошук здійснюється за локальними даними, і підключення до публічної мережі не потрібно.
Ви можете знайти загальнодоступні чарти, виконавши команду 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 ...
Вищенаведений пошук знаходить усі чарти wordpress в Artifact Hub.
Без фільтрації helm search hub показує всі доступні чарти.
helm search hub показує URL-адресу розташування на artifacthub.io, але не власне репозиторій Helm. helm search hub --list-repo-url показує фактичну URL-адресу репозиторію Helm, що може бути корисним, коли ви хочете додати новий репозиторій: helm repo add [NAME] [URL].
За допомогою helm search repo ви можете знайти імена чартів у репозиторіях, які ви вже додали:
$ 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 використовує алгоритм нечіткого порівняння рядків, тому можна вводити частини слів або фраз:
$ 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. У найпростішому випадку вона приймає два аргументи: потрібне вам імʼя релізу та імʼя чарту, який ви хочете встановити.
$ 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:
** Будь ласка, будьте терплячими, поки чарт розгортається **
Доступ до вашого сайту WordPress можна отримати у вашому кластері за допомогою наступного імені DNS:
happy-panda-wordpress.default.svc.cluster.local (port 80)
Щоб отримати доступ до вашого сайту WordPress з-за меж кластера, виконайте наступні кроки:
1. Отримайте URL WordPress, виконавши наступні команди:
ПРИМІТКА: Може знадобитися кілька хвилин для отримання IP-адреси LoadBalancer.
Слідкуйте за статусом за допомогою: '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. Відкрийте оглядач та отримайте доступ до WordPress, використовуючи отриманий URL.
3. Увійдіть за допомогою наступних облікових даних:
echo Username: user
echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
☝️ Тут і далі по тексту переклад українською виводу в терміналі надано для зручності сприйняття. Скоріше за все він буде відсутній в реальному застосуванні.
Тепер чарт wordpress встановлено. Зверніть увагу, що встановлення чарту створює новий обʼєкт реліз. Реліз вище називається happy-panda. (Якщо ви хочете, щоб Helm згенерував імʼя для вас, не вказуйте імʼя релізу і використовуйте --generate-name.)
Під час встановлення клієнт helm надасть корисну інформацію про те, які ресурси були створені, який стан релізу, і чи є додаткові кроки конфігурації, які ви можете або повинні виконати.
Helm встановлює ресурси в наступному порядку:
- Namespace
- NetworkPolicy
- ResourceQuota
- LimitRange
- PodSecurityPolicy
- PodDisruptionBudget
- ServiceAccount
- Secret
- SecretList
- ConfigMap
- StorageClass
- PersistentVolume
- PersistentVolumeClaim
- CustomResourceDefinition
- ClusterRole
- ClusterRoleList
- ClusterRoleBinding
- ClusterRoleBindingList
- Role
- RoleList
- RoleBinding
- RoleBindingList
- Service
- DaemonSet
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- StatefulSet
- Job
- CronJob
- Ingress
- APIService
- MutatingWebhookConfiguration
- ValidatingWebhookConfiguration
Helm не чекає, поки всі ресурси будуть запущені, перш ніж завершити роботу. Багато чартів потребують Docker-образів розміром понад 600MB, і їхнє встановлення в кластер може тривати певний час.
Щоб відстежувати стан релізу або повторно прочитати конфігураційну інформацію, ви можете використати команду 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:
** Будь ласка, будьте терплячими, поки чарт розгортається **
Доступ до вашого сайту WordPress можна отримати у вашому кластері за допомогою наступного імені DNS:
happy-panda-wordpress.default.svc.cluster.local (port 80)
Щоб отримати доступ до вашого сайту WordPress з-за меж кластера, виконайте наступні кроки:
1. Отримайте URL WordPress, виконавши наступні команди:
ПРИМІТКА: Може знадобитися кілька хвилин для отримання IP-адреси LoadBalancer.
Слідкуйте за статусом за допомогою: '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. Відкрийте оглядач та отримайте доступ до WordPress, використовуючи отриманий URL.
3. Увійдіть за допомогою наступних облікових даних:
echo Username: user
echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Вищенаведене показує поточний стан вашого релізу.
Налаштування чарту перед встановленням
Встановлення у спосіб, який ми розглянули, використовуватиме лише стандартні параметри конфігурації для цього чарту. У багатьох випадках вам захочеться налаштувати чарт для використання ваших налаштувань.
Щоб побачити, які параметри можна налаштувати в чарті, використовуйте команду helm show values:
$ helm show values bitnami/wordpress
## Глобальні параметри образу Docker
## Зверніть увагу, що це замінить параметри образу, включаючи залежності, налаштовані для використання глобальних значень.
## Наразі доступні такі глобальні параметри образу Docker: imageRegistry та imagePullSecrets.
##
# global:
# imageRegistry: myRegistryName
# imagePullSecrets:
# - myRegistryKeySecretName
# storageClass: myStorageClass
## Версія образу Bitnami WordPress
## 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, але всі інші параметри цього чарту залишаться стандартними.
Існує два способи передати дані конфігурації під час встановлення:
--values(або-f): Вказати YAML-файл із перевизначеннями. Їх можна вказувати кілька разів, причому файл, що стоїть праворуч, матиме пріоритет--set: Вказати перевизначення в командному рядку.
Якщо обидва варіанти використовуються, значення --set зливаються з --values з вищим пріоритетом. Перевизначення, зазначені за допомогою --set, зберігаються у Secret. Значення, що були встановлені через --set, можна переглянути для конкретного релізу за допомогою команди helm get values <release-name>. Значення, встановлені за допомогою --set, можна скинути, виконавши helm upgrade з параметром --reset-values.
Формат і обмеження параметра --set
Опція --set приймає нуль або більше пар імʼя/значення. У найпростішому випадку вона використовується так: --set name=value. Еквівалент у YAML виглядає так:
name: value
Кілька значень розділяються символами ,. Отже, --set a=b,c=d стає:
a: b
c: d
Підтримуються складніші вирази. Наприклад, --set outer.inner=value перетворюється на наступне:
outer:
inner: value
Списки можна записати, включивши значення в { і }. Наприклад, --set name={a, b, c} перетворюється на:
name:
- a
- b
- c
Деякі пари імʼя/ключ можна встановити як null або як порожній масив []. Наприклад, --set name=[],a=null перетворює:
name:
- a
- b
- c
a: b
на
name: []
a: null
Починаючи з 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"
Аналогічно, можна екранувати послідовності крапок, що може знадобитися, коли чарти використовують функцію toYaml для аналізу анотацій, міток і вибору вузлів. Синтаксис для --set nodeSelector."kubernetes\.io/role"=masterвиглядає так:
nodeSelector:
kubernetes.io/role: master
Глибоко вкладені структури даних може бути важко вказати використовуючи --set. Розробникам чартів рекомендується враховувати використання --set при розробці формату файлу values.yaml (докладніше про Файли значень).
Інші методи встановлення
Команда helm install може встановлювати чарт із кількох джерел:
- Репозиторій чартів (як ми бачили вище)
- Локальний архів чарту (
helm install foo foo-0.1.1.tgz) - Тека із розпакованим чартом (
helm install foo path/to/foo) - Повний URL (
helm install foo https://example.com/charts/foo-1.2.3.tgz)
'helm upgrade' та 'helm rollback': Оновлення релізу та відновлення у разі невдачі
Коли виходить нова версія чарту або коли ви хочете змінити конфігурацію вашого релізу, ви можете скористатися командою helm upgrade.
Оновлення бере поточний реліз і оновлює його відповідно до інформації, що міститься в чарті. Оскільки чарти Kubernetes можуть бути великими та складними, Helm намагається виконати найменш інвазивне оновлення. Він оновлюватиме лише ті елементи, які змінилися з моменту останнього релізу.
$ helm upgrade -f panda.yaml happy-panda bitnami/wordpress
У наведеному випадку реліз happy-panda оновлюється з використанням того ж чарту, але з новим 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], щоб побачити номери версій для певного релізу.
Якщо реліз створено внаслідок відкату, передайте --show-rollback-revision команді helm history, щоб додати до виводу стовпець ROLLBACK. У ньому показано цільову ревізію кожного відкату.
Корисні опції для Install/Upgrade/Rollback
Є кілька інших корисних опцій, які можна вказати для налаштування поведінки Helm під час встановлення/оновлення/відкату. Зауважте, що це не повний список CLI-прапорців. Щоб побачити опис усіх прапорців, просто запустіть helm <command> --help.
--timeout: Значення Go duration, яке визначає, скільки чекати на завершення команд Kubernetes. Стандартно5m0s.--wait: Очікує, доки всі Podʼи не перейдуть у стан готовності, PVC не будуть повʼязані, а Deployment не матиме мінімальну кількість Podʼів у стані готовності (DesiredмінусmaxUnavailable), а Services отримає IP-адресу (і Ingress, якщо цеLoadBalancer) перед тим, як визнати реліз успішним. Чекання триватиме стільки часу, скільки вказано в опції--timeout. Якщо тайм-аут досягнуто, реліз буде позначено якFAILED. Примітка: У ситуаціях, коли Deployment має вreplicasзначення 1, аmaxUnavailableне встановлено в 0 як частина стратегії rolling update,--waitповерне готовність, коли задоволено мінімальну кількість Podʼів у готовому стані.--no-hooks: Пропускає запуск хуків для команди.
'helm uninstall': Видалення релізу
Коли настає час видалити реліз з кластера, використовуйте команду helm uninstall:
$ helm uninstall happy-panda
Це видалить реліз з кластера. Ви можете переглянути всі поточні розгорнуті релізи за допомогою команди helm list --deployed:
$ helm list --deployed
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
inky-cat default 1 2026-09-28 12:59:46.550369 +0000 UTC deployed alpine-0.1.0 3.3
З виводу вище ми можемо побачити, що реліз happy-panda було видалено.
У попередніх версіях Helm, коли реліз видалявся, запис про його видалення залишався. У Helm 3 видалення також видаляє запис про реліз. Якщо ви хочете зберегти запис про видалений реліз, використовуйте helm uninstall --keep-history. Використання helm list --uninstalled покаже лише ті релізи, які були видалені з прапорцем --keep-history.
Без прапорців helm list показує всі записи релізів, які зберіг Helm, у будь-якому стані, включно із записами про невдалі або видалені релізи (якщо вказано --keep-history):
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
happy-panda default 2 2026-09-28 12:47:54.395651 +0000 UTC uninstalled wordpress-10.4.5 5.7.1
inky-cat default 1 2026-09-28 12:59:46.550369 +0000 UTC deployed alpine-0.1.0 3.3
kindred-angelf default 2 2026-09-27 16:16:10.766486 +0000 UTC uninstalled alpine-0.1.0 3.3
Зверніть увагу, що через те, що релізи тепер стандартно видаляються, більше неможливо зробити відкат до видаленого ресурсу.
'helm repo': Робота з репозиторіями
Helm 3 більше не постачається зі стандартним репозиторієм чартів. Група команд 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 [NAME] [URL]:
$ helm repo add dev https://example.com/dev-charts
Оскільки репозиторії чартів часто змінюються, у будь-який момент ви можете переконатися, що ваш клієнт Helm актуальний, запустивши helm repo update.
Репозиторії можна видалити за допомогою helm repo remove.
Створення власних чартів
Посібник з розробки чартів пояснює, як створювати власні чарти. Але ви можете швидко розпочати, використовуючи команду helm create:
$ helm create deis-workflow
Creating deis-workflow
Тепер у вас є чарт в теці ./deis-workflow. Ви можете редагувати його та створювати власні шаблони.
Коли ви редагуєте свій чарт, ви можете перевірити, чи він добре сформований, запустивши команду helm lint.
Коли настане час упакувати чарт для розповсюдження, ви можете скористатися командою helm package:
$ helm package deis-workflow
deis-workflow-0.1.0.tgz
І цей чарт тепер може бути легко встановлена за допомогою helm install:
$ helm install deis-workflow ./deis-workflow-0.1.0.tgz
...
Упаковані чарти можуть бути завантажені в репозиторії чартів. Для отримання додаткової інформації дивіться документацію про репозиторії чартів Helm.
Підсумки
У цьому розділі було розглянуто основні шаблони використання клієнта helm, включаючи пошук, встановлення, оновлення та видалення. Також було розглянуто корисні утиліти, такі як helm status, helm get і helm repo.
Для отримання додаткової інформації про ці команди перегляньте вбудовану довідку Helm: helm help.
У наступному розділі ми розглянемо процес створення чартів.