Використання Helm
Цей посібник пояснює основи використання Helm для керування пакетами у вашому кластері Kubernetes. Передбачається, що ви вже встановили клієнт Helm.
Якщо вас цікавить лише виконання кількох швидких команд, можливо, ви захочете почати з Посібника зі швидкого старту. У цьому розділі розглядаються особливості команд Helm та пояснюється, як використовувати Helm.
Три головні концепції
Chart — це пакет Helm. Він містить усі необхідні визначення ресурсів для запуску застосунку, інструменту або сервісу всередині кластера Kubernetes. Думайте про це як про еквівалент формули Homebrew, пакету Apt dpkg або файлу Yum RPM для Kubernetes.
Repository — це місце, де можна зібрати та поділитися чартами. Це як архів CPAN для Perl або база пакетів Fedora, але для пакетів Kubernetes.
Release — це екземпляр чарту, що працює в кластері Kubernetes. Один чарт можна встановити в кластер кілька разів. І кожного разу при встановленні створюється новий реліз. Наприклад, чарт MySQL. Якщо ви хочете, щоб у вашому кластері працювали дві бази даних, ви можете встановити цей чарт двічі. Кожен екземпляр матиме свій реліз, а також своє імʼя релізу.
Маючи ці концепції на увазі, можна пояснити Helm так:
Helm встановлює чарти у Kubernetes, створюючи новий реліз для кожного встановлення. А щоб знайти нові чарти, ви можете шукати їх у репозиторіях чартів 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 Платформа для веб-публікацій для створення блогів і ...
https://hub.helm.sh/charts/presslabs/wordpress-... v0.6.3 v0.6.3 Чарт Helm для розгортання сайту WordPress на ...
https://hub.helm.sh/charts/presslabs/wordpress-... v0.7.1 v0.7.1 Оператор WordPress для Helm
Вищенаведений пошук знаходить усі чарти 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: Вт Січ 26 10:27:17 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
** Будь ласка, будьте терплячими, поки чарт розгортається **
Ваш сайт WordPress можна відкрити за наступною DNS-адресою зсередини вашого кластера:
happy-panda-wordpress.default.svc.cluster.local (порт 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 "URL WordPress: http://$SERVICE_IP/"
echo "Адмінка WordPress: http://$SERVICE_IP/admin"
2. Відкрийте оглядач та отримайте доступ до WordPress, використовуючи отриманий URL.
3. Увійдіть за допомогою наступних облікових даних:
echo Логін: user
echo Пароль: $(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
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 (порт 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: 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
.
Оновлення бере поточний реліз і оновлює його відповідно до інформації, що міститься в чарті. Ви можете оновити чарт, який було встановлено зі сховища, або чарт, який знаходиться на вашому локальному диску.
$ 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]
, щоб побачити номери версій для певного релізу.
Корисні опції для Install/Upgrade/Rollback
Є кілька інших корисних опцій, які можна вказати для налаштування поведінки Helm під час встановлення/оновлення/відкату. Зауважте, що це не повний список CLI-прапорців. Щоб побачити опис усіх прапорців, просто запустіть helm <command> --help
.
--timeout
: Значення Go duration, яке визначає, скільки чекати на завершення команд Kubernetes. Стандартно5m0s
.--wait
: Очікує, доки всі Podʼи не перейдуть у стан готовності, PVC не будуть повʼязані, а Deployment не матиме мінімальну кількість Podʼів у стані готовності (Desired
мінусmaxUnavailable
), а також не отримає IP-адресу (і Ingress, якщо цеLoadBalancer
) перед тим, як визнати реліз успішним. Чекання триватиме стільки часу, скільки вказано в опції--timeout
. Якщо тайм-аут досягнуто, реліз буде позначено якFAILED
. Примітка: У ситуаціях, коли Deployment маєreplicas
значення 1, аmaxUnavailable
не встановлено в 0 як частина стратегії rolling update,--wait
поверне готовність, коли задоволено мінімальну кількість Podʼів у готовому стані.--no-hooks
: Пропускає запуск хук для команди.--recreate-pods
(доступно лише дляupgrade
таrollback
): Цей прапорець викличе повторне створення всіх Podʼів (за винятком Podʼів, що належать до Deployment). (Застаріле в 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 більше не постачається зі стандартним репозиторієм чартів. Група команд 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
.
У наступному розділі ми розглянемо процес створення чартів.