Требования к пакету Helm

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

Требования к URL-адресу реестра и imagepullsecrets

При разработке пакета helm обычно используется URL-адрес сервера реестра контейнеров в значениях. Сохранение URL-адреса сервера реестра контейнеров в значениях полезно для перемещения артефактов между каждым реестром контейнеров среды. Оператор Azure Service Manager (AOSM) использует службу диспетчера сетевых функций (NFM) для развертывания контейнерной сетевой функции (CNF). Диспетчер сетевых функций (NFM) содержит функции для внедрения расположения сервера реестра контейнеров и imagepullsecrets в значения helm во время развертывания сетевой функции (NF). ImagePullSecret — это маркер авторизации, также известный как секрет, который хранит учетные данные Docker, используемые для доступа к реестру. Например, если необходимо развернуть приложение с помощью развертывания Kubernetes, можно определить развертывание, например следующий пример:

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nginx-deployment 
  labels: 
    app: nginx 
spec: 
  replicas: 3 
  selector: 
    matchLabels: 
      app: nginx 
  template: 
    metadata: 
      labels: 
        app: nginx 
    spec: 
      {{- if .Values.global.imagePullSecrets }} 
      imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 8 }} 
      {{- end }} 
      containers: 
      - name: contosoapp 
        image:{{ .Values.global.registryPath }}/contosoapp:1.14.2 
        ports: 
        - containerPort: 80 

values.schema.json — это файл, позволяющий легко задать требования и ограничения значений в одном расположении для диаграмм Helm. В этом файле определите registryPath и imagePullSecrets в качестве обязательных свойств.

{ 
  "$schema": "http://json-schema.org/draft-07/schema#", 
  "title": "StarterSchema", 
  "type": "object", 
  "required": ["global"], 
  "properties": { 
      "global" : {
          "type": "object",
          "properties": {
              “registryPath”: {“type”: “string”}, 
              “imagePullSecrets”: {“type”: “string”}, 
          }
          "required": [ "registryPath", "imagePullSecrets" ], 
      } 
   } 
} 

Полезные данные запроса NFDVersion предоставляют следующие значения в реестреValuesPaths:

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

Во время развертывания NF оператор сетевой функции (NFO) задает реестрPath правильному расположению сервера Реестр контейнеров Azure (ACR). Например, NFO выполняет следующую эквивалентную команду:

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

Примечание.

РеестрPath устанавливается без префикса, например https:// или oci://. Если префикс требуется в пакете helm, издатели должны определить его в пакете.

values.yaml — это файл, содержащий значения по умолчанию для диаграммы Helm. Это файл YAML, определяющий значения по умолчанию для диаграммы. В файле values.yaml должны присутствовать два типа переменных; imagePullSecrets и registryPath. Каждый из них описан в таблице.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Имя. Тип Описание
imagePullSecrets Строка imagePullSecrets — это массив имен секретов, которые используются для извлечения образов контейнеров
registryPath Строка registryPath — это AzureContainerRegistry расположение сервера

imagePullSecrets и registryPath должны быть предоставлены на шаге подключения NFDVersion.

NFO, запущенный в кластере, заполняет эти две переменные (imagePullSecrets и registryPath) во время выпуска helm с помощью команды helm install –set.

Дополнительные сведения см. в статье "Извлечение образа-частного реестра"

Ограничения неизменяемости

Ограничения неизменяемости препятствуют изменению файла или каталога. Например, неизменяемый файл нельзя изменить или переименовать, а файл, позволяющий выполнять операции добавления, нельзя удалять, изменять или переименовать.

Избегайте использования изменяемых тегов

Пользователи должны избегать использования изменяемых тегов, таких как последние, разработки или стабильные. Например, если deployment.yaml использовал "latest" для параметра . Values.image.tag развертывание завершится ошибкой.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

Избегайте ссылок на внешний реестр

Пользователи должны избегать использования ссылок на внешний реестр. Например, если deployment.yaml использует жестко закодированный путь к реестру или внешний реестр ссылается на него, он завершается ошибкой проверки.

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

Рекомендации

Разделение объявления и использования настраиваемых определений ресурсов (CRD) и использование с помощью ручной проверки рекомендуется. Каждый из них описан в следующих разделах.

Разделение объявления и использования CRD

Мы рекомендуем разделить объявление и использование CRD на отдельные диаграммы helm для поддержки обновлений. Подробные сведения см. в статье method-2-separate-chart

Проверка вручную

Просмотрите созданные образы и спецификации контейнеров, чтобы убедиться, что образы имеют префикс реестраURL и imagePullSecrets заполняются secretName.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

ИЛИ

 helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
 kubectl create secret <secretName> regcred --docker-server=<registryURL> --dockerusername=<regusername> --docker-password=<regpassword>

Репозиторий и теги статических образов

Каждая диаграмма helm должна содержать репозиторий статических образов и теги. Пользователи должны задать репозиторий изображений и тег статическим значениям. Статические значения можно задать следующими способами:

  • Путем жесткого написания их в строке изображения или
  • Задание значений в values.yaml и не предоставление этих значений в версии конструктора сетевых функций (NFDV).

Версия конструктора сетевых функций (NFDV) должна сопоставляться со статическим набором диаграмм и изображений helm. Диаграммы и изображения обновляются только путем публикации новой версии конструктора сетевых функций (NFDV).

 image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“

or

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
 
YAML values.yaml
image:
  repository: contosoapp
  tag: 1.14.2