Создание и установка диаграммы Helm

Завершено

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

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

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

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

Как Helm обрабатывает диаграмму?

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

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

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

Определение файла 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.