Бесплатная миграция IT-инфраструктуры в облако
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Создание Helm-чарта

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

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

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

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-ресурсов.

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

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

helm create nginx-chart

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

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:

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 используется для указания значений по умолчанию для параметров, которые могут быть изменены при установке чарта. Настройте его следующим образом:

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-сервиса:

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:

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

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

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

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

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

helm lint ./nginx-chart

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

helm install test-nginx ./nginx-chart

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

helm status test-nginx

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

kubectl get pods

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

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

helm uninstall test-nginx
Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев