Модуль 4.2: Пакування застосунків
Складність:
[MEDIUM]- Концепції інструментівЧас на виконання: 25-30 хвилин
Передумови: Модуль 4.1 (Основи CI/CD)
Що ви зможете робити
Розділ «Що ви зможете робити»Після завершення цього модуля ви зможете:
- Порівняти Helm та Kustomize як підходи до пакування застосунків Kubernetes
- Пояснити структуру Helm chart: templates, values та життєвий цикл релізу
- Визначити коли використовувати Helm charts або Kustomize overlays для різних сценаріїв керування
- Оцінити стратегії пакування для розгортань у кількох середовищах (dev, staging, production)
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Сирі маніфести Kubernetes стають важкими в управлінні у масштабі. Helm, Kustomize та інші інструменти допомагають пакувати, налаштовувати та розгортати застосунки. KCNA перевіряє ваше розуміння цих підходів до пакування та коли їх використовувати.
Проблема сирих маніфестів
Розділ «Проблема сирих маніфестів»┌─────────────────────────────────────────────────────────────┐│ ПРОБЛЕМА МАНІФЕСТІВ │├─────────────────────────────────────────────────────────────┤│ ││ Управління багатьма YAML файлами: ││ ───────────────────────────────────────────────────────── ││ ││ my-app/ ││ ├── deployment.yaml ││ ├── service.yaml ││ ├── configmap.yaml ││ ├── secret.yaml ││ ├── ingress.yaml ││ └── pvc.yaml ││ ││ Проблеми: ││ ───────────────────────────────────────────────────────── ││ ││ 1. ДУБЛЮВАННЯ ││ Той самий застосунок для dev/staging/prod = 3x файлів ││ Різниця лише: тег образу, репліки, ресурси ││ ││ 2. НЕМАЄ ШАБЛОНІЗАЦІЇ ││ Не можна параметризувати значення ││ Захардкоджено скрізь ││ ││ 3. НЕМАЄ ВЕРСІОНУВАННЯ ││ Яка версія розгорнута? ││ Як відкотити? ││ ││ 4. НЕМАЄ ЗАЛЕЖНОСТЕЙ ││ Застосунку потрібен Redis → управляйте окремо ││ │└─────────────────────────────────────────────────────────────┘Helm
Розділ «Helm»┌─────────────────────────────────────────────────────────────┐│ HELM │├─────────────────────────────────────────────────────────────┤│ ││ "Менеджер пакетів для Kubernetes" ││ CNCF Graduated проєкт ││ ││ Ключові концепції: ││ ───────────────────────────────────────────────────────── ││ ││ CHART ││ Пакет з ресурсами Kubernetes ││ Шаблони + значення + метадані ││ ││ RELEASE ││ Екземпляр chart у кластері ││ Той самий chart може мати кілька release ││ ││ REPOSITORY ││ Колекція chart (як npm реєстр) ││ ││ Структура chart: ││ ───────────────────────────────────────────────────────── ││ ││ my-app/ ││ ├── Chart.yaml # Метадані (назва, версія) ││ ├── values.yaml # Типові значення ││ ├── templates/ ││ │ ├── deployment.yaml ││ │ ├── service.yaml ││ │ └── _helpers.tpl ││ └── charts/ # Залежності ││ │└─────────────────────────────────────────────────────────────┘Шаблонізація Helm
Розділ «Шаблонізація Helm»┌─────────────────────────────────────────────────────────────┐│ ШАБЛОНІЗАЦІЯ HELM │├─────────────────────────────────────────────────────────────┤│ ││ Шаблон (templates/deployment.yaml): ││ ───────────────────────────────────────────────────────── ││ ││ apiVersion: apps/v1 ││ kind: Deployment ││ metadata: ││ name: {{ .Release.Name }}-app ││ spec: ││ replicas: {{ .Values.replicas }} ││ template: ││ spec: ││ containers: ││ - name: app ││ image: {{ .Values.image.repository }}:{{ ││ .Values.image.tag }} ││ resources: ││ {{- toYaml .Values.resources | nindent 12 }} ││ ││ Значення (values.yaml): ││ ───────────────────────────────────────────────────────── ││ ││ replicas: 3 ││ image: ││ repository: nginx ││ tag: 1.25 ││ resources: ││ limits: ││ cpu: 100m ││ memory: 128Mi ││ ││ Перевизначення значень: ││ ───────────────────────────────────────────────────────── ││ helm install my-release ./my-app \ ││ --set replicas=5 \ ││ --set image.tag=1.26 ││ ││ Або через файл значень: ││ helm install my-release ./my-app -f prod-values.yaml ││ │└─────────────────────────────────────────────────────────────┘Команди Helm
Розділ «Команди Helm»| Команда | Призначення |
|---|---|
helm install | Встановити chart |
helm upgrade | Оновити release |
helm rollback | Відкотити до попередньої версії |
helm uninstall | Видалити release |
helm list | Перелік release |
helm repo add | Додати репозиторій chart |
helm search | Пошук chart |
Kustomize
Розділ «Kustomize»┌─────────────────────────────────────────────────────────────┐│ KUSTOMIZE │├─────────────────────────────────────────────────────────────┤│ ││ "Нативне управління конфігурацією Kubernetes" ││ Вбудований у kubectl (kubectl apply -k) ││ ││ Ключова відмінність від Helm: ││ ───────────────────────────────────────────────────────── ││ • НЕМАЄ шаблонізації ││ • Використовує overlays та patches ││ • Чистий Kubernetes YAML ││ ││ Структура: ││ ───────────────────────────────────────────────────────── ││ ││ my-app/ ││ ├── base/ # Спільні ресурси ││ │ ├── kustomization.yaml ││ │ ├── deployment.yaml ││ │ └── service.yaml ││ └── overlays/ ││ ├── dev/ # Специфічне для dev ││ │ ├── kustomization.yaml ││ │ └── replica-patch.yaml ││ └── prod/ # Специфічне для prod ││ ├── kustomization.yaml ││ └── replica-patch.yaml ││ ││ Як це працює: ││ ───────────────────────────────────────────────────────── ││ ││ Base: Оригінальні ресурси ││ Overlay: Модифікації, застосовані поверх base ││ ││ [Base] ││ │ ││ ┌─────┴─────┐ ││ ▼ ▼ ││ [Overlay: [Overlay: ││ Dev] Prod] ││ │└─────────────────────────────────────────────────────────────┘Приклад Kustomize
Розділ «Приклад Kustomize»┌─────────────────────────────────────────────────────────────┐│ ПРИКЛАД KUSTOMIZE │├─────────────────────────────────────────────────────────────┤│ ││ base/kustomization.yaml: ││ ───────────────────────────────────────────────────────── ││ apiVersion: kustomize.config.k8s.io/v1beta1 ││ kind: Kustomization ││ resources: ││ - deployment.yaml ││ - service.yaml ││ ││ overlays/prod/kustomization.yaml: ││ ───────────────────────────────────────────────────────── ││ apiVersion: kustomize.config.k8s.io/v1beta1 ││ kind: Kustomization ││ resources: ││ - ../../base ││ namePrefix: prod- ││ replicas: ││ - name: my-app ││ count: 5 ││ images: ││ - name: nginx ││ newTag: "1.26" ││ ││ Застосування: ││ ───────────────────────────────────────────────────────── ││ kubectl apply -k overlays/prod/ ││ ││ Можливості Kustomize: ││ • namePrefix/nameSuffix: Додати префікс до усіх назв ││ • namespace: Встановити простір імен для всіх ресурсів ││ • images: Перевизначити теги образів ││ • replicas: Перевизначити кількість реплік ││ • patches: Модифікувати будь-яке поле ││ • configMapGenerator: Створити ConfigMaps з файлів ││ • secretGenerator: Створити Secrets з файлів ││ │└─────────────────────────────────────────────────────────────┘Helm vs Kustomize
Розділ «Helm vs Kustomize»┌─────────────────────────────────────────────────────────────┐│ HELM vs KUSTOMIZE │├─────────────────────────────────────────────────────────────┤│ ││ HELM: ││ ───────────────────────────────────────────────────────── ││ + Потужна шаблонізація ││ + Версіонування пакетів ││ + Управління залежностями ││ + Велика екосистема (Artifact Hub) ││ + Відстеження release ││ - Складний синтаксис шаблонів ││ - Потрібно вивчити Go шаблони ││ ││ KUSTOMIZE: ││ ───────────────────────────────────────────────────────── ││ + Без шаблонізації = чистий YAML ││ + Вбудований в kubectl ││ + Легкий для розуміння ││ + Немає нового синтаксису ││ - Обмежений порівняно з шаблонізацією ││ - Немає версіонування пакетів ││ - Немає управління залежностями ││ ││ Коли що використовувати: ││ ───────────────────────────────────────────────────────── ││ ││ Helm: ││ • Розповсюдження застосунків іншим ││ • Складні потреби шаблонізації ││ • Потрібне управління залежностями ││ • Використання chart третіх сторін ││ ││ Kustomize: ││ • Внутрішні застосунки з варіаціями середовищ ││ • Прості overlays (dev/staging/prod) ││ • Команди, незнайомі з шаблонізацією ││ • GitOps робочі процеси ││ ││ Обидва разом: ││ • Helm для базового chart ││ • Kustomize для overlays середовищ ││ │└─────────────────────────────────────────────────────────────┘Інші інструменти пакування
Розділ «Інші інструменти пакування»┌─────────────────────────────────────────────────────────────┐│ ІНШІ ІНСТРУМЕНТИ │├─────────────────────────────────────────────────────────────┤│ ││ JSONNET / TANKA ││ ───────────────────────────────────────────────────────── ││ • Мова шаблонізації даних ││ • Програмна генерація JSON/YAML ││ • Використовується Grafana Labs ││ ││ CUE ││ ───────────────────────────────────────────────────────── ││ • Мова конфігурації ││ • Сильна типізація та валідація ││ • Конфігурації що зливаються ││ ││ CARVEL (раніше k14s) ││ ───────────────────────────────────────────────────────── ││ • ytt: YAML шаблонізація ││ • kbld: Збірка/розвʼязання образів ││ • kapp: Інструмент розгортання ││ • Проєкт CNCF sandbox ││ ││ ОПЕРАТОРИ ││ ───────────────────────────────────────────────────────── ││ • Для складних stateful застосунків ││ • Власні контролери ││ • Виходять за межі простого пакування ││ │└─────────────────────────────────────────────────────────────┘Artifact Hub
Розділ «Artifact Hub»┌─────────────────────────────────────────────────────────────┐│ ARTIFACT HUB │├─────────────────────────────────────────────────────────────┤│ ││ artifacthub.io ││ Проєкт CNCF ││ ││ Центральний репозиторій для: ││ ───────────────────────────────────────────────────────── ││ • Helm charts ││ • Політик OPA ││ • Правил Falco ││ • OLM операторів ││ • І більше... ││ ││ Використовуйте для: ││ • Пошуку chart для популярних застосунків ││ • Пошуку альтернатив ││ • Перевірки якості/безпеки chart ││ ││ Приклад: Потрібен PostgreSQL? ││ → Шукайте "postgresql" на Artifact Hub ││ → Знайдіть Bitnami chart ││ → helm repo add bitnami https://charts.bitnami.com/... ││ → helm install my-postgres bitnami/postgresql ││ │└─────────────────────────────────────────────────────────────┘Чи знали ви?
Розділ «Чи знали ви?»-
Helm v3 видалив Tiller — Helm v2 вимагав серверний компонент (Tiller) у кластері. Helm v3 видалив його для кращої безпеки.
-
Kustomize вбудований у kubectl — З Kubernetes 1.14 можна використовувати
kubectl apply -kбез окремого встановлення Kustomize. -
Helm використовує Go шаблони — Якщо ви знаєте пакет text/template Go, шаблонізація Helm буде знайомою.
-
Charts можуть мати залежності — Chart може залежати від інших chart, які автоматично встановлюються разом (як npm пакети).
Поширені помилки
Розділ «Поширені помилки»| Помилка | Чому це шкодить | Правильне розуміння |
|---|---|---|
| Дублювання маніфестів для середовищ | Важко підтримувати | Використовуйте Helm values або Kustomize overlays |
| Складні шаблони Helm | Важко налагоджувати | Тримайте шаблони простими |
| Без версіонування chart | Не можна відстежити зміни | Використовуйте семантичне версіонування |
| Захардкоджені секрети | Ризик безпеки | Використовуйте зовнішнє управління секретами |
Тест
Розділ «Тест»-
Що таке Helm chart?
Відповідь
Пакет з ресурсами Kubernetes (шаблони), типовими значеннями та метаданими. Це як пакет у npm або apt, але для застосунків Kubernetes. Charts можна версіонувати, ділитися ними та мати залежності. -
Чим Kustomize відрізняється від Helm?
Відповідь
Kustomize використовує overlays та patches на чистому YAML — без шаблонізації. Helm використовує Go шаблонізацію для генерації YAML. Kustomize простіший, але менш потужний. Kustomize вбудований у kubectl; Helm — окремий інструмент. -
Що таке Helm release?
Відповідь
Екземпляр chart, встановлений у кластері. Той самий chart може бути встановлений кілька разів з різними назвами release. Helm відстежує історію release для оновлень та відкатів. -
Що таке Artifact Hub?
Відповідь
Проєкт CNCF, що служить центральним репозиторієм для пошуку та обміну хмарними нативними артефактами, включаючи Helm charts, політики OPA, правила Falco та оператори. Це як пошуковий рушій для пакетів Kubernetes. -
Коли б ви використали Kustomize замість Helm?
Відповідь
Для внутрішніх застосунків з простими варіаціями середовищ (dev/staging/prod), коли команди надають перевагу чистому YAML замість шаблонізації, або для GitOps робочих процесів. Kustomize також вбудований у kubectl, що не вимагає додаткового інструментарію.
Підсумок
Розділ «Підсумок»Проблема:
- Сирі маніфести не масштабуються
- Дублювання, без параметризації
- Без версіонування або залежностей
Helm:
- Менеджер пакетів для Kubernetes
- Шаблони + значення + charts
- Потужний, але складний
Kustomize:
- Overlays та patches
- Без шаблонізації
- Вбудований у kubectl
Коли використовувати:
- Helm: Розповсюдження застосунків, складна шаблонізація, залежності
- Kustomize: Внутрішні застосунки, прості overlays середовищ
- Обидва: Helm chart + Kustomize overlays
Artifact Hub:
- Пошук Helm charts та інших артефактів
- Центральний репозиторій CNCF
Навчальна програма KCNA завершена!
Розділ «Навчальна програма KCNA завершена!»Вітаємо! Ви завершили всю навчальну програму KCNA, що охоплює:
| Частина | Тема | Вага |
|---|---|---|
| Частина 1 | Основи Kubernetes | 44% |
| Частина 2 | Оркестрація контейнерів | 28% |
| Частина 3 | Хмарна нативна архітектура (включ. Спостережуваність) | 12% |
| Частина 4 | Доставка застосунків | 16% |
Оновлено листопад 2025: Спостережуваність обʼєднано з Хмарною нативною архітектурою
Наступні кроки:
- Перегляньте слабкі місця
- Пройдіть практичні тести
- Вивчіть ландшафт CNCF
- Заплануйте свій іспит!
Бажаємо успіхів з сертифікацією KCNA!