Создание и установка чарта Helm

Завершено

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

Предположим, что ваша команда разработчиков уже развернула веб-сайт домашнего магазина вашей компании в кластере AKS. Команда создает три файла для развертывания веб-сайта:

  • Манифест развертывания, описывающий установку и запуск приложения в кластере,
  • Манифест службы, описывающий предоставление веб-сайта в кластере и
  • Манифест входящего трафика, описывающий, как трафик извне кластера направляется в веб-приложение.

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

Как Helm обрабатывает чарт?

Клиент Helm реализует механизм шаблонов на основе языка Go, который анализирует все доступные файлы в папках чарта. Обработчик шаблонов создает файлы манифеста Kubernetes, объединяя шаблоны в папке templates/ чарта со значениями из файлов Chart.yaml и values.yaml.

A diagram shows a process parsing a Helm template file and values file to create and deploy an application to a Kubernetes cluster using manifest files.

После того как файлы манифеста будут доступны, клиент может установить, обновить и удалить приложение, определенное в созданных файлах манифеста.

Определение файла 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 можно установить из любого из следующих расположений:

  • Папки диаграммы
  • Упакованные диаграммы архива .tgz tar
  • Репозитории 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.