Verwenden von Helm-Optionsparametern, um das Löschen bei einem Installationsfehler zu verhindern
Bei SNS-Bereitstellungen (Site Network Service, Standortnetzwerkdienst) kann ein Fehler auftreten, da Helm von einer zugrunde liegenden NF-Bereitstellung (Netzwerkfunktion) nicht ordnungsgemäß installiert wird. Azure Operator Service Manager (AOSM) entfernt fehlerhafte Bereitstellungen standardmäßig aus dem Kubernetes-Zielcluster, um Ressourcen zu bewahren. Helm install
-Fehler erfordern häufig, dass die Ressourcen auf dem Cluster beibehalten werden, um das Debuggen des Fehlers zu ermöglichen. In diesem Schrittanleitungsartikel wird beschrieben, wie Sie die NF-ARM-Vorlage bearbeiten, um dieses Verhalten außer Kraft zu setzen, indem Sie den Parameter helm install --atomic
auf „false“ festlegen.
Voraussetzungen
- Sie müssen Ihre NF mit der Azure CLI-AOSM-Erweiterung in AOSM integriert haben. In diesem Artikel wird auf die Ordnerstruktur und die Dateien verwiesen, die von der CLI ausgegeben werden, und es werden CLI-basierte Beispiele bereitgestellt.
- Fehler bei der Helm-Installation können komplex sein. Das Debuggen erfordert neben dem Fachwissen zu Ihrer NF auch technische Kenntnisse zu verschiedenen Technologien.
- Fundierte Kenntnisse zu Helm.
- Fundierte Kenntnisse zu Kubernetes und kubectl-Befehlen
- Fundierte Kenntnisse zum Abrufen und Pushen von Artefakten aus und in Azure Container Registry
- Sie benötigen die Rollenzuweisung
Contributor
für die Ressourcengruppe, die den von AOSM verwalteten Artefaktspeicher enthält. - Eine geeignete IDE (beispielsweise Visual Studio Code)
- ORAS-CLI
Wichtig
Es wird dringend empfohlen, zu testen, ob helm install
für Ihr Helm-Paket in Ihrer mit Arc verbundenen Kubernetes-Zielumgebung erfolgreich ist, bevor Sie eine Bereitstellung mithilfe von AOSM ausführen.
Außerkraftsetzen von --atomic
für eine NF mit einzelnem Helm-Chart
In diesem Abschnitt wird erläutert, wie Sie --atomic
für eine NF außer Kraft setzen, die aus einem einzelnen Helm-Chart besteht.
Suchen und Bearbeiten der NF-BICEP-Vorlage
Navigieren Sie zum Verzeichnis
nsd-cli-output
, öffnen Sie das Verzeichnisartifacts
, und öffnen Sie die Datei<nf-arm-template>.bicep
.<nf-arm-template>
ist in der NSD-Eingabedatei der Azure CLI-AOSM-Erweiterung konfiguriert. Sie können bestätigen, dass Sie über die richtige Datei verfügen, indem Sie sie mit der folgenden Beispielvorlage für eine fiktive containerisierte Contoso-Netzwerkfunktion (Containerized Network Function, CNF) vergleichen.@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) } }]
Ermitteln Sie den Namen der Netzwerkfunktionsanwendung, indem Sie zum Verzeichnis
cnf-cli-output
navigieren, das VerzeichnisnfDefinition
öffnen und den Wert aus dem einzigen Eintrag im Array „networkFunctionApplications“ in dernfdv
-Ressource kopieren. Vergewissern Sie sich, dass Sie den richtigen Wert haben, indem Sie ihn mit dem folgenden BICEP-Codeschnipsel des fiktiven Contoso-Beispiels vergleichen. In diesem Fall lautet der Name der NetzwerkfunktionsanwendungContoso
.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'
Bearbeiten Sie die Vorlage, um die Standardoption
--atomic
für die Helm-Installation außer Kraft zu setzen, indem Sie die folgende Konfiguration zu dennfResource
-Eigenschaften in der NF-ARM-Vorlage hinzufügen:roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
Vergewissern Sie sich, dass Sie diese Bearbeitung ordnungsgemäß vorgenommen haben, indem Sie einen Vergleich mit dem folgenden Codeschnipsel aus der Contoso-Beispiel-NF durchführen.
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"}}}}}'
]}}]
Erstellen der bearbeiteten ARM-Vorlage und Hochladen in den Artefaktspeicher
Navigieren Sie zum Verzeichnis
nsd-cli-output/artifacts
, das mit dem Befehlaz aosm nsd build
erstellt wurde, und erstellen Sie die ARM-Vorlage für die Netzwerkfunktion auf der Grundlage der von der CLI generierten BICEP-Datei:bicep build <nf-name>.bicep
Generieren Sie Bereichszuordnungstoken-Anmeldeinformationen auf der Grundlage des Artefaktmanifests, das im Befehl
az aosm nsd publish
erstellt wurde.Wichtig
Sie müssen das im Befehl
az aosm nsd publish
erstellte Artefaktmanifest verwenden. Die NF-ARM-Vorlage wird nur in diesem Manifest deklariert, sodass es nur mit dem durch dieses Manifest generierten Bereichszuordnungstoken möglich ist, die NF-ARM-Vorlage an den Artefaktspeicher zu pushen (oder daraus zu pullen).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'
Melden Sie sich bei der von AOSM verwalteten ACR-Instanz an. Den Namen der von AOSM verwalteten ACR-Instanz finden Sie im Azure-Portal in der Ressourcenübersicht des Artefaktspeichers. Den Benutzernamen und das Kennwort finden Sie in der Ausgabe des vorherigen Schritts.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
Verwenden Sie ORAS, um die ARM-Vorlage der Netzwerkfunktion in die von AOSM verwaltete ACR-Instanz (Azure Container Registry) hochzuladen. Das Artefakttag
<arm-template-version>
muss im Format1.0.0
vorliegen.<arm-template-name>
und<arm-template-version>
müssen mit den Werten in dem imaz aosm nsd publish
-Befehl erstellten Artefaktmanifest übereinstimmen.
Außerkraftsetzen von --atomic
für eine NF mit mehreren Helm-Charts
Viele komplexe NFs werden auf der Grundlage mehrerer Helm-Charts erstellt. Diese NFs werden in der Netzwerkfunktionsdefinitionsversion (NFDV) mit mehreren Netzwerkfunktionsanwendungen ausgedrückt und mit mehreren helm install
-Befehlen installiert – eins pro Helm-Chart.
Der Prozess zum Außerkraftsetzen von --atomic
für eine NF mit mehreren Helm-Charts ist identisch mit dem für eine NF mit einem Helm-Chart, abgesehen von der Bearbeitung, die an der ARM-Vorlage vorgenommen wurde.
Die fiktive NF mit mehreren Helm-Charts „Contoso-multi-helm“ besteht aus drei Helm-Charts. Ihre NFDV enthält drei Netzwerkfunktionsanwendungen. Eine Netzwerkfunktionsanwendung ist jeweils einem Helm-Chart zugeordnet. Diese Netzwerkfunktionsanwendungen verfügen über eine Namenseigenschaft, die auf Contoso-one
, Contoso-two
bzw. Contoso-three
festgelegt ist. Hier ist ein Beispielcodeschnipsel der NFDV, der diese Netzwerkfunktion definiert:
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'
...
}]
}
}
}
Der --atomic
-Parameter kann für jede dieser Netzwerkfunktionsanwendungen unabhängig voneinander außer Kraft gesetzt werden. Hier sehen Sie ein Beispiel für eine NF-BICEP-Vorlage, die --atomic
für Contoso-one
und Contoso-two
auf false
, aber atomic
für Contoso-three
auf „true“ festlegt.
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"}}}}}'
]}}]
Nächste Schritte
Sie können jetzt die SNS-Bereitstellung wiederholen. Sie können die Bereitstellung erneut über ARM, BICEP oder die AOSM-REST-API übermitteln. Sie können die fehlerhafte SNS-Bereitstellung auch über die SNS-Übersicht im Azure-Portal löschen und den SNS gemäß diesem Schnellstart erneut bereitstellen. Ersetzen Sie dabei die NF-Parameter des Schnellstarts durch die Parameter für Ihre Netzwerkfunktion. Die im Kubernetes-Cluster bereitgestellten Helm-Releases werden bei einem Fehler nicht entfernt. Unter Debuggen von SNS-Bereitstellungsfehlern wird ein Toolkit zum Debuggen allgemeiner Fehler bei der Helm-Installation beschrieben.