Helm — это инструмент управления пакетами для Kubernetes, позволяющий упрощать установку, обновление и сопровождение приложений в кластере. Он работает по аналогии с пакетными менеджерами вроде
apt
yum
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
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
к этому шаблону:
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
— форматирование вложенных YAML-блоков (для ресурсов, env и т.п.).nindent
- Всё шаблонируется на этапе установки или генерации с помощью команды .
helm template