Utiliser les paramètres d’option Helm pour empêcher la suppression en cas d’échec d’installation
Les déploiements SNS (Site Network Service) peuvent échouer, car un déploiement de fonction réseau (NF) sous-jacent ne parvient pas à effectuer l’installation correctement. Azure Operator Service Manager (AOSM) supprime les déploiements ayant échoué du cluster Kubernetes ciblé par défaut pour préserver les ressources. Helm install
échecs nécessitent souvent que les ressources persistent sur le cluster pour permettre le débogage de l’échec. Cet article de procédure explique comment modifier le modèle ARM NF pour remplacer ce comportement en définissant le paramètre helm install --atomic
sur false.
Prérequis
- Vous devez avoir intégré votre NF à AOSM à l’aide de l’extension Az CLI AOSM. Cet article fait référence à la structure de dossiers et à la sortie des fichiers par l’interface CLI et fournit des exemples basés sur l’interface CLI
- Les échecs d’installation Helm peuvent être complexes. Le débogage nécessite une connaissance technique de plusieurs technologies en plus de la connaissance du domaine de votre NF
- Connaissance pratique de Helm
- Connaissance de commandes de Kubernetes et de kubectl
- Connaissance de l’extraction et de l’envoi (push) d’artefacts vers Azure Container Registry
- Vous avez besoin des
Contributor
attributions de rôles sur le groupe de ressources qui contient le magasin d’artefacts géré par l’AOSM - Un environnement de développement intégré (IDE) convenable tel que Visual Studio Code
- Le CLI ORAS
Important
Il est fortement recommandé d’avoir testé qu’une helm install
de votre package Helm réussit sur votre environnement Kubernetes connecté à Arc cible avant d’essayer un déploiement à l’aide d’AOSM.
Remplacer --atomic
pour un graphique helm unique NF
Cette section explique comment remplacer --atomic
pour un NF qui se compose d’un graphique helm unique.
Rechercher et modifier le modèle BICEP NF
Accédez au répertoire
nsd-cli-output
, ouvrez le répertoireartifacts
, puis ouvrez le fichier<nf-arm-template>.bicep
.<nf-arm-template>
est configuré dans le fichier d’entrée NSD de l’extension Az AOSM CLI. Vous pouvez confirmer que vous disposez du fichier approprié en comparant le modèle d’exemple suivant pour une fonction réseau conteneurisée Contoso fictive (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) } }]
Recherchez le nom de l’application de fonction réseau en accédant au répertoire
cnf-cli-output
, en ouvrant le répertoirenfDefinition
et en copiant la valeur à partir de la seule entrée du tableau networkFunctionApplications dans la ressourcenfdv
. Vérifiez que vous disposez de la valeur correcte en comparant l’exemple d’extrait de code BICEP de Contoso fictif suivant. Dans ce cas, le nom de l’application de fonction réseau estContoso
.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'
Modifiez le modèle pour remplacer l’option d’installation helm par défaut
--atomic
en ajoutant la configuration suivante aux propriétésnfResource
dans le modèle ARM NF :roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
Vérifiez que vous avez effectué cette modification correctement en comparant l’extrait de code suivant à partir de l’exemple NF de 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"}}}}}'
]}}]
Générez le modèle ARM modifié et chargez-le dans le magasin d’artefacts
Accédez au répertoire
nsd-cli-output/artifacts
créé par la commandeaz aosm nsd build
et générez le modèle ARM de fonction réseau à partir du fichier BICEP généré par l’interface CLI.bicep build <nf-name>.bicep
Générez des informations d’identification de jeton de mappage d’étendue à partir du manifeste d’artefact créé dans la commande
az aosm nsd publish
.Important
Vous devez utiliser le manifeste d’artefact créé dans la commande
az aosm nsd publish
. Le modèle ARM NF est déclaré uniquement dans ce manifeste. Par conséquent, seul le jeton de mappage d’étendue généré par ce manifeste vous permet d’envoyer (ou d’extraire) le modèle ARM NF vers le magasin d’artefacts.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'
Connectez-vous à l’ACR managé par AOSM. Le nom ACR managé par AOSM est disponible dans la vue d’ensemble des ressources du Magasin d’artefacts du portail Azure. Vous trouverez le nom d’utilisateur et le mot de passe dans la sortie de l’étape précédente.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
Utilisez ORAS pour charger le modèle ARM de fonction réseau dans azure Container Registry (ACR) géré par AOSM. La balise d’artefact
<arm-template-version>
doit être au format1.0.0
. Les<arm-template-name>
et les<arm-template-version>
doivent correspondre aux valeurs du manifeste d’artefact créé dans la commandeaz aosm nsd publish
.
Remplacer --atomic
pour un graphique multi-helm NF
De nombreuses fonctions réseau complexes sont générées à partir de plusieurs graphiques helm. Ces NFs sont exprimées dans la version de définition de fonction réseau (NFDV) avec plusieurs applications de fonction réseau et sont installées avec plusieurs commandes helm install
– une par graphique Helm.
Le processus de substitution de --atomic
pour un NF multi helm est identique à celui d’un seul NF helm, en dehors de la modification apportée au modèle ARM.
Le NF multi helm fictif, Contoso-multi-helm, se compose de trois graphiques helm. Son NFDV a trois applications de fonction réseau. Une application de fonction réseau est mappée à un graphique Helm. Ces applications de fonction réseau ont une propriété de nom définie sur Contoso-one
, Contoso-two
et Contoso-three
respectivement. Voici un exemple d’extrait de code du NFDV définissant cette fonction réseau.
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'
...
}]
}
}
}
Le paramètre --atomic
peut être substitué pour chacune de ces applications de fonction réseau indépendamment. Voici un exemple de modèle BICEP NF qui remplace --atomic
à false
pour Contoso-one
et Contoso-two
, mais définit atomic
la valeur true pour 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"}}}}}'
]}}]
Étapes suivantes
Vous pouvez maintenant réessayer le déploiement SNS. Vous pouvez soumettre à nouveau le déploiement via ARM, BICEP ou l’API REST AOSM. Vous pouvez également supprimer le SNS ayant échoué via la vue d’ensemble du SNS du portail Azure et redéployer après le guide de démarrage rapide de l’opérateur, en remplaçant les paramètres NF de démarrage rapide par les paramètres de votre fonction réseau. Les versions helm déployées sur le cluster Kubernetes ne seront pas supprimées en cas d’échec. Comment déboguer des échecs de déploiement SNS décrit un kit de ressources pour le débogage des échecs courants d’installation helm.