Что такое Helm в контексте шаблонизации в Kubernetes?

«Что такое Helm в контексте шаблонизации в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-файлов, обеспечивая параметризацию, версионирование и простой деплоймент приложений.