Helm (в Kubernetes)

⌘K

Helm (в Kubernetes)

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
    .

Немного экономии прямо здесь

Планируете VPS на 12 месяцев? Примените NEWCOM — получите +1 бесплатно.

Месяц в подарок
COPIED
NEWCOM COPIED