Какая структура у чарта в Helm?

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

Ответ

Стандартная структура Helm-чарта (формат v3) представляет собой директорию со следующим содержимым:

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

Назначение ключевых файлов:

  1. Chart.yaml: Содержит метаданные о чарте.

    apiVersion: v2          # Обязательно v2 для Helm 3
    name: my-application
    description: A Helm chart for deploying the MyApp service
    type: application       # Может быть 'application' или 'library'
    version: 1.2.3          # Версия чарта (семантическое версионирование)
    appVersion: "2.5.1"     # Версия самого приложения
    dependencies:           # Список зависимостей (если есть)
      - name: redis
        version: "~14.0.0"
        repository: "https://charts.bitnami.com/bitnami"
  2. templates/: Файлы в этой директории — это шаблоны Go-текст, которые генерируют валидные YAML-манифесты для Kubernetes. Helm подставляет значения из values.yaml и внешних --set параметров в эти шаблоны.

  3. values.yaml: Главный файл конфигурации. Определяет настраиваемые параметры для шаблонов.

    replicaCount: 2
    image:
      repository: nginx
      tag: "stable"
      pullPolicy: IfNotPresent
    service:
      type: ClusterIP
      port: 80
  4. _helpers.tpl: Содержит переиспользуемые именованные шаблоны (define) и функции для упрощения основных шаблонов.

    {{- define "my-chart.fullname" -}}
    {{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" -}}
    {{- end -}}
  5. charts/: Если чарт зависит от других чартов, их можно поместить сюда в виде распакованных директорий (хотя обычно зависимости управляются через Chart.yaml и команду helm dependency update).

Эта структура обеспечивает модульность, повторное использование и удобное управление конфигурацией приложений в Kubernetes.