Usare i parametri dell'opzione Helm per impedire l'eliminazione in caso di errore di installazione
Le distribuzioni del servizio di rete del sito (SNS) potrebbero non riuscire perché una distribuzione della funzione di rete (NF) sottostante non riesce a eseguire correttamente l'installazione. Azure Operator Service Manager (AOSM) rimuove le distribuzioni non riuscite dal cluster Kubernetes di destinazione per impostazione predefinita per mantenere le risorse. Helm install
Spesso gli errori richiedono che le risorse vengano mantenute nel cluster per consentire il debug dell'errore. Questo articolo sulle procedure illustra come modificare il modello arm NF per eseguire l'override di questo comportamento impostando il helm install --atomic
parametro su false.
Prerequisiti
- È necessario aver eseguito l'onboarding di NF in AOSM usando l'estensione AOSM dell'interfaccia della riga di comando di Az. Questo articolo fa riferimento alla struttura di cartelle e ai file restituiti dall'interfaccia della riga di comando e fornisce esempi basati sull'interfaccia della riga di comando
- Gli errori di installazione helm possono essere complessi. Il debug richiede conoscenze tecniche di diverse tecnologie oltre alla conoscenza del dominio dell'NF
- Conoscenza operativa di Helm
- Conoscenza approfondita dei comandi kubernetes e kubectl
- Conoscenza del pull e del push degli artefatti in Registro Azure Container
- Sono necessarie le
Contributor
assegnazioni di ruolo nel gruppo di risorse che contiene l'archivio artefatti gestito di AOSM - Un IDE appropriato, ad esempio Visual Studio Code
- Interfaccia della riga di comando ORAS
Importante
È consigliabile testare che un helm install
pacchetto Helm abbia esito positivo nell'ambiente Kubernetes connesso ad Arc di destinazione prima di tentare una distribuzione usando AOSM.
Eseguire l'override --atomic
per un singolo grafico helm NF
In questa sezione viene illustrato come eseguire l'override --atomic
di un NF costituito da un singolo grafico helm.
Individuare e modificare il modello BICEP NF
Passare alla
nsd-cli-output
directory, aprire laartifacts
directory e aprire il<nf-arm-template>.bicep
file.<nf-arm-template>
viene configurato nel file di input NSD dell'estensione dell'interfaccia della riga di comando di Az AOSM. È possibile verificare di avere il file corretto confrontandolo con il modello di esempio seguente per una funzione di rete fittizia contoso in contenitori (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) } }]
Trovare il nome dell'applicazione della funzione di rete passando alla
cnf-cli-output
directory, aprendo lanfDefinition
directory e copiando il valore dall'unica voce nella matrice networkFunctionApplications nellanfdv
risorsa. Verificare di avere il valore corretto confrontandolo con il frammento di codice BICEP di esempio fittizio seguente. In questo caso, il nome dell'applicazione della funzione di rete è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'
Modificare il modello per eseguire l'override dell'opzione di installazione
--atomic
helm predefinita aggiungendo la configurazione seguente allenfResource
proprietà nel modello arm NF:roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
Verificare di aver apportato correttamente questa modifica confrontandolo con il frammento di codice seguente dell'esempio NF di 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"}}}}}'
]}}]
Compilare il modello di Resource Manager modificato e caricarlo nell'archivio artefatti
Passare alla
nsd-cli-output/artifacts
directory creata dalaz aosm nsd build
comando e compilare il modello di Resource Manager della funzione di rete dal file BICEP generato dall'interfaccia della riga di comando.bicep build <nf-name>.bicep
Generare le credenziali del token della mappa dell'ambito dal manifesto dell'artefatto creato nel
az aosm nsd publish
comando .Importante
È necessario usare il manifesto dell'artefatto creato nel
az aosm nsd publish
comando . Il modello arm NF viene dichiarato solo in tale manifesto, pertanto solo il token della mappa dell'ambito generato da questo manifesto consentirà di eseguire il push (o il pull) del modello arm NF nell'archivio artefatti.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'
Accedere al Registro Azure Container gestito da AOSM. Il nome del Registro Azure Container gestito di AOSM è disponibile in portale di Azure panoramica delle risorse dell'archivio artefatti. Il nome utente e la password sono disponibili nell'output del passaggio precedente.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
Usare ORAS per caricare il modello arm della funzione di rete nel Registro Azure Container gestito di AOSM. Il tag dell'artefatto
<arm-template-version>
deve essere in1.0.0
formato . e<arm-template-name>
<arm-template-version>
deve corrispondere ai valori nel manifesto dell'artefatto creato nelaz aosm nsd publish
comando .
Eseguire l'override --atomic
di un grafico multi helm NF
Molte NFS complesse vengono compilate da più grafici helm. Queste funzioni di rete sono espresse nella versione di definizione della funzione di rete (NFDV) con più applicazioni per le funzioni di rete e vengono installate con più helm install
comandi, uno per ogni grafico helm.
Il processo di override --atomic
per un NF multi-helm è uguale a quello di un singolo NF helm, oltre alla modifica apportata al modello arm.
Il multi-helm fittizio NF, Contoso-multi-helm, è costituito da tre grafici helm. La sua NFDV ha tre applicazioni per le funzioni di rete. Un'applicazione per le funzioni di rete esegue il mapping a un unico grafico helm. Queste applicazioni per le funzioni di rete hanno una proprietà name impostata rispettivamente su Contoso-one
, Contoso-two
e Contoso-three
. Ecco un frammento di esempio della funzione di rete NFDV che definisce questa funzione di rete.
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'
...
}]
}
}
}
Il --atomic
parametro può essere sottoposto a override per ognuna di queste applicazioni di funzione di rete in modo indipendente. Ecco un esempio di modello BICEP NF che esegue l'override di per e Contoso-two
, ma imposta su atomic
true per Contoso-three
.Contoso-one
false
--atomic
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"}}}}}'
]}}]
Passaggi successivi
È ora possibile ritentare la distribuzione SNS. È possibile inviare di nuovo la distribuzione tramite ARM, BICEP o l'API REST di AOSM. È anche possibile eliminare il servizio SNS non riuscito tramite la panoramica portale di Azure SNS e ridistribuire dopo l'avvio rapido dell'operatore, sostituendo i parametri NF di avvio rapido con i parametri per la funzione di rete. Le versioni helm distribuite nel cluster Kubernetes non verranno rimosse in caso di errore. Come eseguire il debug degli errori di distribuzione SNS descrive un toolkit per il debug di errori di installazione helm comuni.