Модуль 2.2: Пакетний менеджер Helm
Складність:
[MEDIUM]— необхідний інструмент, доданий до CKAD 2025Час на виконання: 45–55 хвилин
Передумови: Модуль 2.1 (Деплойменти), розуміння YAML-шаблонів
Що ви зможете робити
Розділ «Що ви зможете робити»Після завершення цього модуля ви зможете:
- Розгорнути застосунки за допомогою
helm installз власними значеннями та вказанням простору імен - Створити перевизначення значень для кастомізації поведінки чарту для різних середовищ
- Діагностувати невдалі релізи Helm за допомогою
helm status,helm historyта операцій відкату - Пояснити структуру чарту Helm, включно з шаблонами, значеннями та життєвим циклом релізу
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Helm — це пакетний менеджер для Kubernetes. Замість керування десятками YAML-файлів Helm пакує їх у «чарти», які можна встановлювати, оновлювати та відкочувати як єдине ціле. У 2025 році іспит CKAD додав Helm як обов’язкову навичку.
Ви зіткнетесь із такими питаннями:
- Встановити чарт із репозиторію
- Оновити реліз з новими значеннями
- Відкотити невдалий реліз
- Переглянути та дослідити релізи
- Створити базові кастомізації чартів
Аналогія з магазином застосунків
Helm — це як магазин застосунків для Kubernetes. Чарти — це застосунки — попередньо зібрані, протестовані та готові до встановлення. Так само як ви встановлюєте Slack одним натисканням замість того, щоб компілювати його самостійно, Helm дозволяє встановлювати складні застосунки (бази даних, стеки моніторингу, вебсервери) однією командою. Values — це як налаштування застосунку — ви змінюєте поведінку, не модифікуючи сам застосунок.
Концепції Helm
Розділ «Концепції Helm»Ключова термінологія
Розділ «Ключова термінологія»| Термін | Опис |
|---|---|
| Chart | Пакет ресурсів Kubernetes (як застосунок) |
| Release | Встановлений екземпляр чарту |
| Repository | Колекція чартів (як apt-репозиторії) |
| Values | Конфігурація для кастомізації чарту |
| Revision | Версія релізу після оновлення/відкату |
Як працює Helm
Розділ «Як працює Helm»Чарт (шаблон) + Values (конфігурація) = Реліз (працюючий застосунок)┌─────────────────────────────────────────────────────────┐│ Робочий процес Helm │├─────────────────────────────────────────────────────────┤│ ││ Репозиторій Чарт Реліз ││ ┌─────────┐ ┌─────────┐ ┌─────────┐ ││ │ bitnami │──────▶│ nginx │─────▶│ my-web │ ││ │ repo │ pull │ chart │install│ release │ ││ └─────────┘ └─────────┘ └─────────┘ ││ │ │ ││ ▼ ▼ ││ ┌─────────┐ ┌─────────┐ ││ │ values │ │ Поди │ ││ │ .yaml │ │Сервіси │ ││ └─────────┘ │ConfigMaps│ ││ └─────────┘ │└─────────────────────────────────────────────────────────┘Команди Helm
Розділ «Команди Helm»Керування репозиторіями
Розділ «Керування репозиторіями»# Додати репозиторійhelm repo add bitnami https://charts.bitnami.com/bitnami
# Додати stable-репозиторійhelm repo add stable https://charts.helm.sh/stable
# Оновити кеш репозиторіюhelm repo update
# Переглянути репозиторіїhelm repo list
# Шукати чартиhelm search repo nginxhelm search repo bitnami/nginx
# Шукати з версіямиhelm search repo nginx --versionsВстановлення чартів
Розділ «Встановлення чартів»# Встановити зі значеннями за замовчуваннямhelm install my-release bitnami/nginx
# Встановити у конкретний простір іменhelm install my-release bitnami/nginx -n production
# Встановити та створити простір іменhelm install my-release bitnami/nginx -n production --create-namespace
# Встановити з кастомним файлом значеньhelm install my-release bitnami/nginx -f values.yaml
# Встановити з інлайн-значеннямиhelm install my-release bitnami/nginx --set replicaCount=3
# Встановити з кількома перевизначеннями значеньhelm install my-release bitnami/nginx \ --set replicaCount=3 \ --set service.type=NodePort
# Dry-run (побачити, що буде створено)helm install my-release bitnami/nginx --dry-run
# Автоматично згенерувати ім'яhelm install bitnami/nginx --generate-nameПерегляд релізів
Розділ «Перегляд релізів»# Список релізів у поточному просторі іменhelm list
# Список у всіх просторах іменhelm list -A
# Список у конкретному просторі іменhelm list -n production
# Список з усіма статусамиhelm list --all
# Фільтрувати за статусомhelm list --failedhelm list --pendingДослідження чартів та релізів
Розділ «Дослідження чартів та релізів»# Показати інформацію про чартhelm show chart bitnami/nginx
# Показати значення за замовчуваннямhelm show values bitnami/nginx
# Показати всю інформаціюhelm show all bitnami/nginx
# Отримати значення релізуhelm get values my-release
# Отримати всю інформацію про релізhelm get all my-release
# Отримати маніфест релізу (відрендерений YAML)helm get manifest my-release
# Отримати історію релізуhelm history my-releaseОновлення релізів
Розділ «Оновлення релізів»# Оновити з новими значеннямиhelm upgrade my-release bitnami/nginx --set replicaCount=5
# Оновити з файлом значеньhelm upgrade my-release bitnami/nginx -f new-values.yaml
# Оновити або встановити, якщо не існуєhelm upgrade --install my-release bitnami/nginx
# Перевикористати наявні значення та додати новіhelm upgrade my-release bitnami/nginx --reuse-values --set image.tag=1.21Відкат
Розділ «Відкат»# Відкат до попередньої ревізіїhelm rollback my-release
# Відкат до конкретної ревізіїhelm rollback my-release 2
# Спочатку перевірити історіюhelm history my-releaseВидалення
Розділ «Видалення»# Видалити релізhelm uninstall my-release
# Видалити, але зберегти історіюhelm uninstall my-release --keep-history
# Видалити з простору іменhelm uninstall my-release -n productionРобота зі значеннями (Values)
Розділ «Робота зі значеннями (Values)»Ієрархія значень (від найнижчого до найвищого пріоритету)
Розділ «Ієрархія значень (від найнижчого до найвищого пріоритету)»- Значення за замовчуванням у чарті (
values.yaml) - Значення батьківського чарту
- Файл значень, переданий через
-f - Окремі значення через
--set
Приклад файлу значень
Розділ «Приклад файлу значень»replicaCount: 3
image: repository: nginx tag: "1.21" pullPolicy: IfNotPresent
service: type: NodePort port: 80
resources: limits: cpu: 100m memory: 128Mi requests: cpu: 50m memory: 64Mi
nodeSelector: disktype: ssdВикористання файлів значень
Розділ «Використання файлів значень»# Встановити з файлом значеньhelm install my-release bitnami/nginx -f my-values.yaml
# Кілька файлів значень (наступний перевизначає попередній)helm install my-release bitnami/nginx -f values.yaml -f production.yaml
# Поєднати файл та інлайнhelm install my-release bitnami/nginx -f values.yaml --set replicaCount=5Типовий синтаксис —set
Розділ «Типовий синтаксис —set»# Просте значення--set replicaCount=3
# Вкладене значення--set image.tag=1.21
# Рядкове значення (лапки для спецсимволів)--set image.repository="my-registry.com/nginx"
# Значення масиву--set nodeSelector.disktype=ssd
# Кілька значень--set replicaCount=3,service.type=NodePort
# Елементи списку--set ingress.hosts[0].host=example.comПрактичні сценарії для іспиту
Розділ «Практичні сценарії для іспиту»Сценарій 1: Встановлення та налаштування
Розділ «Сценарій 1: Встановлення та налаштування»# Додати репозиторійhelm repo add bitnami https://charts.bitnami.com/bitnamihelm repo update
# Встановити з кастомними значеннямиhelm install my-nginx bitnami/nginx \ --set replicaCount=2 \ --set service.type=ClusterIP \ -n web --create-namespace
# Перевіритиhelm list -n webk get pods -n webСценарій 2: Оновлення та відкат
Розділ «Сценарій 2: Оновлення та відкат»# Перевірити поточний релізhelm listhelm get values my-nginx
# Оновитиhelm upgrade my-nginx bitnami/nginx --set replicaCount=3
# Щось пішло не так — відкатhelm history my-nginxhelm rollback my-nginx 1
# Перевіритиhelm listСценарій 3: Дослідження перед встановленням
Розділ «Сценарій 3: Дослідження перед встановленням»# Подивитися, що встановлюєтеhelm show values bitnami/nginx | head -50
# Dry run, щоб побачити згенеровані маніфестиhelm install test bitnami/nginx --dry-run | less
# Потім встановитиhelm install my-nginx bitnami/nginxСтруктура чарту (довідка)
Розділ «Структура чарту (довідка)»my-chart/├── Chart.yaml # Метадані чарту├── values.yaml # Конфігурація за замовчуванням├── charts/ # Залежні чарти├── templates/ # Маніфести Kubernetes│ ├── deployment.yaml│ ├── service.yaml│ ├── _helpers.tpl # Допоміжні шаблони│ └── NOTES.txt # Примітки після встановлення└── README.mdНа іспиті CKAD ви не створюватимете чарти, але розуміння структури допомагає з дебагом.
Усунення проблем із Helm
Розділ «Усунення проблем із Helm»Типові проблеми
Розділ «Типові проблеми»# Реліз застряг у pending-installhelm list --pendinghelm uninstall stuck-release
# Подивитися, що не такhelm get manifest my-release | k apply --dry-run=server -f -
# Дебаг рендерингу шаблонівhelm template my-release bitnami/nginx --debug
# Перевірити статус релізуhelm status my-releaseКорисні команди для дебагу
Розділ «Корисні команди для дебагу»# Побачити відрендерені шаблониhelm template my-release bitnami/nginx > rendered.yaml
# Валідувати без встановленняhelm install my-release bitnami/nginx --dry-run --debug
# Отримати примітки (інструкції після встановлення)helm get notes my-releaseЧи знали ви?
Розділ «Чи знали ви?»-
Helm 3 прибрав Tiller. Helm 2 потребував серверний компонент (Tiller) з привілеями cluster-admin. Helm 3 працює повністю на стороні клієнта, використовуючи ваші дозволи kubeconfig.
-
helm upgrade --installє ідемпотентним — встановлює, якщо релізу не існує, або оновлює, якщо існує. Чудово підходить для CI/CD-пайплайнів. -
Helm зберігає дані релізу як Secrets (за замовчуванням) або ConfigMaps. Кожна ревізія — це окремий Secret, що дозволяє відкат до будь-якого попереднього стану.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це шкодить | Рішення |
|---|---|---|
Забули helm repo update | Встановлення старих версій чартів | Завжди оновлюйте перед встановленням |
| Неправильний простір імен | Реліз у просторі імен default | Використовуйте -n namespace послідовно |
Друкарські помилки в --set | Значення не застосовуються | Використовуйте --dry-run для перевірки |
Забули --reuse-values | Оновлення скидає до значень за замовчуванням | Додайте прапорець, коли змінюєте лише деякі значення |
| Не перевірили історію перед відкатом | Відкат до неправильної версії | Спочатку виконайте helm history |
Тест
Розділ «Тест»-
Як встановити чарт і встановити
replicaCountна 3?Відповідь
`helm install my-release bitnami/nginx --set replicaCount=3` -
Як побачити, які значення використовує реліз?
Відповідь
`helm get values my-release`Додайте
--all, щоб побачити обчислені значення, включаючи значення за замовчуванням. -
Як відкотити до ревізії 2?
Відповідь
`helm rollback my-release 2` -
Що робить
helm upgrade --install?Відповідь
Встановлює реліз, якщо він не існує, або оновлює його, якщо існує. Це робить команду ідемпотентною — безпечною для багаторазового виконання.
Практична вправа
Розділ «Практична вправа»Завдання: Повний робочий процес Helm із реальним чартом.
Підготовка:
# Додати репозиторійhelm repo add bitnami https://charts.bitnami.com/bitnamihelm repo updateЧастина 1: Дослідження та встановлення
# Побачити доступні значенняhelm show values bitnami/nginx | head -30
# Встановити з кастомними значеннямиhelm install web bitnami/nginx \ --set replicaCount=2 \ --set service.type=ClusterIP
# Перевірити встановленняhelm listk get pods -l app.kubernetes.io/instance=webЧастина 2: Оновлення
# Оновити кількість реплікhelm upgrade web bitnami/nginx --reuse-values --set replicaCount=3
# Перевірити історіюhelm history web
# Перевірити подиk get pods -l app.kubernetes.io/instance=webЧастина 3: Відкат
# Відкат до ревізії 1helm rollback web 1
# Перевірити поверненняhelm get values webk get pods -l app.kubernetes.io/instance=webЧастина 4: Очищення
helm uninstall webПрактичні вправи
Розділ «Практичні вправи»Вправа 1: Керування репозиторіями (Ціль: 2 хвилини)
Розділ «Вправа 1: Керування репозиторіями (Ціль: 2 хвилини)»# Додати bitnami-репозиторійhelm repo add bitnami https://charts.bitnami.com/bitnami
# Оновитиhelm repo update
# Шукати mysqlhelm search repo mysql
# Переглянути репозиторіїhelm repo listВправа 2: Базове встановлення (Ціль: 2 хвилини)
Розділ «Вправа 2: Базове встановлення (Ціль: 2 хвилини)»# Встановити nginxhelm install drill2 bitnami/nginx
# Переглянути релізиhelm list
# Перевірити статусhelm status drill2
# Очищенняhelm uninstall drill2Вправа 3: Встановлення зі значеннями (Ціль: 3 хвилини)
Розділ «Вправа 3: Встановлення зі значеннями (Ціль: 3 хвилини)»# Створити файл значеньcat << 'EOF' > /tmp/values.yamlreplicaCount: 2service: type: ClusterIPEOF
# Встановити з файлом значеньhelm install drill3 bitnami/nginx -f /tmp/values.yaml
# Перевірити, що значення застосованоhelm get values drill3
# Очищенняhelm uninstall drill3Вправа 4: Оновлення та відкат (Ціль: 4 хвилини)
Розділ «Вправа 4: Оновлення та відкат (Ціль: 4 хвилини)»# Встановитиhelm install drill4 bitnami/nginx --set replicaCount=1
# Оновитиhelm upgrade drill4 bitnami/nginx --set replicaCount=3
# Перевірити історіюhelm history drill4
# Відкатhelm rollback drill4 1
# Перевіритиhelm get values drill4
# Очищенняhelm uninstall drill4Вправа 5: Операції з просторами імен (Ціль: 3 хвилини)
Розділ «Вправа 5: Операції з просторами імен (Ціль: 3 хвилини)»# Встановити у новий простір іменhelm install drill5 bitnami/nginx -n helm-test --create-namespace
# Переглянути у просторі іменhelm list -n helm-test
# Отримати поди у просторі іменk get pods -n helm-test
# Очищенняhelm uninstall drill5 -n helm-testk delete ns helm-testВправа 6: Повний сценарій (Ціль: 6 хвилин)
Розділ «Вправа 6: Повний сценарій (Ціль: 6 хвилин)»Сценарій: Розгорнути production-ready nginx.
# 1. Створити файл значеньcat << 'EOF' > /tmp/prod-values.yamlreplicaCount: 3service: type: NodePort nodePorts: http: 30080resources: limits: cpu: 100m memory: 128Mi requests: cpu: 50m memory: 64MiEOF
# 2. Спочатку dry-runhelm install prod-web bitnami/nginx -f /tmp/prod-values.yaml --dry-run
# 3. Встановитиhelm install prod-web bitnami/nginx -f /tmp/prod-values.yaml
# 4. Перевіритиhelm listhelm get values prod-webk get pods -l app.kubernetes.io/instance=prod-web
# 5. Оновити з більшою кількістю реплікhelm upgrade prod-web bitnami/nginx -f /tmp/prod-values.yaml --set replicaCount=5
# 6. Щось не так — відкатhelm rollback prod-web 1
# 7. Очищенняhelm uninstall prod-webНаступний модуль
Розділ «Наступний модуль»Модуль 2.3: Kustomize — кастомізація ресурсів Kubernetes без шаблонів.