Требования к пакету 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