Helm — это инструмент управления пакетами для Kubernetes, позволяющий упрощать установку, обновление и сопровождение приложений в кластере. Он работает по аналогии с пакетными менеджерами вроде apt или yum, но предназначен для Kubernetes-среды. Вместо ручного написания десятков YAML-файлов, Helm использует шаблонизированные пакеты — Helm charts.
Helm chart — это набор файлов, в которых описаны все необходимые ресурсы Kubernetes: Deployment, Service, ConfigMap, Ingress, PVC и т. д. Чарты позволяют описывать целое приложение (или компонент микросервисной архитектуры) как единый, переносимый и настраиваемый блок.
Основные возможности Helm:
- шаблонизация манифестов с переменными (values),
- установка приложений одной командой (
helm install), - обновление уже установленных релизов (
helm upgrade), - откат до предыдущей версии (
helm rollback), - хранение и публикация чартов в репозиториях (
helm repo), - предварительный просмотр манифестов без установки (
helm template).
Примеры команд:
helm install my-app ./chart— установка приложения из локального чарта;helm upgrade my-app ./chart— обновление установленного релиза;helm pull stable/postgresql— загрузка чарта из репозитория;helm list— просмотр установленных релизов в кластере.
Helm особенно ценен при работе с микросервисами, где каждый сервис имеет свою инфраструктуру. Используя чарты, можно стандартизировать развёртывание, централизованно управлять параметрами и встроить установку в CI/CD пайплайны.
В командах DevOps Helm стал де-факто стандартом для доставки приложений в Kubernetes, поскольку он упрощает конфигурацию, повышает повторяемость и сокращает количество ручных ошибок при релизах. Его активно применяют как для внутренних сервисов, так и для развертывания стороннего ПО (например, базы данных, мониторинг, ingress-контроллеры и др.).
Структура Helm Chart
Helm chart — это директория с определённой структурой. В ней находятся все необходимые файлы и шаблоны для развертывания приложения в Kubernetes.
Пример базовой структуры:
my-chart/
├── Chart.yaml
├── values.yaml
├── charts/
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl
└── README.md
Компоненты:
- Chart.yaml
Основной файл метаданных чарта. Здесь указываются имя, версия, описание, зависимости и другие параметры.
Пример:apiVersion: v2 name: my-app description: A sample Helm chart version: 0.1.0 - values.yaml
Конфигурационный файл с переменными, которые подставляются в шаблоны. Это позволяет гибко управлять параметрами без изменения самих манифестов.
Пример:replicaCount: 2 image: repository: nginx tag: "1.25" - templates/
Каталог с шаблонами YAML-файлов Kubernetes. Здесь описываются все ресурсы: Deployments, Services, Ingress, ConfigMaps и т.д. Поддерживает Go-шаблоны и переменные изvalues.yaml. - _helpers.tpl
Файл с вспомогательными функциями и шаблонами, которые можно переиспользовать внутри других шаблонов. - charts/
Каталог для зависимых чартов (subcharts). Если приложение зависит от других сервисов (например, Redis, PostgreSQL), они могут быть подключены сюда. - README.md
Необязательный файл, содержащий описание чарта, переменных, примеры установки и настройки.
Пример Helm-шаблона: templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-app.fullname" . }}
labels:
app: {{ include "my-app.name" . }}
chart: {{ include "my-app.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include "my-app.name" . }}
template:
metadata:
labels:
app: {{ include "my-app.name" . }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
Пример values.yaml к этому шаблону:
replicaCount: 3
image:
repository: nginx
tag: "1.25"
pullPolicy: IfNotPresent
service:
port: 80
resources:
limits:
cpu: "500m"
memory: "256Mi"
requests:
cpu: "250m"
memory: "128Mi"
Как это работает:
{{ .Values.* }}— обращение к значениям, заданным вvalues.yaml.include— подключение шаблонов из_helpers.tpl, например для генерации имени.toYamlиnindent— форматирование вложенных YAML-блоков (для ресурсов, env и т.п.).- Всё шаблонируется на этапе установки или генерации с помощью команды
helm template.