← Назад к вопросам

Относительно теймплейтирования, что такое helm

2.0 Middle🔥 201 комментариев
#Kubernetes

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Helm — пакетный менеджер для Kubernetes

Helm — это пакетный менеджер для Kubernetes, который упрощает развёртывание приложений через шаблонизацию YAML файлов. Helm использует концепцию Charts (как пакеты в npm) для описания и управления Kubernetes приложениями.

Проблема без Helm

Без Helm приходится управлять множеством YAML файлов вручную и создавать разные версии для разных окружений (dev, staging, prod), что приводит к дублированию кода и ошибкам.

Решение: Helm Charts

Chart — это пакет с шаблонами Kubernetes манифестов. Структура Chart:

my-app-chart/
Chart.yaml
values.yaml
values-dev.yaml
values-prod.yaml
templates/
  deployment.yaml
  service.yaml
  ingress.yaml

Chart.yaml — метаданные

apiVersion: v2
name: my-app
description: Web application
version: 1.0.0
appVersion: "2.0"

values.yaml — переменные

replicaCount: 3

image:
  repository: my-app
  tag: "2.0"

service:
  type: ClusterIP
  port: 8080

env:
  DATABASE_HOST: postgres
  DEBUG: "false"

resources:
  limits:
    cpu: 500m
    memory: 512Mi

Шаблоны с переменными

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-{{ .Chart.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        ports:
        - containerPort: 8080
        env:
        {{- range $key, $value := .Values.env }}
        - name: {{ $key }}
          value: {{ $value | quote }}
        {{- end }}
        resources:
          {{- toYaml .Values.resources | nindent 12 }}

Синтаксис Helm шаблонов

  • {{ .Values.replicaCount }} — подставка переменной
  • {{ .Chart.Name }} — имя чарта
  • {{ .Release.Name }} — имя релиза
  • {{ range }}...{{ end }} — цикл по переменным
  • {{ if }}...{{ end }} — условие
  • | quote — фильтр для добавления кавычек
  • toYaml — преобразование объекта в YAML

Основные команды

# Установка чарта
helm install my-release ./my-app-chart

# Установка с файлом переменных
helm install my-release ./my-app-chart -f values-prod.yaml

# Переопределение переменных
helm install my-release ./my-app-chart \
  --set replicaCount=5 \
  --set image.tag="3.0"

# Обновление (rolling update)
helm upgrade my-release ./my-app-chart -f values-prod.yaml

# Просмотр установленных релизов
helm list

# Откат к предыдущей версии
helm rollback my-release 1

# Удаление
helm uninstall my-release

# Проверка синтаксиса
helm lint ./my-app-chart

# Просмотр рендеренных YAML
helm template my-release ./my-app-chart
helm template my-release ./my-app-chart -f values-prod.yaml

Практический пример: разные окружения

values-dev.yaml:

replicaCount: 1
image:
  tag: "develop"
env:
  DEBUG: "true"

values-prod.yaml:

replicaCount: 5
image:
  tag: "2.0"
env:
  DEBUG: "false"

Установка:

helm install my-app-dev ./my-app-chart -f values-dev.yaml
helm install my-app-prod ./my-app-chart -f values-prod.yaml

Helm Hub — готовые чарты

helm search repo nginx
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install my-nginx bitnami/nginx
helm show values bitnami/nginx

Преимущества Helm

✅ Переиспользуемость — один чарт для всех окружений ✅ Версионирование — каждый чарт имеет версию ✅ Управление зависимостями — чарты могут зависеть друг от друга ✅ Откаты — легко откатиться на предыдущую версию ✅ Package Manager — централизованное управление ✅ Community Charts — готовые чарты для популярных приложений

Вывод

Helm решает проблему управления сложностью Kubernetes манифестов через шаблонизацию YAML, параметризацию для разных окружений и управление версионированием. Это делает развёртывание и обновление приложений простым и безопасным, позволяя автоматизировать процесс в CI/CD pipeline.