次の方法で共有


安全なアップグレード プラクティスの概要

概要

この記事では、Azure Operator Service Manager (AOSM) の安全なアップグレード プラクティス (SUP) について説明します。 この機能セットを使用すると、エンド ユーザーは、該当する場合はパートナーの ISSU 要件に準拠しながら、Azure Operator Nexus でホストされている CNF ワークロードの複雑なアップグレードを安全に実行できます。 SUP の特徴と機能について詳しくは、これらのサービスの今後の記事を探してください。

はじめに

Azure Operator Service Manager でサポートされる特定のネットワーク サービスは、1 対多のコンテナーベースのネットワーク機能 (CMF) で構成され、時間の経過とともにソフトウェア更新が必要になります。 更新のたびに 1 対多の Helm 操作を実行し、依存するネットワーク機能アプリケーション (NfApps) を特定の順序で、ネットワーク サービスへの影響が最も少ない方法でアップグレードする必要があります。 Azure Operator Service Manager では、安全なアップグレード プラクティスは一連の機能を表し、Azure Operator Nexus のネットワーク サービスを更新するために必要な CNF 操作を自動化できます。

  • SNS reput 更新 - NFDV のすべての NfApps で Helm アップグレード操作を実行します。
  • Nexus プラットフォーム - Nexus プラットフォーム ターゲットでの SNS reput 操作をサポートします。
  • 操作タイムアウト - NfApp 操作ごとに操作タイムアウトを設定する機能。
  • 同期操作 - 一度に 1 つのシリアル NfApp 操作を実行する機能。
  • 障害時の一時停止 - フラグに基づいて、直前の NfApp 操作のみをロールバックするように失敗の動作を設定します。
  • 単一チャート テスト検証 - 作成または更新後に Helm テスト操作を実行します。
  • リファクタリングされたSNS reput - メソッドの改善、更新順序の追加、クリーンアップ チェック。

アップグレードのアプローチ

既存の Azure Operator Service Manager サイト ネットワーク サービス (SNS) を更新するために、オペレーターは、デプロイされた SNS リソースに対して reput 更新要求を実行します。 SNS に複数の NfApps を持つ CNF が含まれている場合、要求はネットワーク機能定義バージョン (NFDV) で定義されているすべての NfApps にわたってファンアウトされます。 既定では、表示される順序で、または必要に応じて UpdateDependsOn パラメーターで定義された順序で指定します。

NfApp ごとに、reput 更新要求では、Helm チャートのバージョン増加、Helm 値の追加/削除、NfApps の追加/削除がサポートされています。 タイムアウトは、既知の許容されるランタイムに基づいて NfApp ごとに設定できますが、NfApps は順番に 1 つずつしか処理できません。 reput 更新では、次の処理ロジックが実装されます。

  • applicationEnablement が false に設定されている NFApp の場合は、スキップします。
  • ネットワーク機能定義バージョン (NFDV) の古いものと新しいものの間で共通の NFApp の場合は、アップグレード コンポーネントをトリガーします。
  • 新しい NFDV で追加された NFApp の場合は、コンポーネントの作成をトリガーします。

結果を確実に得るために、NfApp テストは Helm を使用してサポートされます (Helm アップグレードの事前または事後テスト、あるいはスタンドアロンの Helm テストのいずれか)。 事前または事後テストが失敗した場合は、アトミック パラメーターが優先されます。 atomic/true の場合、失敗したチャートはロールバックされます。 atomic/false の場合、ロールバックは実行されません。 スタンドアロンの Helm テストでは、rollbackOnTestFailure パラメーターが優先されます。 rollbackOnTestFailure/true の場合、失敗したチャートはロールバックされます。 rollbackOnTestFailure/false の場合、ロールバックは実行されません。

前提条件

Azure Operator Service Manager を使用してアップグレードを計画する場合は、アップグレードの実行前に次の要件に対処して、アップグレードの試行に費やす時間を最適化します。

  • 発行元やデザイナーのワークフローを使用して、更新された成果物をオンボードします。

    • 発行元、ストア、ネットワーク サービス設計 (NSDg)、ネットワーク機能設計グループ (NFDg) は静的であり、変更する必要はありません。
      • 新しいチャートとイメージを格納するには、新しい成果物マニフェストが必要です。 詳しくは、新しいチャートとイメージのアップロードの詳細に関するオンボード ドキュメントを参照してください。
    • 既存の NFDg と NSDg の下に、新しい NFDV およびネットワーク サービス設計バージョン (NSDV) が必要です。
      • NFDV に対する基本的な変更については、手順のセクションで説明します。
      • 新しい NSDV は、新しい構成グループ スキーマ (CGS) バージョンが導入される場合にのみ必要です。
    • 必要に応じて、新しい CGS。
      • アップグレードで新しい公開構成パラメーターが導入される場合は必須です。
  • オペレーター ワークフローを使用して、更新された成果物を作成します。

    • 必要に応じて、新しい CGS に基づいて新しい構成グループ値 (CGV) を作成します。
    • 既存のサイトおよびサイト ネットワーク サービス オブジェクトを確認して、ペイロードを再利用して作成します。
  • テンプレートを更新して、アップグレード パラメーターがアップグレードの信頼性とエラー時の必要な動作に基づいて確実に設定されるようにします。

    • 運用環境に使用される設定では、エラーの詳細が抑制される場合があります。一方、デバッグまたはテストに使用される設定では、これらの詳細を公開することを選択できます。

アップグレードの手順

Azure Operator Service Manager でアップグレードをトリガーするには、次のプロセスに従います。

新しい NFDV リソースを作成する

新しい NFDV バージョンの場合は、有効な SemVer 形式である必要があり、修正プログラムとマイナー バージョンの更新プログラムの、より高い増分値のみが許可されます。 下位 NFDV バージョンは許可されません。 NFDV 2.0.0 を使用してデプロイされた CNF の場合、新しい NFDV はバージョン 2.0.1 または 2.1.0 とすることができますが、1.0.0 または 3.0.0 にはできません。

新しい NFDV パラメーターを更新する

Helm チャートのバージョンを更新することも、必要に応じて Helm 値を更新またはパラメーター化することもできます。 新しい NfApps は、デプロイされたバージョンに存在しなかった場所に追加することもできます。

必要な NfApp 順序に合わせて NFDV を更新する

UpdateDependsOn は、更新操作中の NfApps の順序を指定するために使用される NFDV パラメーターです。 UpdateDependsOn が指定されていない場合は、NFDV に表示される CNF アプリケーションのシリアル順序が使用されます。

必要なアップグレード動作に合わせて NFDV を更新する

必要な CNF アプリケーションのタイムアウト、アトミック パラメーター、rollbackOnTestFailure パラメーターを必ず設定してください。 アップグレードに対する信頼性が高まるにつれて、これらのパラメーターを時間の経過とともに変更すると役立つ場合があります。

SNS reput を発行する

オンボードが完了すると、reput 操作が送信されます。 NfApps の数、サイズ、複雑さに応じて、reput 操作の完了まで時間がかかる場合があります (数時間)。

reput の結果を確認する

reput で成功の結果が報告されている場合、アップグレードは完了しており、ユーザーはサービスの状態と可用性を検証する必要があります。 reput でエラーが報告されている場合は、アップグレード失敗の回復に関するセクションの手順に従って続行します。

再試行の手順

reput 更新が失敗した場合は、次のプロセスに従って操作を再試行できます。

失敗した NfApp を診断する

ログやその他のデバッグ情報を分析して、NfApp エラーの根本原因を解決します。

完了したチャートを手動でスキップする

失敗した NfApp を修正した後、アップグレードの再試行を試みる前に、applicationEnablement パラメーターを変更して、再試行動作を高速化することを検討してください。 このパラメーターは false に設定できます。そうすると NfApp はスキップされます。 このパラメーターは、NfApp のアップグレードが必要ない場合に役立ちます。

SNS reput の再試行を発行する (成功するまで繰り返す)

reput の既定では、applicationEnablement フラグを使用してスキップされない限り、宣言された更新順序で NfApps が再試行されます。

applicationEnablement の使用方法

NFDV リソースの deployParametersMappingRuleProfile の下に、enum 型のプロパティ applicationEnablement があり、Unknown、Enabled、または disabled の値を受け取ります。 それを使用して、NF デプロイ中に NfApp 操作を除外できます。

発行元の変更

発行元は applicationEnablement プロパティについて、既定値を指定するか、パラメーター化するかという 2 つのオプションがあります。

NFDV のサンプル

NFDV は、発行元が applicationEnablement の既定値を設定するために使用されます。

{ 
      "location":"<location>", 
      "properties": {
      "networkFunctionTemplate": {
        "networkFunctionApplications": [
          {
            "artifactProfile": {
              "helmArtifactProfile": { 
                "var":"var"
              },
              "artifactStore": {
                "id": "<artifactStore id>"
              }
            },
            "deployParametersMappingRuleProfile": {
              "helmMappingRuleProfile": {
                "releaseNamespace": "{deployParameters.role1releasenamespace}",
                "releaseName": "{deployParameters.role1releasename}"
              },
              "applicationEnablement": "Enabled"
            },
            "artifactType": "HelmPackage",
            "dependsOnProfile": "null",
            "name": "hellotest"
          },
          {
            "artifactProfile": {
              "helmArtifactProfile": {
                 "var":"var"
              },
              "artifactStore": {
                "id": "<artifactStore id>"
              }
            },
            "deployParametersMappingRuleProfile": {
              "helmMappingRuleProfile": {
                "releaseNamespace": "{deployParameters.role2releasenamespace}",
                "releaseName": "{deployParameters.role2releasename}"
              },
              "applicationEnablement": "Enabled"
            },
            "artifactType": "HelmPackage",
            "dependsOnProfile": "null",
            "name": "hellotest1"
          }
        ],
        "nfviType": "AzureArcKubernetes"
      },
      "description": "null",
      "deployParameters": {"type":"object","properties":{"role1releasenamespace":{"type":"string"},"role1releasename":{"type":"string"},"role2releasenamespace":{"type":"string"},"role2releasename":{"type":"string"}},"required":["role1releasenamespace","role1releasename","role2releasenamespace","role2releasename"]},
      "networkFunctionType": "ContainerizedNetworkFunction"
    }
}

コンフィギュレーション グループ スキーマ (CGS) リソースのサンプル

CGS は、実行時にオペレーターが指定した roleOverrideValues 変数を発行元が要求するために使用されます。 これらの roleOverrideValues には、applicationEnablement の既定値以外の設定を含めることができます。

{
  "type": "object",
  "properties": {
    "location": {
      "type": "string"
    },
    "nfviType": {
      "type": "string"
    },
    "nfdvId": {
      "type": "string"
    },
    "helloworld-cnf-config": {
      "type": "object",
      "properties": {
        "role1releasenamespace": {
          "type": "string"
        },
        "role1releasename": {
          "type": "string"
        },
        "role2releasenamespace": {
          "type": "string"
        },
        "role2releasename": {
          "type": "string"
        },
        "roleOverrideValues1": {
          "type": "string"
        },
        "roleOverrideValues2": {
          "type": "string"
        }
      },
      "required": [
        "role1releasenamespace",
        "role1releasename",
        "role2releasenamespace",
        "role2releasename",
        "roleOverrideValues1",
        "roleOverrideValues2"
      ]
    }
  },
  "required": [
    "nfviType",
    "nfdvId",
    "location",
    "helloworld-cnf-config"
  ]
}

オペレーターの変更

オペレーターは、NFDV で定義されている既定の applicationEnablement 値を継承します。 CGS で applicationEnablement をパラメーター化する場合は、実行時に deploymentValues プロパティを介して渡す必要があります。

コンフィギュレーション グループ値 (CGV) リソースのサンプル

CGV は、オペレーターが実行時に roleOverrideValues 変数を設定するために使用されます。 roleOverrideValues には、applicationEnablement の既定値以外の設定が含まれます。

{
  "location": "<location>",
  "nfviType": "AzureArcKubernetes",
  "nfdvId": "<nfdv_id>",
  "helloworld-cnf-config": {
    "role1releasenamespace": "hello-test-releasens",
    "role1releasename": "hello-test-release",
    "role2releasenamespace": "hello-test-2-releasens",
    "role2releasename": "hello-test-2-release",
    "roleOverrideValues1": "{\"name\":\"hellotest\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\":\"Enabled\",\"helmMappingRuleProfile\":{\"releaseName\":\"override-release\",\"releaseNamespace\":\"override-namespace\",\"helmPackageVersion\":\"1.0.0\",\"values\":\"\",\"options\":{\"installOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"30\",\"injectArtifactStoreDetails\":\"true\"},\"upgradeOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"30\",\"injectArtifactStoreDetails\":\"true\"}}}}}",
    "roleOverrideValues2": "{\"name\":\"hellotest1\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Enabled\"}}"
  }
}

NF ARM テンプレートのサンプル

NF ARM テンプレートは、オペレーターが CGV によって設定された roleOverrideValues 変数をリソース プロバイダー (RP) に送信するために使用されます。 オペレーターは、必要に応じて CGV の applicationEnablement 設定を変更し、同じ NF ARM テンプレートを再送信して、イテレーション間の動作を変更できます。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nameValue": {
      "type": "string",
      "defaultValue": "HelloWorld"
    },
    "locationValue": {
      "type": "string",
      "defaultValue": "eastus"
    },
    "nfviTypeValue": {
      "type": "string",
      "defaultValue": "AzureArcKubernetes"
    },
    "nfviIdValue": {
      "type": "string"
    },
    "config": {
      "type": "object",
      "defaultValue": {}
    },
    "nfdvId": {
      "type": "string"
    }
  },
  "variables": {
    "deploymentValuesValue": "[string(createObject('role1releasenamespace', parameters('config').role1releasenamespace, 'role1releasename',parameters('config').role1releasename, 'role2releasenamespace', parameters('config').role2releasenamespace, 'role2releasename',parameters('config').role2releasename))]",
    "nfName": "[concat(parameters('nameValue'), '-CNF')]",
    "roleOverrideValues1": "[string(parameters('config').roleOverrideValues1)]",
    "roleOverrideValues2": "[string(parameters('config').roleOverrideValues2)]"
  },
  "resources": [
    {
      "type": "Microsoft.HybridNetwork/networkFunctions",
      "apiVersion": "2023-09-01",
      "name": "[variables('nfName')]",
      "location": "[parameters('locationValue')]",
      "properties": {
        "networkFunctionDefinitionVersionResourceReference": {
          "id": "[parameters('nfdvId')]",
          "idType": "Open"
        },
        "nfviType": "[parameters('nfviTypeValue')]",
        "nfviId": "[parameters('nfviIdValue')]",
        "allowSoftwareUpdate": true,
        "configurationType": "Open",
        "deploymentValues": "[string(variables('deploymentValuesValue'))]",
        "roleOverrideValues": [
          "[variables('roleOverrideValues1')]",
          "[variables('roleOverrideValues2')]"
        ]
      }
    }
  ]
}

サービス内アップグレードのサポート

Azure Operator Service Manager では、可能な限りサービスのアップグレードがサポートされます。これは、サービスを中断することなくデプロイ バージョンを先に進めるアップグレード方法です。 ただし、特定のサービスを中断せずにアップグレードする機能は、サービス自体の機能です。 サービス内アップグレード機能を理解するには、サービスの発行元に詳細を問い合わせてください。

検索目標を転送する

Azure Operator Service Manager は、安全なアップグレード プラクティス機能セットを引き続き拡張し、提供される更新サービスの機能強化を推進しています。 現在、次の機能は、将来の可用性について検討中です。

  • アップグレード オプション制御の向上 - パラメーターをより効果的に公開します。
  • 変更がない場合に NfApp をスキップする - 変更の結果がない NfApps の処理をスキップします。
  • 失敗時に NFDV ロールバックを実行する - フラグに基づいて、完了したすべての NfApps を失敗時にロールバックします。
  • 非同期操作 - 一度に複数の NfApp 操作を実行する機能。
  • イメージのダウンロード - エッジ リポジトリにイメージを事前に読み込む機能。
  • 検証のターゲット チャート - 特定の NfApp に対してのみ Helm テストを実行する機能。