Когда сервис едет в Kubernetes, за ним тянется не один манифест, а пачка: Deployment, Service, ConfigMap, Ingress, HorizontalPodAutoscaler. Плюс их надо разложить по окружениям — в dev один образ и одна реплика, в prod другой образ и пять. Копировать эти YAML руками на каждое окружение — путь к рассинхрону. Эту задачу решает Helm.
Что это
Helm — пакетный менеджер для Kubernetes, «apt/npm для кластера». Он упаковывает набор манифестов в чарт (chart) — шаблоны YAML плюс файл значений values.yaml. Устанавливая чарт, Helm подставляет значения в шаблоны и применяет результат в кластер как единый релиз, которым потом можно управлять целиком: обновить, откатить, удалить.
Что это даёт:
- Параметризация вместо копипасты. Один чарт, разные
values— и тот же сервис разворачивается в dev и prod с разными образом, репликами, ресурсами. - Релиз как единица.
helm upgradeобновляет весь набор объектов атомарно,helm rollbackвозвращает предыдущую версию одной командой. - Готовые чарты. PostgreSQL, Redis, Kafka можно поставить готовым чартом из репозитория, а не собирать манифесты вручную.
Как выглядит
Шаблон деплоймента с подстановками (в двойных фигурных скобках — значения из values.yaml):
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-app
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repo }}:{{ .Values.image.tag }}"
resources:
limits:
memory: {{ .Values.resources.memory }}
Значения по умолчанию:
# values.yaml
replicaCount: 1
image:
repo: registry.example.com/orders
tag: "1.4.0"
resources:
memory: 512Mi
Установка и обновление — с переопределением значений под окружение:
helm install orders ./chart -f values-prod.yaml
helm upgrade orders ./chart --set replicaCount=5
helm rollback orders 1 # вернуть предыдущий релиз
В values-prod.yaml лежат только отличия прода (образ, пять реплик, больше памяти) — всё остальное берётся из дефолтов чарта.
Коротко
- Helm — пакетный менеджер Kubernetes: упаковывает манифесты в чарт (шаблоны +
values.yaml). - Один чарт разворачивается в разные окружения через разные
values— без копипасты YAML. - Единица управления — релиз:
helm install/upgrade/rollbackменяют весь набор объектов сразу. - Готовые чарты (PostgreSQL, Redis, Kafka) экономят написание манифестов с нуля.
Что почитать дальше
- Деплой в Kubernetes — манифесты, конфигурация и rolling update, поверх которых работает Helm.
- ArgoCD: GitOps-доставка — как деплоить чарты декларативно из Git.
- Kubernetes: основы — поды, деплойменты и сервисы.