Общие сведения о требованиях Helm
Helm — это менеджер пакетов для Kubernetes, который помогает упростить управление жизненным циклом приложений. Пакеты Helm называются диаграммами и состоят из файлов конфигурации и шаблонов YAML. После выполнения операции Helm диаграммы отрисовываются в файлы манифеста Kubernetes, чтобы активировать соответствующее действие жизненного цикла приложения. Для наиболее эффективной интеграции с Azure Operator Service Manager (AOSM) издатель должен учитывать определенные рекомендации при разработке диаграмм Helm.
Рекомендации по рееструUrl и imagePullSecrets
Для каждой диаграммы Helm обычно требуется реестрUrl и imagePullSecrets. Чаще всего издатель предоставляет эти параметры в файле values.yaml. Сначала AOSM зависит от издателя, предоставляющего эти значения строго, поэтому их можно заменить соответствующими значениями Azure во время развертывания. Сверхурочные, не все издатели могут легко соответствовать строгой обработке этих значений, необходимых AOSM.
- Некоторые диаграммы скрывают реестрUrl и/или imagePullSecrets за условными ограничениями или другими ограничениями значений, которые не всегда соблюдались.
- Некоторые диаграммы не объявляют registryUrl и/или imagePullSecrets как ожидаемую именованную строку вместо массива.
Чтобы уменьшить строгие требования к соответствию издателям, AOSM позже представил два улучшенных метода обработки этих значений. Сначала внедряет Реестр кластеровArtifactStoreDetail и, наконец, кластерный реестр. Эти два новых метода не зависят от допустимого реестраUrl или imagePullSecrets, отображаемых в пакете Helm. Вместо этого эти методы внедряют эти значения непосредственно в операции pod от имени сетевой функции.
Сводка по методу реестраUrl и imagePullSecrets
Все три метода поддерживаются и описаны в этой статье. Издатель должен выбрать оптимальный вариант для их сетевой функции и варианта использования.
Наследство.
- Требует от издателя параметризировать registryUrl и imagePullSecrets в значениях helm и шаблонах развертывания для подстановки.
- Изображения размещаются в Реестр контейнеров Azure издателя (ACR).
InjectArtifactStoreDetail.
- Использует веб-перехватчик для внедрения реестраUrl и imagePullSecrets непосредственно в операции pod с минимальными зависимостями от helm.
- Изображения по-прежнему размещаются в ACR издателя.
Реестр кластеров.
- Использует веб-перехватчик для внедрения реестраUrl и imagePullSecrets непосредственно в операции pod без зависимости от helm.
- Образы размещаются в локальном реестре кластеров расширений NFO.
Примечание.
Во всех трех случаях AOSM подставляет значения AOSM для любых значений, предоставляемых издателем в шаблонах. Единственное различие заключается в методе подстановки.
Устаревшие требования к рееструUrl и imagePullSecrets
Диспетчер служб Оператора Azure (AOSM) использует службу диспетчера сетевых функций (NFM) для развертывания контейнерных сетевых функций (CNFs). Используя устаревший метод, NFM заменяет реестр контейнеров AOSM и imagePullSecrets значениями helm во время развертывания сетевой функции (NF).
Использование устаревшего метода
В следующем шаблоне развертывания helm показан пример того, как издатель должен предоставлять реестрPath и imagePullSecrets для совместимости с устаревшим подходом AOSM.
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
файле показан пример того, как издатель может легко задать требования реестраPath и imagePullSecretsvalue для обеспечения совместимости с устаревшим подходом AOSM.
{
"$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 request payload
примере показано, как издатель может предоставлять значения registryPath и imagePullSecretsvalue для совместимости с устаревшим подходом AOSM.
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
В следующем values.yaml
примере показано, как издатель может предоставлять значения registryPath и imagePullSecretsvalue для совместимости с устаревшим подходом AOSM.
global:
imagePullSecrets: []
registryPath: “”
Примечание.
- Параметр registryPath устанавливается без префикса, например
https://
илиoci://
. При необходимости издатель должен определить префикс в пакете helm. - imagePullSecrets и registryPath должны быть предоставлены на шаге подключения NFDVersion.
Другие рекомендации с устаревшим методом
Издатель должен учитывать следующие рекомендации при использовании устаревшего метода:
- Избегайте ссылок на внешний реестр
- Выполнение ручной проверки
- Обеспечение репозитория и тегов статических образов
Избегайте ссылок на внешний реестр
Пользователи должны избегать использования ссылок на внешний реестр. Например, если deployment.yaml использует жестко закодированный путь к реестру или внешний реестр ссылается на него, он завершается ошибкой проверки.
Выполнение ручной проверки
Просмотрите созданные образы и спецификации контейнеров, чтобы убедиться, что образы имеют префикс реестра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 должна содержать репозиторий статических образов и теги. Статические значения задаются следующим образом:
- Задание их в строке изображения или
- Задав их в значениях.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
image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}
Требования injectArtifactStoreDetails для реестраUrl и imagePullSecrets
В некоторых случаях сторонние диаграммы helm могут не соответствовать требованиям AOSM для реестраURL. В этом случае функцию injectArtifactStoreDetails можно использовать, чтобы избежать внесения изменений в соответствие пакетам helm. С поддержкой injectArtifactStoreDetails метод веб-перехватчика используется для динамического внедрения правильного реестраUrl и imagePullSecrets во время операций pod. Это переопределяет значения, настроенные в пакете helm.
Использование метода injectArtifactStoreDetails
Чтобы включить injectArtifactStoreDetails, задайте для параметра installOptions в разделе NF resource RoleOverrides значение true, как показано в следующем примере.
resource networkFunction 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = {
name: nfName
location: location
properties: {
nfviType: 'AzureArcKubernetes'
networkFunctionDefinitionVersionResourceReference: {
id: nfdvId
idType: 'Open'
}
allowSoftwareUpdate: true
nfviId: nfviId
deploymentValues: deploymentValues
configurationType: 'Open'
roleOverrideValues: [
// Use inject artifact store details feature on test app 1
'{"name":"testapp1", "deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"atomic":"false","wait":"false","timeout":"60","injectArtifactStoreDetails":"true"},"upgradeOptions": {"atomic": "false", "wait": "true", "timeout": "100", "injectArtifactStoreDetails": "true"}}}}}'
]
}
}
Примечание.
Пакет диаграмм helm должен по-прежнему предоставлять правильно отформатированные значения registryURL и imagePullSecrets.
Требования к реестру кластера для реестраUrl и imagePullSecrets
Сведения об использовании реестра кластеров см. в документации по концепции.
Ограничения неизменяемости диаграммы
Ограничения неизменяемости препятствуют изменению файла или каталога. Например, неизменяемый файл нельзя изменить или переименовать. Пользователи должны избегать использования изменяемых тегов, таких как последние, разработки или стабильные. Например, если deployment.yaml использовал "latest" для параметра . Values.image.tag развертывание завершится ошибкой.
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
Разделение объявлений и использования диаграммы CRD
Мы рекомендуем разделить объявление и использование определений ресурсов клиента (CRD) на отдельные диаграммы helm для поддержки обновлений. Подробные сведения см. в статье method-2-separate-chart