Helm: пакетный менеджер

Когда манифестов десятки, копировать их под каждое окружение мучительно — Helm упаковывает их в переиспользуемые чарты.

Helm — пакетный менеджер для Kubernetes. Он упаковывает набор манифестов в чарт (chart) с параметрами, который ставится одной командой.

Реальное приложение — это десятки манифестов: Deployment-ы, Service-ы, ConfigMap-ы, Ingress. Для dev и prod они почти одинаковые, отличаются лишь значениями (число реплик, образ, домен). Helm решает это шаблонами: один набор манифестов с подстановкой переменных.

Чарт и values

Чарт — это каталог с шаблонами манифестов и файлом values.yaml, где лежат значения по умолчанию. В шаблонах вместо конкретных чисел стоят плейсхолдеры:

# values.yaml — параметры чарта
replicaCount: 3
image:
  repository: my-app
  tag: "1.0"
service:
  port: 80

А шаблон Deployment подставляет их (синтаксис Go-шаблонов):

spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: app
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

Для prod достаточно переопределить значения, не трогая шаблоны.

Установка готовых приложений

Главная сила Helm — готовые чарты популярных приложений (Postgres, Redis, nginx-ingress). Вместо написания манифестов с нуля ставите проверенный чарт:

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

# ставим PostgreSQL одной командой
helm install my-db bitnami/postgresql

Helm развернёт все нужные объекты. Переопределить значения можно на лету:

helm install my-db bitnami/postgresql \
  --set auth.password=s3cr3t \
  --set primary.persistence.size=10Gi

Релизы, обновления, откаты

Установленный чарт — это релиз. Helm ведёт их историю и умеет обновлять и откатывать целиком:

helm list
helm upgrade my-db bitnami/postgresql --set image.tag=16
helm rollback my-db 1
helm uninstall my-db
КомандаДействие
helm installустановить чарт как релиз
helm upgradeобновить релиз
helm rollbackоткатить релиз
helm uninstallудалить релиз целиком

Итог

  • Helm упаковывает манифесты в параметризуемый чарт.
  • values отделяют значения от шаблонов — один чарт на все окружения.
  • Готовые чарты ставят сложные приложения одной командой install.
Проверьте себя
1. Что такое чарт (chart) в Helm?
AТип Service
BПакет из шаблонов манифестов с параметрами
CГрафик нагрузки
DХранилище секретов
2. Зачем в Helm нужен values.yaml?
AХранить логи
BЗадавать параметры (реплики, образ, домен), подставляемые в шаблоны
CОписывать узлы кластера
DШифровать данные
3. Как установить готовый чарт PostgreSQL из репозитория?
Akubectl apply postgres
Bhelm install my-db bitnami/postgresql
Cdocker run postgres
Dkubectl create chart
Поддержать проект