Bagikan melalui


Gunakan parameter opsi Helm untuk mencegah penghapusan pada kegagalan penginstalan

Penyebaran Site Network Service (SNS) mungkin gagal karena penyebaran Fungsi Jaringan (NF) yang mendasar gagal memasang dengan benar. Azure Operator Service Manager (AOSM) menghapus penyebaran yang gagal dari kluster Kubernetes yang ditargetkan secara default untuk mempertahankan sumber daya. Helm install kegagalan sering kali mengharuskan sumber daya bertahan pada kluster untuk memungkinkan kegagalan di-debug. Artikel Panduan Ini membahas cara mengedit templat NF ARM untuk mengambil alih perilaku ini dengan mengatur helm install --atomic parameter ke false.

Prasyarat

  • Anda harus telah melakukan onboarding NF ke AOSM menggunakan ekstensi Az CLI AOSM. Artikel ini mereferensikan struktur folder dan output file oleh CLI dan memberikan contoh berbasis CLI
  • Kegagalan penginstalan Helm bisa rumit. Penelusuran kesalahan membutuhkan pengetahuan teknis tentang beberapa teknologi selain pengetahuan domain tentang NF Anda
  • Anda memerlukan Contributor penetapan peran pada grup sumber daya yang berisi Penyimpanan Artefak terkelola AOSM
  • IDE yang sesuai, seperti Visual Studio Code
  • ORAS CLI

Penting

Sangat disarankan agar Anda telah menguji bahwa paket helm install Helm Anda berhasil pada lingkungan Kubernetes yang terhubung dengan Arc target sebelum mencoba penyebaran menggunakan AOSM.

Mengambil alih --atomic untuk satu bagan helm NF

Bagian ini menjelaskan cara mengambil alih --atomic NF yang terdiri dari satu bagan helm.

Menemukan dan mengedit templat NF BICEP

  1. Navigasi ke nsd-cli-output direktori, buka artifacts direktori, dan buka <nf-arm-template>.bicep file. <nf-arm-template> dikonfigurasi dalam file input NSD ekstensi Az AOSM CLI. Anda dapat mengonfirmasi bahwa Anda memiliki file yang tepat dengan membandingkan dengan contoh templat berikut untuk fungsi jaringan kontainer Contoso fiktif (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. Temukan nama aplikasi fungsi jaringan dengan menavigasi ke cnf-cli-output direktori, membuka nfDefinition direktori, dan menyalin nilai dari satu-satunya entri dalam array networkFunctionApplications di nfdv sumber daya. Konfirmasikan bahwa Anda memiliki nilai yang benar dengan membandingkan dengan cuplikan contoh Contoso fiktif BICEP berikut. Dalam hal ini, nama aplikasi fungsi jaringan adalah 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'
    
  3. Edit templat untuk mengambil alih opsi penginstalan --atomic helm default dengan menambahkan konfigurasi berikut ke nfResource properti di Templat ARM NF:

    roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
    
  4. Konfirmasikan bahwa Anda telah melakukan pengeditan ini dengan benar dengan membandingkan dengan cuplikan berikut dari contoh Contoso NF

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

Buat Templat ARM yang diedit dan unggah ke Penyimpanan Artefak

  1. Navigasikan ke direktori yang nsd-cli-output/artifacts dibuat oleh az aosm nsd build perintah dan buat Templat ARM Fungsi Jaringan dari file BICEP yang dihasilkan oleh CLI.

    bicep build <nf-name>.bicep
    
  2. Hasilkan kredensial token peta cakupan dari Manifes Artefak yang az aosm nsd publish dibuat dalam perintah.

    Penting

    Anda diharuskan untuk menggunakan Manifes Artefak yang dibuat dalam az aosm nsd publish perintah. Templat NF ARM hanya dideklarasikan dalam manifes tersebut sehingga hanya token peta cakupan yang dihasilkan oleh manifes ini yang akan memungkinkan Anda untuk mendorong (atau menarik) templat NF ARM ke Penyimpanan Artefak.

    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. Masuk ke ACR terkelola AOSM. Nama ACR terkelola AOSM dapat ditemukan di gambaran umum sumber daya Penyimpanan Artefak portal Azure. Nama pengguna dan kata sandi dapat ditemukan di output langkah sebelumnya.

    oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
    
  4. Gunakan ORAS untuk mengunggah templat ARM Fungsi Jaringan ke Azure Container Registry (ACR) yang dikelola AOSM. Tag <arm-template-version> artefak harus dalam 1.0.0 format. <arm-template-name> dan <arm-template-version> harus cocok dengan nilai dalam Manifes Artefak yang dibuat dalam az aosm nsd publish perintah .

Mengambil alih --atomic untuk NF bagan multi-helm

Banyak NF kompleks dibangun dari beberapa bagan helm. NF ini dinyatakan dalam versi definisi fungsi jaringan (NFDV) dengan beberapa aplikasi fungsi jaringan dan diinstal dengan beberapa helm install perintah - satu per bagan helm.

Proses untuk mengambil alih --atomic NF multi-helm sama dengan untuk satu helm NF, selain dari pengeditan yang dibuat ke templat ARM.

NF multi-helm fiktif, Contoso-multi-helm, terdiri dari tiga bagan helm. NFDV-nya memiliki tiga aplikasi fungsi jaringan. Satu aplikasi fungsi jaringan memetakan ke satu bagan helm. Aplikasi fungsi jaringan ini memiliki properti nama yang diatur ke Contoso-one, Contoso-two, dan Contoso-three masing-masing. Berikut adalah contoh cuplikan NFDV yang menentukan fungsi jaringan ini.

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

Parameter --atomic dapat ditimpa untuk setiap aplikasi fungsi jaringan ini secara independen. Berikut adalah contoh templat NF BICEP yang mengambil alih ke untuk dan Contoso-two, tetapi diatur atomic ke true untuk Contoso-three.Contoso-onefalse--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"}}}}}'
    ]}}]

Langkah berikutnya

Anda sekarang dapat mencoba kembali penyebaran SNS. Anda dapat mengirimkan penyebaran lagi melalui ARM, BICEP, atau AOSM REST API. Anda juga dapat menghapus SNS yang gagal melalui ringkasan SNS portal Azure dan menyebarkan ulang setelah mulai cepat operator, mengganti parameter NF mulai cepat dengan parameter untuk fungsi jaringan Anda. Rilis helm yang disebarkan ke kluster Kubernetes tidak akan dihapus saat gagal. Cara men-debug kegagalan penyebaran SNS menjelaskan toolkit untuk men-debug kegagalan penginstalan helm umum.