middle
Что такое Helm?
Helm — пакетный менеджер для Kubernetes, аналог apt/yum для Linux или Maven для Java. Позволяет описывать, устанавливать и обновлять приложения в Kubernetes как единый пакет.
Основные понятия
| Понятие | Описание | Аналогия |
|---|---|---|
| Chart | Пакет Helm с шаблонами K8s-ресурсов | Maven-артефакт |
| Values | Файл параметров (values.yaml) для шаблонов |
application.properties |
| Release | Конкретная установка Chart’а в кластер | Запущенное приложение |
| Repository | Хранилище Chart’ов | Maven Repository |
Структура Chart’а
Пример
my-spring-app/
Chart.yaml # Метаданные (имя, версия, описание)
values.yaml # Значения по умолчанию
templates/ # Шаблоны Kubernetes-ресурсов
deployment.yaml
service.yaml
ingress.yaml
configmap.yaml
hpa.yaml
_helpers.tpl # Вспомогательные шаблонные функции
charts/ # Зависимости (sub-charts)
Пример templates/deployment.yaml и values.yaml
templates/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-app.fullname" . }}
labels:
{{- include "my-app.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "my-app.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "my-app.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.targetPort }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
values.yaml:
replicaCount: 3
image:
repository: my-registry/my-spring-app
tag: "1.0.0"
pullPolicy: Always
service:
type: ClusterIP
port: 80
targetPort: 8080
ingress:
enabled: true
host: api.example.com
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "1000m"
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilization: 70
Основные команды Helm
Пример
# Добавить репозиторий
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Установить Chart
helm install my-release my-spring-app/ -f values-prod.yaml -n production
# Обновить Release
helm upgrade my-release my-spring-app/ -f values-prod.yaml -n production
# Установить или обновить
helm upgrade --install my-release my-spring-app/ -f values-prod.yaml
# Откатить к предыдущей версии
helm rollback my-release 1
# Список установленных Release
helm list -n production
# Посмотреть сгенерированные манифесты без установки
helm template my-release my-spring-app/ -f values-prod.yaml
Зачем Helm Java-разработчику
- Один Chart для всех окружений (dev, staging, prod) — разные
values.yaml - Управление зависимостями (PostgreSQL, Redis, Kafka — готовые Chart’ы из публичных репозиториев)
- Версионирование и откат деплоев
- Стандартизация инфраструктуры в команде
На собеседовании: достаточно объяснить концепцию Chart + Values + Release и привести пример, зачем это нужно (один Chart, разные окружения). Частая ошибка — путать Helm с kubectl apply и не понимать, что Helm добавляет шаблонизацию и управление релизами поверх обычных манифестов.