Создание и установка диаграммы Helm
Диаграммы Helm упрощают развертывание приложений в любом кластере Kubernetes. Вы используете Helm для создания шаблона информации о развертывании вашего приложения в виде диаграммы Helm, которую затем используете для развертывания приложения.
Предположим, что ваша команда разработчиков уже развернула веб-сайт домашнего магазина вашей компании в кластере AKS. Команда создает три файла для развертывания веб-сайта:
- Манифест развертывания , описывающий установку и запуск приложения в кластере.
- Манифест службы , описывающий, как предоставлять веб-сайт в кластере и
- Манифест входящего трафика , описывающий, как трафик извне кластера направляется в веб-приложение.
Команда развертывает эти файлы в каждой из трех сред в рамках жизненного цикла разработки программного обеспечения. Каждый из трех файлов обновляется с помощью переменных и значений, относящихся к среде. Так как каждый файл жестко закодирован, обслуживание этих файлов подвержено ошибкам.
Как Helm обрабатывает диаграмму?
Клиент Helm реализует подсистему шаблонов на основе языка Go, которая анализирует все доступные файлы в папках диаграммы. Шаблонизатор создает файлы манифеста Kubernetes, объединяя шаблоны в папке templates/
чарта со значениями из файлов Chart.yaml
и values.yaml
.
После того как файлы манифеста будут доступны, клиент может установить, обновить и удалить приложение, определенное в созданных файлах манифеста.
Определение файла Chart.yaml
Chart.yaml
является одним из необходимых файлов в определении диаграммы Helm и предоставляет сведения о диаграмме. Содержимое файла состоит из трех обязательных полей и различных необязательных полей.
К трем обязательным полям относятся:
-
apiVersion
: используемая версия API диаграммы. Вы устанавливаете версиюv2
для диаграмм, использующих Helm 3. -
name
: имя диаграммы. -
version
: номер версии диаграммы, в которой используется семантическая версия версии 2.0.0 и следует нотации номера версииMAJOR.MINOR.PATCH
.
В следующем примере показано содержимое базового файла Chart.yaml
:
apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore, cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0
Обратите внимание на использование поля type
в примере файла. Вы можете создавать диаграммы для установки приложений или библиотек. Тип диаграммы по умолчанию — application
и можно задать library
, чтобы указать, что диаграмма установит библиотеку.
Многие необязательные поля доступны для настройки процесса развертывания диаграммы. Например, можно использовать поле dependencies
для указания дополнительных требований к диаграмме, как, например, веб-приложение, зависящее от базы данных.
Заметка
Подробное покрытие всех необязательных полей выходит за рамки этого модуля. Однако ссылка на документацию Helm доступна в сводном разделе модуля.
Определение шаблона диаграммы
Шаблон диаграммы Helm — это файл, описывающий различные файлы манифеста типа развертывания. Шаблоны диаграмм написаны на языке шаблона Go и предоставляют функции шаблона для автоматизации создания файлов манифеста объектов Kubernetes.
Файлы шаблонов хранятся в папке templates/
диаграммы. Модуль шаблонов обрабатывает эти файлы, чтобы создать окончательный манифест объекта.
Например, предположим, что ваша команда разработчиков использует следующий файл манифеста развертывания для развертывания переднего компонента хранилища домашних животных решения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: store-front
template:
metadata:
labels:
app: store-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
- containerPort: 8080
name: store-front
env:
- name: VUE_APP_ORDER_SERVICE_URL
value: "http://order-service:3000/"
- name: VUE_APP_PRODUCT_SERVICE_URL
value: "http://product-service:3002/"
resources:
requests:
cpu: 1m
memory: 200Mi
limits:
cpu: 1000m
memory: 512Mi
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 3
periodSeconds: 3
livenessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 5
initialDelaySeconds: 3
periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
ports:
- port: 80
targetPort: 8080
selector:
app: store-front
Обратите внимание, что расположение образа контейнера жестко закодировано с помощью синтаксиса {{.Values.<property>}}
. Синтаксис позволяет создавать заполнители для каждого настраиваемого значения.
Процесс создания диаграмм Helm вручную мучен. Простой способ создать диаграмму Helm — использовать команду helm create
для создания новой диаграммы Helm. Затем вы настраиваете автоматически созданные файлы в соответствии с требованиями приложения.
Определение файла values.yaml
Значения диаграммы используются для настройки конфигурации диаграммы Helm. Значения диаграммы могут быть предопределены или предоставлены пользователем во время развертывания диаграммы.
предопределенное значение — это значение, учитывающее регистр, которое задаётся в контексте диаграммы Helm и не может быть изменено пользователем. Например, можно использовать Release.Name
для ссылки на имя выпуска или Release.IsInstall
, чтобы проверить, является ли текущая операция установкой.
Можно также использовать предопределенные значения для извлечения данных из содержимого Chart.yaml
. Например, если вы хотите проверить версию диаграммы, вы будете ссылаться на Chart.Version
. Помните, что можно ссылаться только на известные поля. Стандартные значения можно рассматривать как константы, используемые в созданных шаблонах.
Синтаксис для включения имен значений в файл шаблона включает в себя заключение имени значения в двойные фигурные скобки, например {{.Release.Name}}
. Обратите внимание на использование периода перед именем значения. При использовании периода таким образом период работает как оператор подстановки и указывает текущую область переменной.
Например, следующий фрагмент YAML содержит словарь, определенный в файле значений:
object:
key: value
Чтобы получить доступ к значению в шаблоне, можно использовать следующий синтаксис:
{{ .Values.object.key }}
предоставленное значение позволяет обрабатывать произвольные значения в шаблоне диаграммы. Файл values.yaml
определяет эти значения.
В этом примере команда разработчиков позволяет использовать следующие настраиваемые значения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
...
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
...
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
...
Ниже приведен пример файла values.yaml
:
...
replicaCount: 1
...
storeFront:
image:
repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
tag: "latest"
serviceType: LoadBalancer
...
После применения значений обработчик шаблонов окончательный результат будет выглядеть следующим образом:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: 1
...
containers:
- name: store-front
image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
ports:
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: LoadBalancer
...
Использование репозитория Helm
Репозиторий Helm — это выделенный HTTP-сервер, который хранит сведения на диаграммах Helm. Вы настраиваете репозитории Helm с клиентом Helm для установки диаграмм из репозитория с помощью команды helm repo add
.
Например, вы можете добавить репозиторий Azure Marketplace Helm в локальный клиент Helm, выполнив следующую команду:
helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo
Сведения о диаграммах, доступных в репозитории, кэшируются на узле клиента. Необходимо периодически обновлять кэш, чтобы получить последние сведения репозитория с помощью команды helm repo update
.
Команда helm search repo
позволяет искать диаграммы во всех локальных репозиториях Helm. Вы можете запустить команду helm search repo
самостоятельно, чтобы вернуть список всех известных диаграмм Helm для каждого добавленного репозитория. Результат выводит имя, версию диаграммы и версию приложения, развернутую с помощью диаграммы, как показано в следующем примере.
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/airflow 11.0.8 2.1.4 Apache Airflow is a platform to programmaticall...
azure-marketplace/apache 8.8.3 2.4.50 Chart for Apache HTTP Server
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
azure-marketplace/bitnami-common 0.0.7 0.0.7 Chart with custom tempaltes used in Bitnami cha...
azure-marketplace/cassandra 8.0.5 4.0.1 Apache Cassandra is a free and open-source dist...
Для поиска определенной диаграммы можно добавить в команду helm search repo
термин поиска. Например, если вы ищете диаграмму на основе ASP.NET, можно использовать следующую команду:
helm search repo aspnet
В этом примере локальный клиент имеет два репозитория зарегистрированных и возвращает результат из каждого из них, как показано в следующем примере выходных данных:
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
bitnami/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
Как протестировать диаграмму Helm
Helm предоставляет возможность генерировать файлы манифеста, которые шаблонизатор создает из чарта. Эта функция позволяет протестировать диаграмму перед выпуском, объединив два дополнительных параметра: --dry-run
и debug
. Параметр --dry-run
гарантирует, что установка осуществляется в режиме симуляции, а параметр --debug
включает подробный вывод.
helm install --debug --dry-run my-release ./chart-name
Команда содержит сведения об используемых значениях и всех созданных файлах. Возможно, вам потребуется прокрутить страницу, чтобы увидеть все сгенерированные данные.
Установка диаграммы Helm
Для установки диаграммы используется команда helm install
. Диаграмму Helm можно установить из любого из следующих расположений:
- Папки с диаграммами
- Упакованные диаграммы в архиве tar
.tgz
- Репозитории Helm
Однако необходимые параметры отличаются в зависимости от расположения диаграммы. Во всех случаях для команды install
требуется имя диаграммы для установки и имя выпуска, создаваемого установкой.
Вы можете установить локальную диаграмму с помощью распакованной папки файлов или упакованного .tgz
архива tar. Чтобы установить диаграмму, команда helm
ссылается на локальную файловую систему для расположения диаграммы. Ниже приведен пример команды установки, которая развернет выпуск распакованной диаграммы:
helm install my-release ./chart-name
В предыдущем примере параметр my-release
— это имя выпуска, а параметр ./chart-name
— имя пакета распакованных диаграмм.
Упакованная диаграмма устанавливается путем ссылки на имя упакованного файла диаграммы. В следующем примере показан синтаксис для того же приложения, который теперь упакован как архив tar:
helm install my-release ./chart-name.tgz
При установке диаграммы из репозитория Helm вы используете ссылку на диаграмму в качестве имени диаграммы. Ссылка на диаграмму включает два параметра: имя репозитория и имя диаграммы, как показано в следующем примере:
helm install my-release repository-name/chart-name
В примере параметр repository-name/chart-name
содержит ссылку на репозиторий, repository-name
и имя диаграммы, chart-name
.