Sdílet prostřednictvím


Použitíparametrůch

Nasazení služby SNS (Site Network Service) můžou selhat, protože základní nasazení síťové funkce (NF) se nepodaří správně nainstalovat. Azure Operator Service Manager (AOSM) ve výchozím nastavení odebere neúspěšná nasazení z cílového clusteru Kubernetes, aby se zachovaly prostředky. Helm install selhání často vyžadují, aby prostředky zůstaly v clusteru, aby bylo možné selhání ladit. Tento článek s postupy popisuje, jak upravit šablonu ARM NF tak, aby toto chování přepsala nastavením parametru helm install --atomic na false.

Požadavky

  • Musíte mít nasazený svůj NF do AOSM pomocí rozšíření Az CLI AOSM. Tento článek odkazuje na strukturu složek a výstup souborů rozhraním příkazového řádku a poskytuje příklady založené na rozhraní příkazového řádku.
  • Selhání instalace Helmu můžou být složitá. Ladění vyžaduje kromě znalostí NF také technické znalosti několika technologií.
  • Vyžadujete Contributor přiřazení rolí ve skupině prostředků, která obsahuje úložiště artefaktů spravovaných službou AOSM.
  • Vhodné integrované vývojové prostředí (IDE), jako je Visual Studio Code
  • Rozhraní příkazového řádku ORAS

Důležité

Důrazně doporučujeme, abyste před pokusem o nasazení pomocí AOSM otestovali úspěšné helm install nasazení balíčku Helm ve vašem cílovém prostředí Kubernetes připojeném k Arc.

Přepsání --atomic jednoho chartu helmu NF

Tato část vysvětluje, jak přepsat --atomic pro NF, který se skládá z jednoho chartu Helm.

Vyhledání a úprava šablony NF BICEP

  1. Přejděte do nsd-cli-output adresáře, otevřete artifacts adresář a otevřete <nf-arm-template>.bicep soubor. <nf-arm-template> je nakonfigurovaný ve vstupním souboru NSD rozšíření Az AOSM CLI. Můžete potvrdit, že máte správný soubor, a to porovnáním s následující ukázkovou šablonou fiktivní kontejnerizované síťové funkce 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)
      }
    }]
    
  2. Název aplikace síťové funkce najdete tak, že přejdete do cnf-cli-output adresáře, otevřete nfDefinition adresář a zkopírujete hodnotu z jediné položky v poli networkFunctionApplications v nfdv prostředku. Ověřte, že máte správnou hodnotu, a to porovnáním s následujícím fiktivním fragmentem kódu BICEP contoso. V tomto případě je Contosonázev aplikace síťové funkce .

    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'
    
  3. Upravte šablonu tak, aby přepsala výchozí možnost instalace --atomic helmu přidáním následující konfigurace do nfResource vlastností v šabloně ARM NF:

    roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
    
  4. Ověřte, že jste tuto úpravu provedli správně, a to porovnáním s následujícím fragmentem kódu z ukázkového NF společnosti 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"}}}}}'
    ]}}]

Sestavení upravené šablony ARM a jeho nahrání do úložiště artefaktů

  1. Přejděte do nsd-cli-output/artifacts adresáře vytvořeného az aosm nsd build příkazem a ze souboru BICEP vygenerovaného rozhraním příkazového řádku sestavte šablonu ARM síťové funkce.

    bicep build <nf-name>.bicep
    
  2. Vygenerujte přihlašovací údaje tokenu mapování oboru z manifestu artefaktů vytvořeného az aosm nsd publish v příkazu.

    Důležité

    Musíte použít manifest artefaktů az aosm nsd publish vytvořený v příkazu. Šablona ARM NF je deklarována pouze v tomto manifestu, takže pouze token mapování oboru vygenerovaný tímto manifestem vám umožní odeslat (nebo vyžádat) šablonu NF ARM do úložiště artefaktů.

    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'
    
  3. Přihlaste se ke spravované službě AOSM ACR. Název ACR spravovaný službou AOSM najdete v přehledu prostředků Úložiště artefaktů na webu Azure Portal. Uživatelské jméno a heslo najdete ve výstupu předchozího kroku.

    oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
    
  4. Pomocí ORAS nahrajte šablonu ARM síťové funkce do služby Azure Container Registry (ACR) spravované službou AOSM. Značka <arm-template-version> artefaktu musí být ve 1.0.0 formátu. <arm-template-version> Hodnoty <arm-template-name> v manifestu artefaktů vytvořeném v příkazu musí odpovídat hodnotámaz aosm nsd publish.

Přepsání --atomic pro více helm chart NF

Mnoho složitých NF se vytváří z více grafů helmu. Tyto NF se vyjadřují ve verzi definice síťové funkce (NFDV) s více aplikacemi síťových funkcí a instalují se s více helm install příkazy – jeden na chart Helm.

Proces přepsání --atomic pro více helm NF je stejný jako u jednoho NF helmu kromě úprav provedených v šabloně ARM.

Fiktivní multi-helm NF, Contoso-multi-helm, se skládá ze tří chartů helmu. Jeho NFDV má tři síťové aplikace funkcí. Jedna aplikace síťových funkcí se mapuje na jeden chart Helm. Tyto aplikace síťových funkcí mají vlastnost názvu nastavena na Contoso-one, Contoso-twoa Contoso-three v uvedeném pořadí. Tady je příklad fragmentu kódu NFDV definující tuto síťovou funkci.

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'
          ...
        }]
      }
    }
  }

Parametr --atomic lze přepsat pro každou z těchto aplikací síťových funkcí nezávisle. Tady je příklad šablony NF BICEP, která přepíše --atomic false hodnotu for Contoso-one a Contoso-two, ale nastaví atomic hodnotu true pro 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"}}}}}'
    ]}}]

Další kroky

Teď můžete zkusit znovu nasadit SNS. Nasazení můžete znovu odeslat prostřednictvím ARM, BICEP nebo rozhraní REST API AOSM. Neúspěšný SNS můžete také odstranit prostřednictvím přehledu SNS webu Azure Portal a znovu nasadit podle rychlého startu operátora. Parametry NF rychlého startu nahraďte parametry síťové funkce. Verze Helmu nasazené do clusteru Kubernetes se při selhání neodeberou. Postup ladění selhání nasazení SNS popisuje sadu nástrojů pro ladění běžných selhání instalace helmu.