Бөлісу құралы:


Общие сведения о требованиях 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