---
title: "Создание Helm-чарта в Kubernetes"
description: "Создание Helm-чарта для автоматизации создания, обновления и удаления приложений в Kubernetes. Документация и инструкции по использованию и настройке облачных сервисов Timeweb Cloud."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Helm-чарты позволяют упаковать Kubernetes-приложения в удобный пакет, включающий все необходимые ресурсы для их развертывания и управления. Чарты используются для автоматизации создания, обновления и удаления приложений в Kubernetes, что делает управление ими более простым и гибким.

## Создание нового чарта

Для создания нового чарта используйте команду:

```bash
helm create <имя_чарта>
```

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

## Основные файлы и директории

-   **Chart.yaml**  
    Главный файл чарта, содержащий метаданные: название, версия, описание и версия приложения. Также может включать информацию о зависимостях, если приложение зависит от других чартов.  
    Пример использования:
    

-   Указывает, какое приложение разворачивается, и его версию.
    
-   Упрощает управление версиями чарта и отслеживание изменений.
    

-   **values.yaml**  
    Файл с параметрами по умолчанию, который используется для задания значений, применяемых к шаблонам чарта для генерации конечных манифестов Kubernetes.  
    Пример использования:
    

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

-   **templates/**  
    В этой директории хранятся шаблоны YAML-файлов Kubernetes, определяющие объекты (поды, деплойменты, сервисы и т.д.), которые будут созданы при установке чарта. Шаблоны используют язык Go для динамической генерации манифестов на основе значений из `values.yaml`.  
    Пример использования:
    

-   Шаблоны для создания объектов Kubernetes (например, `deployment.yaml`, `service.yaml`).
    
-   Логика для гибкой настройки ресурсов (например, количество реплик или тип сервиса).
    

-   **charts/**  
    Директория для зависимостей — других чартов, необходимых для работы вашего приложения. Зависимости могут быть установлены локально или загружены из удаленных репозиториев.  
    Пример использования:
    

-   Зависимости загружаются командой `helm dependency update`, если они указаны в `Chart.yaml`.
    

-   **.helmignore**  
    Этот файл работает аналогично `.gitignore`, исключая файлы и директории при упаковке чарта в архив.  
    Пример использования:
    

-   Исключение ненужных файлов (например, документации или временных файлов), чтобы они не попали в финальный пакет.
    

Теперь, когда мы рассмотрели основную структуру чарта и назначение ключевых файлов, перейдем к практическому примеру. Мы создадим чарт для развертывания NGINX, настроим все необходимые параметры и рассмотрим, как шаблоны используют данные из `values.yaml` для генерации Kubernetes-ресурсов.

## Создание базовой структуры чарта

Начните с создания базовой структуры чарта. Введите команду:

```shell
helm create nginx-chart
```

Это создаст директорию `nginx-chart/` с базовыми файлами:

```shell
nginx-chart
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│   	└── test-connection.yaml
└── values.yaml
```

## Настройка файла Chart.yaml

Файл `Chart.yaml` является ключевым элементом любого Helm-чарта. В этом файле указываются метаданные чарта, такие как его имя, версия, описание, а также информация о зависимостях.

Пример содержимого `Chart.yaml` для чарта NGINX:

```yml
apiVersion: v2
name: nginx-chart
description: A Helm chart for deploying NGINX
version: 0.1.0   	
appVersion: "1.21.0"
```

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

-   **apiVersion**: Версия API Helm для данного чарта. Для чартов Helm 3 используйте `v2`.
    
-   **name**: Название вашего чарта. Оно должно быть уникальным в вашем репозитории.
    
-   **description**: Краткое описание того, что делает этот чарт.
    
-   **version**: Версия самого чарта. Каждый раз, когда вы вносите изменения в чарт, необходимо обновлять эту версию.
    
-   **appVersion**: Версия приложения (в данном случае NGINX), которая будет развернута. Это поле не влияет на логику Helm, но помогает пользователям видеть, какую версию приложения они устанавливают.
    

## Настройка файла values.yaml

Файл `values.yaml` используется для указания значений по умолчанию для параметров, которые могут быть изменены при установке чарта. Настройте его следующим образом:

```yml
replicaCount: 2

image:
  repository: nginx
  tag: "1.21.0"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

serviceAccount:
  create: true
  name: ""

ingress:
  enabled: false
  annotations: {}
  hosts:
    - host: chart-example.local
      paths: []
  tls: []

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 5
  targetCPUUtilizationPercentage: 80

resources: {}

nodeSelector: {}

tolerations: []

affinity: {}
```

Этот файл содержит следующие настройки:

-   **replicaCount**: Количество реплик приложения.
    
-   **image**: Настройки образа контейнера NGINX, включая версию (`tag`).
    
-   **service**: Тип сервиса и порт, через который будет доступен NGINX.
    
-   **serviceAccount**: Создание учетной записи сервиса для чарта.
    
-   **ingress**: Параметры для Ingress (по умолчанию выключено).
    
-   **autoscaling**: Параметры для авто-масштабирования (по умолчанию выключено).
    

## Шаблоны чарта

Теперь настроим шаблоны в папке templates, которые будут использовать значения из `values.yaml`.

#### templates/service.yaml

Шаблон для создания Kubernetes-сервиса:

```yml
apiVersion: v1
kind: Service
metadata:
  name: {{ include "nginx-chart.fullname" . }}
  labels:
    app: {{ include "nginx-chart.name" . }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: 80
  selector:
    app: {{ include "nginx-chart.name" . }}
```

#### templates/deployment.yaml

Шаблон для создания деплоймента NGINX:

```yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "nginx-chart.fullname" . }}
  labels:
    app: {{ include "nginx-chart.name" . }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ include "nginx-chart.name" . }}
  template:
    metadata:
      labels:
        app: {{ include "nginx-chart.name" . }}
    spec:
      serviceAccountName: {{ if .Values.serviceAccount.create }}{{ include "nginx-chart.serviceAccountName" . }}{{ else }}{{ .Values.serviceAccount.name }}{{ end }}
      containers:
        - name: nginx
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: 80
```

#### templates/serviceaccount.yaml

Шаблон для создания учетной записи сервиса:

```yml
{{- if .Values.serviceAccount.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "nginx-chart.serviceAccountName" . }}
{{- end }}
```

## Проверка и установка чарта

Проверьте чарт на наличие ошибок:

```shell
helm lint ./nginx-chart
```

Установите чарт:

```shell
helm install test-nginx ./nginx-chart
```

Проверьте статус релиза:

```shell
helm status test-nginx
```

Проверьте состояние подов:

```shell
kubectl get pods
```

## Удаление чарта

Когда приложение больше не нужно, его можно удалить:

```shell
helm uninstall test-nginx
```
