Ответ
Стандартная структура 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 # Документация (рекомендуется)
Назначение ключевых файлов:
-
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" -
templates/: Файлы в этой директории — это шаблоны Go-текст, которые генерируют валидные YAML-манифесты для Kubernetes. Helm подставляет значения изvalues.yamlи внешних--setпараметров в эти шаблоны. -
values.yaml: Главный файл конфигурации. Определяет настраиваемые параметры для шаблонов.replicaCount: 2 image: repository: nginx tag: "stable" pullPolicy: IfNotPresent service: type: ClusterIP port: 80 -
_helpers.tpl: Содержит переиспользуемые именованные шаблоны (define) и функции для упрощения основных шаблонов.{{- define "my-chart.fullname" -}} {{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} -
charts/: Если чарт зависит от других чартов, их можно поместить сюда в виде распакованных директорий (хотя обычно зависимости управляются черезChart.yamlи командуhelm dependency update).
Эта структура обеспечивает модульность, повторное использование и удобное управление конфигурацией приложений в Kubernetes.