Helm: пакетный менеджер Kubernetes за 5 минут | Глоссарий FREEHOSTING

Helm

Kubernetes Package Manager
Helm — Пакетный менеджер Kubernetes. Группирует манифесты в charts, шаблонизирует значения и управляет релизами с откатом одной командой.

Определение простыми словами

Helm — это apt или brew, но для Kubernetes. Он берёт набор YAML-манифестов (Deployment, Service, ConfigMap, Ingress), оборачивает их в шаблон и параметризует через файл values.yaml. Получается chart — переиспользуемый пакет приложения.

Команда helm install рендерит шаблон, передаёт результат API-серверу и сохраняет историю в Secret. Каждый под, разворачиваемый чартом, упаковывается в Docker-образ. Одна команда helm rollback возвращает кластер к предыдущей версии. Helm 3 убрал серверный компонент Tiller — теперь он работает только клиентом, что закрыло старые проблемы безопасности.

Сравнение Helm, Kustomize и сырых манифестов

Параметр Helm Kustomize kubectl apply -f
Шаблонизация Go-template + values Patch-overlays Нет
Версионирование релизов Встроено, hist + rollback Нет Нет
Repository пакетов OCI и HTTP Git Локальный путь
Сложность освоения Средняя Низкая Низкая
Подходит для SaaS-стеков, продуктов Простые наложения env Эксперименты

Кейсы использования

  • Развёртывание Bitnami-стека (PostgreSQL, Redis, Kafka) одной командой helm install без копания в манифестах.
  • Раскатка собственного приложения по dev/stage/prod с разными values-файлами.
  • CI/CD: GitLab или ArgoCD дёргает helm upgrade --install на каждый merge в main.
  • Helm OCI repository в Harbor или ECR для приватного распространения charts по клиентам.
  • Негатив: для маленьких проектов с 3–4 манифестами Helm избыточен — Kustomize прозрачнее.
  • Негатив: Go-шаблоны быстро превращаются в нечитаемую лапшу из {{- if .Values.xxx }}; чарт без тестов ломается на ровном месте.

Технические детали

# Установка клиента
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Подключаем репозиторий и обновляем индекс
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Установка PostgreSQL с переопределением пароля
helm install pg bitnami/postgresql 
  --namespace data --create-namespace 
  --set auth.postgresPassword=Sup3r! 
  --set primary.persistence.size=20Gi

# Просмотр истории и откат
helm history pg -n data
helm rollback pg 1 -n data

# Свой чарт
helm create my-app
helm lint my-app
helm template my-app --debug | kubectl apply --dry-run=client -f -

Helm хранит метаданные релиза в Secret типа helm.sh/release.v1 в namespace релиза. Удаление секрета ломает rollback, поэтому бэкапы etcd обязательны.

Частые вопросы

Нужен ли Tiller в Helm 3?

Нет. С Helm 3 серверный компонент удалён, права запросов берутся из текущего kubeconfig — это безопаснее и проще в RBAC.

Где хранить приватные chart-ы?

В OCI-реестре: Harbor, GitLab Container Registry, ECR, GHCR. Helm 3 умеет push/pull через oras без отдельного chart-museum.

Чем Helm отличается от Operator?

Helm раскатывает статический набор манифестов. Operator плюс к этому управляет жизненным циклом приложения (бэкапы, failover, шардирование).