← назад к разделу

Когда сервис едет в 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: основы — поды, деплойменты и сервисы.