Usar parâmetros de opção do Helm para evitar a exclusão em caso de falha na instalação
As implantações do SNS (Serviço de Rede do Site) podem falhar porque uma implantação de NF (Função de Rede) subjacente não consegue instalar o helm. O AOSM (Gerenciador de Serviço do Operador do Azure) remove implantações com falha do cluster Kubernetes de destino por padrão para preservar os recursos. Geralmente, as falhas de Helm install
requerem que os recursos persistam no cluster para permitir que a falha seja depurada. Este artigo de instruções aborda como editar o modelo do ARM da NF para substituir esse comportamento definindo o parâmetro helm install --atomic
como false.
Pré-requisitos
- Você deve ter integrado a NF ao AOSM usando a extensão AOSM da CLI do Az. Este artigo faz referência à estrutura de pastas e à saída de arquivos pela CLI e fornece exemplos baseados na CLI
- As falhas de instalação do Helm podem ser complexas. A depuração requer um conhecimento técnico de várias tecnologias, além de dominar o conhecimento da sua NF
- Conhecimento prático de Helm
- Conhecimento de trabalho dos comandos do Kubernetes e kubectl
- Conhecimento de trabalho de extração e envio de artefatos por push para o Registro de Contêiner do Azure
- Você precisa das atribuições de função
Contributor
no grupo de recursos que contém o Repositório de artefatos gerenciado pelo AOSM - Um IDE adequado, como o Visual Studio Code
- A CLI do ORAS
Importante
É altamente recomendável que você tenha testado que uma helm install
do seu pacote do Helm tenha êxito em seu ambiente Kubernetes conectado ao Arc de destino antes de tentar fazer uma implantação usando o AOSM.
Substituir --atomic
por uma única NF de gráfico do helm
Esta seção explica como substituir --atomic
de uma NF que consiste em um único gráfico do helm.
Localizar e editar o modelo BICEP da NF
Navegue até o diretório
nsd-cli-output
, abra o diretórioartifacts
e abra o arquivo<nf-arm-template>.bicep
.<nf-arm-template>
é configurado no arquivo de entrada do NSD da extensão da CLI do AOSM do Az. Você pode confirmar que tem o arquivo certo comparando com o modelo de exemplo a seguir para uma CNF (função de rede em contêineres) da Contoso fictícia.@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) } }]
Localize o nome do aplicativo de função de rede navegando até o diretório
cnf-cli-output
, abrindo o diretórionfDefinition
e copiando o valor da única entrada na matriz networkFunctionApplications no recursonfdv
. Confirme se você tem o valor correto comparando com o snippet a seguir de código BICEP de exemplo da Contoso fictícia. Nesse caso, o nome do aplicativo de função de rede é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'
Edite o modelo para substituir a opção
--atomic
de instalação padrão do helm adicionando a seguinte configuração às propriedadesnfResource
no modelo do ARM da NF:roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
Confirme se você fez essa edição corretamente comparando com o snippet a seguir da NF de exemplo da 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"}}}}}'
]}}]
Criar o modelo do ARM editado e carregá-lo no Repositório de artefatos
Navegue até o diretório
nsd-cli-output/artifacts
criado pelo comandoaz aosm nsd build
e crie o Modelo do ARM de função de rede a partir do arquivo BICEP gerado pela CLI.bicep build <nf-name>.bicep
Gere credenciais de token do mapa de escopo do Manifesto do artefato criado no comando
az aosm nsd publish
.Importante
Você precisa usar o Manifesto do artefato criado no comando
az aosm nsd publish
. O modelo do ARM da NF só é declarado nesse manifesto, portanto, somente o token de mapa de escopo gerado por esse manifesto permitirá que você efetue o push (ou o pull) do modelo do ARM da NF para o Repositório de artefatos.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'
Entre no ACR gerenciado pelo AOSM. O nome do ACR gerenciado pelo AOSM pode ser encontrado na visão geral do recurso do Repositório de artefatos do portal do Azure. O nome de usuário e a senha podem ser encontrados na saída da etapa anterior.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
Use o ORAS para carregar o modelo do ARM da Função de rede para o ACR (Registro de Contêiner do Azure) gerenciado pelo AOSM. A marca de artefato
<arm-template-version>
deve estar no formato1.0.0
.<arm-template-name>
e<arm-template-version>
devem corresponder aos valores no Manifesto do artefato criado no comandoaz aosm nsd publish
.
Substituir --atomic
por uma NF de gráfico multi-helm
Muitas NFs complexas são criadas a partir de vários gráficos do helm. Essas NFs são expressas na NFDV (Versão da definição de função de rede) com vários aplicativos de função de rede e são instalados com vários comandos de helm install
– um por gráfico do helm.
O processo de substituição de --atomic
de uma NF multi-helm é o mesmo de uma única NF do helm, além da edição feita no modelo do ARM.
A NF fictícia multi-helm, Contoso-multi-helm, é composta por três gráficos do helm. Sua NFDV tem três aplicativos de função de rede. Um aplicativo de função de rede é mapeado a um gráfico do helm. Esses aplicativos de função de rede têm uma propriedade de nome definida como Contoso-one
, Contoso-two
e Contoso-three
, respectivamente. Aqui está um snippet de exemplo da NFDV definindo essa função de rede.
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'
...
}]
}
}
}
O parâmetro --atomic
pode ser substituído para cada um desses aplicativos de função de rede de forma independente. Aqui está um exemplo de modelo BICEP da NF que substitui --atomic
como false
por Contoso-one
e Contoso-two
, mas define atomic
como true para 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"}}}}}'
]}}]
Próximas etapas
Agora você pode repetir a implantação do SNS. Você pode enviar a implantação novamente por meio do ARM, do BICEP ou da API REST do AOSM. Você também pode excluir o SNS com falha por meio da visão geral do SNS do portal do Azure e reimplantar após o início rápido do operador, substituindo os parâmetros da NF de início rápido pelos parâmetros para sua função de rede. As versões do helm implantadas no cluster do Kubernetes não serão removidas após uma falha. Como depurar falhas de implantação do SNS descreve um kit de ferramentas para depurar falhas comuns de instalação do helm.