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

Как работает структура в Helm?

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

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

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

Как работает структура в Helm?

Helm — это менеджер пакетов для Kubernetes, который использует специальную структуру каталогов и файлов, называемую Chart, для определения, упаковки и развертывания приложений. Эта структура обеспечивает организацию конфигураций, шаблонов, зависимостей и метаданных, что позволяет управлять Kubernetes+приложениями как единым целым.

Основные компоненты структуры Helm Chart

Типичная структура Helm Chart выглядит следующим образом:

my-chart/
├── Chart.yaml          # Метаданные chart (имя, версия, зависимости)
├── values.yaml         # Значения по умолчанию для конфигурации
├── templates/          # Директория с шаблонами Kubernetes манифестов
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── _helpers.tpl    # Вспомогательные шаблоны (партиалы)
├── charts/             # Директория для зависимых subcharts (опционально)
├── crds/               # Custom Resource Definitions (опционально)
└── README.md           # Документация

Детальное описание ключевых файлов и директорий

1. Chart.yaml

Это основной файл метаданных, который определяет сам chart. Он содержит информацию, необходимую для идентификации и работы с пакетом.

apiVersion: v2
name: my-application
version: 1.0.0
description: A Helm chart for my Kubernetes application
type: application
appVersion: "2.0"
dependencies:
  - name: postgresql
    version: "12.1.1"
    repository: "https://charts.bitnami.com/bitnami"
    condition: postgresql.enabled

Ключевые поля:

  • apiVersion: Для Helm 3 используется v2.
  • name и version: Уникально идентифицируют chart. Версия следует семантическому версионированию.
  • dependencies: Список других charts, от которых зависит этот chart (ранее назывались requirements).

2. values.yaml

Это файл конфигурации по умолчанию. Он определяет значения переменных, которые будут подставлены в шаблоны из директории templates/. Это основа для кастомизации развертывания.

replicaCount: III

image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 200m
    memory: 256Mi
  requests:
    cpu: 100m
    memory: 128Mi

Пользователь может переопределить эти значения, создав свой собственный файл values.yaml или передавая значения через командную строку с флагом --set.

3. Директория templates/

Сердце Helm Chart. Содержит шаблонизированные файлы манифестов Kubernetes в формате YAML, написанные с использованием Go Template языка, расширенного функциями Sprig и специальными функциями Helm.

Пример шаблона deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "my-chart.fullname" . }}
  labels:
    {{- include "my-chart.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "my-chart.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "my-chart.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
  • Конструкции в двойных фигурных скобках {{ }} — это директивы шаблонизатора.
  • .Values — предоставляет доступ к данным из values.yaml.
  • .Chart — предоставляет доступ к метаданным из Chart.yaml.
  • include — функция для вызова вспомогательных шаблонов, определенных в _helpers.tpl.

Файл _helpers.tpl содержит переиспользуемые именованные шаблоны (партиалы), которые помогают избежать дублирования кода. Например:

{{- define "my-chart.fullname" -}}
{{- printf "%s-%s" .Release.Name .Chart.Name }}
{{- end }}

4. Директория charts/

Сюда помещаются зависимые charts (subcharts), если они не управляются через Chart.yaml (устаревший способ). В современном Helm зависимости обычно определяются в Chart.yaml и загружаются командой helm dependency update, которая скачивает их в эту директорию.

5. Директория crds/

(Начиная с Helm 3) Содержит манифесты Custom Resource Definitions (CRD). Файлы в этой директории устанавливаются ДО установки основного chart, что гарантирует, что CRD будут существовать в кластере к моменту развертывания ресурсов, которые их используют.

Процесс работы Helm с этой структурой

  1. Разработка/Упаковка: Инженер создает структуру каталогов, заполняет Chart.yaml, values.yaml и пишет шаблоны в templates/. Затем chart может быть упакован в .tgz архив командой helm package.
  2. Шаблонизация (рендеринг): При запуске команд helm install, helm upgrade или helm template Helm берет:
    *   Шаблоны из `templates/`.
    *   Значения по умолчанию из `values.yaml` chart.
    *   Пользовательские значения (переданные через `-f` или `--set`).
    *   Выполняет слияние значений (пользовательские значения имеют высший приоритет).
    *   Проходит по всем шаблонам, подставляя вычисленные значения в конструкции `{{ }}`.
  1. Валидация и отправка в Kubernetes: Полученные в результате шаблонизации "чистые" YAML.

Таким образом, структура Helm Chart — это не просто организация файлов, а формализованный подход к декларативному управлению жизненным циклом приложения в Kubernetes, который обеспечивает повторное использование, версионирование и гибкую конфигурацию.

Как работает структура в Helm? | PrepBro