Helm — менеджер пакетов для Kubernetes. Пакет в Helm называется chart — набор YAML-шаблонов, описывающих все ресурсы приложения (Deployment, Service, ConfigMap, Ingress и т.д.). Helm позволяет устанавливать сложные приложения в Kubernetes одной командой, управлять версиями и выполнять rollback.
Основные концепции
- Chart: пакет с шаблонами и values по умолчанию
- Release: установленный экземпляр chart в кластере. Один chart можно установить несколько раз под разными именами (например, staging и production)
- Repository: хранилище charts. Официальный: Artifact Hub (artifacthub.io)
- Values: параметры для шаблонизации; переопределяются при установке через
--setили-f values.yaml
Основные команды
# Добавить репозиторий
helm repo add bitnami https://charts.bitnami.com/bitnami
# Поиск chart
helm search repo nginx
# Установить chart
helm install my-nginx bitnami/nginx --namespace default
# Установить с кастомными values
helm install my-nginx bitnami/nginx -f custom-values.yaml
# Обновить release
helm upgrade my-nginx bitnami/nginx
# Откатиться к предыдущей версии
helm rollback my-nginx 1
# Список releases
helm list -A
# Удалить release
helm uninstall my-nginx
История
Helm основан компанией Deis в 2015 году как инструмент для упрощения деплоя в Kubernetes. В 2016 году передан в CNCF (Cloud Native Computing Foundation). Helm 2 требовал server-side компонент Tiller (с правами cluster-admin) — критиковался за проблемы безопасности. Helm 3 (ноябрь 2019) убрал Tiller: всё клиентское, состояние хранится в Secret Kubernetes. Helm 3 — текущий стандарт; более 10 000 charts на Artifact Hub (2024).
Структура chart
mychart/
├── Chart.yaml # метаданные chart
├── values.yaml # значения по умолчанию
├── charts/ # зависимые charts
└── templates/ # YAML-шаблоны ресурсов K8s
├── deployment.yaml
├── service.yaml
└── ingress.yaml
На что обращать внимание
Helm использует Go-шаблоны — синтаксис {{ .Values.image.tag }} может быть непривычен поначалу. При обновлении chart всегда делай helm diff upgrade (плагин helm-diff) для просмотра изменений перед применением. Secrets в Helm хранятся в Kubernetes Secret как base64 — не шифруются. Для зашифрованных секретов используй helm-secrets (SOPS + Age). Popular charts: cert-manager (SSL), Traefik, nginx-ingress, Prometheus/Grafana stack (kube-prometheus-stack).
История Helm
Helm создан командой Deis (ныне поглощена Microsoft) в 2015 году. Версия 1.0 выпущена как «Kubernetes package manager» на KubeCon 2015. Helm 2 (2016) ввёл серверный компонент Tiller — pod в кластере, управляющий установками. Tiller стал источником проблем безопасности (имел cluster-admin права). Helm 3 (2019) убрал Tiller — все операции выполняются через kubectl credentials клиента. Helm 3.x — текущий стандарт; Helm 2 достиг EOL в ноябре 2020. Крупнейшие репозитории чартов: Artifact Hub (artifacthub.io), Bitnami Charts.
Структура Helm chart
mychart/
Chart.yaml # Метаданные (name, version, appVersion)
values.yaml # Значения по умолчанию
templates/
deployment.yaml # Kubernetes YAML с шаблонами
service.yaml
ingress.yaml
_helpers.tpl # Вспомогательные функции
Шаблоны используют Go template engine: {{ .Values.image.tag }}, {{ include "mychart.name" . }}.
На что обращать внимание
Helm values.yaml хранит конфигурацию, которая переопределяется при установке: helm install myapp ./chart -f prod-values.yaml. Секреты не хранить в values.yaml открытым текстом — используй Kubernetes Secrets + helm-secrets (SOPS + Age для шифрования). Для обновления без downtime: helm upgrade myapp ./chart --atomic (откат при ошибке). Популярные чарты: cert-manager (SSL), Traefik, nginx-ingress, Prometheus + Grafana (kube-prometheus-stack).