Helm — это не просто менеджер пакетов для Kubernetes, а полноценный инструмент оркестрации, который превращает ваш kubectl apply -f в осмысленный процесс управления конфигурациями. В статье разберём, как создавать чарты, работать с values.yaml и деплоить приложения без головной боли, как это делают в production-средах.
Вы только что написали kubectl apply -f deployment.yaml в третий раз за час, потому что забыли изменить реплики или версию образа.
Поздравляю, вы готовы к Helm!
🧠 Теория: что такое Helm?
Helm — это пакетный менеджер для Kubernetes, который:
- Упаковывает манифесты в чарты (аналогично
.deb/.rpm). - Позволяет параметризировать конфиги через values.yaml.
- Управляет версиями через релизы (releases).
По сути, это Bundler для вашего Kubernetes.
🔧 Первый чарт: от helm create до деплоя
Создаём скелет чарта:
helm create my-rails-app
Структура получится такой:
my-rails-app/
├── charts/ # Зависимости
├── Chart.yaml # Метаданные (как Gemfile)
├── templates/ # Шаблоны манифестов
│ ├── deployment.yaml
│ ├── service.yaml
│ └── ...
└── values.yaml # Дефолтные параметры
💡 Как работает values.yaml?
Это центральный конфиг для переопределения параметров. Пример:
# values.yaml
replicaCount: 3
image:
repository: myregistry/rails-app
tag: latest
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 3000
А в шаблоне (templates/deployment.yaml) используем так:
spec:
replicas: {{ .Values.replicaCount }}
containers:
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
🚀 Деплой: 3 способа
- Локальный тест (проверка шаблонов):
helm install --dry-run --debug my-release ./my-raws-app - Продакшн-деплой:
helm upgrade --install my-release ./my-rails-app \ --set image.tag="v1.2.3" \ --set replicaCount=5 - Через CI/CD (например, GitLab):
deploy: script: - helm upgrade --install $CI_PROJECT_NAME ./chart \ --set image.tag=$CI_COMMIT_SHA
🧪 Тестирование: от линтеров до интеграции
- Проверка синтаксиса:
helm lint ./my-rails-app -
Unit-тесты (используем
helm-unittest):# tests/deployment_test.yaml suite: test deployment templates: - deployment.yaml tests: - it: should have 3 replicas set: replicaCount: 3 asserts: - equal: path: spec.replicas value: 3
🔥 Антипаттерны
| Ошибка | Последствия | Решение |
|---|---|---|
| Один гигантский values.yaml | Нечитаемость, конфликты | Разделять на env-файлы |
Жёсткие теги (tag: latest) |
Непредсказуемость деплоя | Использовать tag: {{ .Chart.AppVersion }} |
| 100500 зависимостей в requirements.yaml | Сложность обновлений | Проверять helm dependency update |
🎤 Что сказать на собеседовании
— Как вы управляете конфигами для разных окружений?
— Мы используем Helm с многослойными values:
values.yaml (база) → values-prod.yaml (переопределения) → --set (экстренные правки).
Плюс helmfile для сложных сценариев.
🧾 Вывод
Helm — это ваш “kubectl на стероидах”.
Он превращает рутину в декларативный процесс, где:
- Конфиги версионируются вместе с кодом.
- Деплой становится предсказуемым.
- А вы наконец-то перестаёте путаться, какой
yamlкуда применить.
Теперь можно деплоить без молитв и кофе-брейков в 3 часа ночи.