Ответ
Helm — это пакетный менеджер и инструмент шаблонизации для Kubernetes. Он позволяет определять, устанавливать и обновлять сложные Kubernetes-приложения как единое целое, используя предварительно настроенные шаблоны, называемые чартами (Charts).
Основные концепции:
- Чарт (Chart): Пакет, содержащий шаблоны YAML-манифестов Kubernetes (
templates/), их значения по умолчанию (values.yaml) и метаинформацию (Chart.yaml). - Релиз (Release): Экземпляр чарта, развернутый в кластере Kubernetes. Один чарт можно установить несколько раз с разными значениями, создавая разные релизы.
- Шаблонизация: Шаблоны в директории
templates/написаны на языке Go templates. Helm подставляет в них значения изvalues.yamlили командной строки, генерируя итоговые манифесты. - Репозиторий (Repository): Хранилище чартов, откуда их можно скачивать и устанавливать (например,
https://charts.bitnami.com/bitnami).
Пример структуры чарта и шаблонизации:
# Файл values.yaml (конфигурация по умолчанию/переопределяемая)
replicaCount: 2
image:
repository: nginx
tag: "stable"
service:
type: ClusterIP
port: 80
# Шаблон deployment.yaml (в директории templates/)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-deployment
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
Базовые команды:
# Установить чарт из локальной директории с кастомными значениями
helm install my-release ./my-chart -f my-values.yaml
# Установить чарт из публичного репозитория
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-nginx bitnami/nginx
# Обновить релиз новыми значениями
helm upgrade my-release ./my-chart --set replicaCount=3
# Просмотреть сгенерированные манифесты без установки (dry-run)
helm template ./my-chart -f my-values.yaml
Helm решает проблему управления множеством взаимосвязанных YAML-файлов, обеспечивая параметризацию, версионирование и простой деплоймент приложений.