Поделиться через


Использование параметров параметра Helm для предотвращения удаления при сбое установки

Развертывания службы сети сайта (SNS) могут завершиться ошибкой, так как базовое развертывание сетевой функции (NF) не удается установить helm. Оператор Azure Service Manager (AOSM) удаляет неудачные развертывания из целевого кластера Kubernetes по умолчанию, чтобы сохранить ресурсы. Helm install Сбои часто требуют сохранения ресурсов в кластере, чтобы разрешить отладку сбоя. В этой статье описывается, как изменить шаблон NF ARM для переопределения этого поведения, установив helm install --atomic для параметра значение false.

Необходимые компоненты

  • Необходимо подключить NF к AOSM с помощью расширения Az CLI AOSM. В этой статье приводятся ссылки на структуру папок и выходные данные файлов с помощью интерфейса командной строки и примеры на основе интерфейса командной строки.
  • Сбои установки Helm могут быть сложными. Отладка требует технических знаний нескольких технологий, а также знаний о домене NF
  • Вам требуются Contributor назначения ролей в группе ресурсов, содержащей управляемое хранилище артефактов AOSM.
  • Подходящая интегрированная среда разработки, например Visual Studio Code
  • ИНТЕРФЕЙС командной строки ORAS

Внимание

Настоятельно рекомендуется проверить, helm install успешно ли выполнено выполнение пакета Helm в целевой среде Kubernetes, подключенной к Arc, перед попыткой развертывания с помощью AOSM.

Переопределение --atomic для одной диаграммы helm NF

В этом разделе объясняется, как переопределить --atomic для NF, состоящей из одной диаграммы helm.

Поиск и изменение шаблона NF BICEP

  1. Перейдите к каталогу nsd-cli-output , откройте artifacts каталог и откройте <nf-arm-template>.bicep файл. <nf-arm-template> настраивается в файле ввода расширения AZ AOSM CLI NSD. Вы можете убедиться, что у вас есть правильный файл, сравнивая с приведенным ниже примером шаблона для вымышленной контейнерной сетевой функции Contoso (CNF).

    @secure()
    param configObject object
    
    var resourceGroupId = resourceGroup().id
    
    var identityObject = (configObject.managedIdentityId == '')  ? {
      type: 'SystemAssigned'
    } : {
      type: 'UserAssigned'
      userAssignedIdentities: {
        '${configObject.managedIdentityId}': {}
      }
    }
    
    var nfdvSymbolicName = '${configObject.publisherName}/${configObject.nfdgName}/${configObject.nfdv}'
    
    resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions@2023-09-01' existing = {
      name: nfdvSymbolicName
      scope: resourceGroup(configObject.publisherResourceGroup)
    }
    
    resource nfResource 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = [for (values, i) in configObject.deployParameters: {
      name: '${configObject.nfdgName}${i}'
      location: configObject.location
      identity: identityObject
      properties: {
        networkFunctionDefinitionVersionResourceReference: {
          id: nfdv.id
          idType: 'Open'
        }
        nfviType: 'AzureArcKubernetes'
        nfviId: (configObject.customLocationId == '') ? resourceGroupId : configObject.customLocationId
        allowSoftwareUpdate: true
        configurationType: 'Open'
        deploymentValues: string(values)
      }
    }]
    
  2. Найдите имя приложения сетевой функции, перейдя cnf-cli-output к каталогу, открыв nfDefinition каталог и скопировав значение из единственной записи в массиве networkFunctionApplications в ресурсе nfdv . Убедитесь, что у вас есть правильное значение, сравнивая с приведенным ниже вымышленным фрагментом кода Contoso BICEP. В этом случае имя приложения сетевой функции .Contoso

    resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions@2023-09-01' = {
      parent: nfdg
      name: nfDefinitionVersion
      location: location
      properties: {
        deployParameters: string(loadJsonContent('deployParameters.json'))
        networkFunctionType: 'ContainerizedNetworkFunction'
        networkFunctionTemplate: {
          nfviType: 'AzureArcKubernetes'
          networkFunctionApplications: [
            {
              artifactType: 'HelmPackage'
              name: 'Contoso'
    
  3. Измените шаблон, чтобы переопределить параметр установки --atomic helm по умолчанию, добавив следующую конфигурацию в nfResource свойства шаблона NF ARM:

    roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
    
  4. Убедитесь, что вы правильно сделали это изменение, сравнивая следующий фрагмент кода из примера NF Contoso

resource nfResource 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = [for (values, i) in configObject.deployParameters: {
  name: '${configObject.nfdgName}${i}'
  location: configObject.location
  identity: identityObject
  properties: {
    networkFunctionDefinitionVersionResourceReference: {
      id: nfdv.id
      idType: 'Open'
    }
    nfviType: 'AzureArcKubernetes'
    nfviId: (configObject.customLocationId == '') ? resourceGroupId : configObject.customLocationId
    allowSoftwareUpdate: true
    configurationType: 'Open'
    deploymentValues: string(values)
    roleOverrideValues: [
      '{"name":"Contoso-one","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
    ]}}]

Создайте измененный шаблон ARM и отправьте его в хранилище артефактов

  1. Перейдите к каталогу, созданному nsd-cli-output/artifacts командой az aosm nsd build , и создайте шаблон ARM сетевой функции из файла BICEP, созданного интерфейсом командной строки.

    bicep build <nf-name>.bicep
    
  2. Создайте учетные данные маркера карты область из манифеста артефакта, созданного в командеaz aosm nsd publish.

    Внимание

    Необходимо использовать манифест Артефакта, созданный в команде az aosm nsd publish . Шаблон NF ARM объявлен только в этом манифесте, поэтому только маркер карты область, созданный этим манифестом, позволит отправлять (или вытягивать) шаблон NF ARM в Хранилище артефактов.

    az rest --method POST --url 'https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.HybridNetwork/publishers/<publisher>/artifactStores/<artifact-store>/artifactManifests/<artifactManifest>/listCredential?api-version=2023-09-01'
    
  3. Войдите в управляемый AOSM ACR. Имя управляемого ACR ACR AOSM можно найти в портал Azure обзоре ресурсов Магазина артефактов. Имя пользователя и пароль можно найти в выходных данных предыдущего шага.

    oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
    
  4. Используйте ORAS для отправки шаблона ARM сетевой функции в управляемый Реестр контейнеров Azure AOSM (ACR). <arm-template-version> Тег артефакта должен быть в 1.0.0 формате. Значение <arm-template-name> и <arm-template-version> должно соответствовать значениям в манифесте артефакта, созданном в команде az aosm nsd publish .

Переопределение --atomic для многоуровневой диаграммы NF

Многие сложные NFS создаются из нескольких диаграмм helm. Эти NFS выражаются в версии определения сетевой функции (NFDV) с несколькими приложениями сетевой функции и устанавливаются с несколькими helm install командами — по одной на диаграмму helm.

Процесс переопределения --atomic для многоэлмейной NF совпадает с одним helm NF, помимо изменения, сделанного в шаблон ARM.

Вымышленный мульти-helm NF, Contoso-multi-helm, состоит из трех диаграмм helm. Его NFDV имеет три сетевых приложения-функции. Одно сетевое приложение-функция сопоставляется с одной диаграммой helm. Эти сетевые приложения-функции имеют свойство name, равные Contoso-one, Contoso-twoи Contoso-three соответственно. Ниже приведен пример фрагмента NFDV, определяющего эту сетевую функцию.

resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions@2023-09-01' = {
  parent: nfdg
  name: nfDefinitionVersion
  location: location
  properties: {
    deployParameters: string(loadJsonContent('deployParameters.json'))
    networkFunctionType: 'ContainerizedNetworkFunction'
    networkFunctionTemplate: {
      nfviType: 'AzureArcKubernetes'
      networkFunctionApplications: [
        {
          artifactType: 'HelmPackage'
          name: 'Contoso-one'
          ...
        },
        {
          artifactType: 'HelmPackage'
          name: 'Contoso-two'
          ...
        },
        {
          artifactType: 'HelmPackage'
          name: 'Contoso-three'
          ...
        }]
      }
    }
  }

Параметр --atomic можно переопределить для каждого из этих приложений сетевых функций независимо. Ниже приведен пример шаблона BICEP NF, который переопределяет --atomic false значение for Contoso-one и Contoso-two, но задает atomic значение true для Contoso-three.

resource nfResource 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = [for (values, i) in configObject.deployParameters: {
  name: '${configObject.nfdgName}${i}'
  location: configObject.location
  identity: identityObject
  properties: {
    networkFunctionDefinitionVersionResourceReference: {
      id: nfdv.id
      idType: 'Open'
    }
    nfviType: 'AzureArcKubernetes'
    nfviId: (configObject.customLocationId == '') ? resourceGroupId : configObject.customLocationId
    allowSoftwareUpdate: true
    configurationType: 'Open'
    deploymentValues: string(values)
    roleOverrideValues: [
      '{"name":"Contoso-one","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
      '{"name":"Contoso-two","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
      '{"name":"Contoso-three","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
    ]}}]

Следующие шаги

Теперь можно повторить развертывание SNS. Развертывание можно отправить снова с помощью ARM, BICEP или REST API AOSM. Вы также можете удалить неисправные SNS с помощью обзора портал Azure SNS и повторно развернуть после краткого руководства оператора, заменив параметры NF краткого руководства параметрами сетевой функции. Выпуски helm, развернутые в кластере Kubernetes, не будут удалены при сбое. Отладка сбоев развертывания SNS описывает набор средств для отладки распространенных сбоев установки helm.