Использование параметров параметра Helm для предотвращения удаления при сбое установки
Развертывания службы сети сайта (SNS) могут завершиться ошибкой, так как базовое развертывание сетевой функции (NF) не удается установить helm. Оператор Azure Service Manager (AOSM) удаляет неудачные развертывания из целевого кластера Kubernetes по умолчанию, чтобы сохранить ресурсы. Helm install
Сбои часто требуют сохранения ресурсов в кластере, чтобы разрешить отладку сбоя. В этой статье описывается, как изменить шаблон NF ARM для переопределения этого поведения, установив helm install --atomic
для параметра значение false.
Необходимые компоненты
- Необходимо подключить NF к AOSM с помощью расширения Az CLI AOSM. В этой статье приводятся ссылки на структуру папок и выходные данные файлов с помощью интерфейса командной строки и примеры на основе интерфейса командной строки.
- Сбои установки Helm могут быть сложными. Отладка требует технических знаний нескольких технологий, а также знаний о домене NF
- Рабочие знания о Хелме
- Рабочие знания о командах Kubernetes и kubectl
- Рабочие знания о извлечении и отправке артефактов в Реестр контейнеров Azure
- Вам требуются
Contributor
назначения ролей в группе ресурсов, содержащей управляемое хранилище артефактов AOSM. - Подходящая интегрированная среда разработки, например Visual Studio Code
- ИНТЕРФЕЙС командной строки ORAS
Внимание
Настоятельно рекомендуется проверить, helm install
успешно ли выполнено выполнение пакета Helm в целевой среде Kubernetes, подключенной к Arc, перед попыткой развертывания с помощью AOSM.
Переопределение --atomic
для одной диаграммы helm NF
В этом разделе объясняется, как переопределить --atomic
для NF, состоящей из одной диаграммы helm.
Поиск и изменение шаблона NF BICEP
Перейдите к каталогу
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) } }]
Найдите имя приложения сетевой функции, перейдя
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'
Измените шаблон, чтобы переопределить параметр установки
--atomic
helm по умолчанию, добавив следующую конфигурацию вnfResource
свойства шаблона NF ARM:roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
Убедитесь, что вы правильно сделали это изменение, сравнивая следующий фрагмент кода из примера 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 и отправьте его в хранилище артефактов
Перейдите к каталогу, созданному
nsd-cli-output/artifacts
командойaz aosm nsd build
, и создайте шаблон ARM сетевой функции из файла BICEP, созданного интерфейсом командной строки.bicep build <nf-name>.bicep
Создайте учетные данные маркера карты область из манифеста артефакта, созданного в команде
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'
Войдите в управляемый AOSM ACR. Имя управляемого ACR ACR AOSM можно найти в портал Azure обзоре ресурсов Магазина артефактов. Имя пользователя и пароль можно найти в выходных данных предыдущего шага.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
Используйте 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.