ネットワーク機能のオンボードとデプロイに関する Azure Operator Service Manager のベスト プラクティス
Microsoft は、Azure Operator Service Manager を使用してネットワーク機能 (NF) を管理するための多くの実証済みプラクティスを開発しました。 この記事では、NF ベンダー、電話会社、およびそのパートナーが設計を最適化するために従うことができるガイドラインを提供します。 これらのプラクティスは、NF をオンボードしてデプロイする際に念頭に置いておく必要があります。
一般的な考慮事項
最初に、クイックスタートを使用して最も単純な NF (1 つまたは 2 つのグラフ) をオンボードしてデプロイし、フロー全体を理解することをお勧めします。 後続のイテレーションで必要な構成の詳細を追加できます。 クイックスタートを進める際には、次の点を考慮してください。
- 計画的な使用に合わせてアーティファクトを構成します。 サイトまたはインスタンスによって異なるアーティファクトからグローバル アーティファクトを分離することを検討してください。
- ネットワークのニーズに一致する一連のパラメーターを持つ複数の NF のサービス構成を確認します。 たとえば、1,000 個の値を持つグラフがあり、そのうちの 100 個だけをカスタマイズするとします。 コンフィギュレーション グループ スキーマ (CGS) レイヤー (以降のセクションで詳しく説明) で、100 個のみを公開していることを確認します。
- インフラストラクチャ (クラスターなど) またはアーティファクト ストアを分離し、(特に 1 つのサービス内の) サプライヤー間でアクセスする方法について、早い段階で検討してください。 パブリッシャー リソースのセットをこのモデルと一致させます。
- Azure Operator Service Manager サイトは、デプロイ先を表す論理的な概念です。 たとえば、コンテナー化されたネットワーク機能 (CNF) 用の Kubernetes クラスターや、仮想化されたネットワーク機能 (VNF) 用の Azure Operator Nexus 拡張カスタムの場所などがあります。 これは物理エッジ サイトの表現ではないので、複数のサイトが同じ物理的な場所を共有するユース ケースがあります。
- Azure Operator Service Manager にはさまざまな API が用意されているため、ADO やその他のパイプライン ツールと簡単に組み合わせることができます。
パブリッシャーに関する考慮事項
NF サプライヤーごとに 1 つのパブリッシャーを作成することをお勧めします。 このプラクティスにより、すべてのサプライヤーに最適なサポート、メンテナンス、ガバナンス エクスペリエンスが提供され、複数のベンダーから成る複数の NF で構成されている場合、ネットワーク サービスの設計が簡素化されます。
目的の Azure Operator Service Manager パブリッシャー リソースとアーティファクトのセットがテストされ、運用環境での使用が承認されたら、セット全体を変更不可としてマークして、偶発的な変更を防ぎ、一貫したデプロイ エクスペリエンスを確保することをお勧めします。 変更不可機能を使用して、運用環境で使用されるリソースおよびアーティファクトと、テストおよび開発目的で使用されるリソースおよびアーティファクトを区別することを検討してください。 パブリッシャー リソースとアーティファクト マニフェストの状態に対してクエリを実行し、変更不可としてマークされているものを特定できます。 詳細については、「テナント、サブスクリプション、リージョン、プレビュー管理」を参照してください。
次のロジックに留意してください。
- ネットワーク サービス設計バージョン (NSDV) が変更不可としてマークされている場合は、CGS も変更不可としてマークする必要があります。 それ以外の場合、デプロイ呼び出しは失敗します。
- ネットワーク機能デザイン バージョン (NFDV) が変更不可としてマークされている場合は、アーティファクト マニフェストも変更不可としてマークする必要があります。 それ以外の場合、デプロイ呼び出しは失敗します。
- アーティファクト マニフェストまたは CGS のみが変更不可としてマークされている場合、NFDV と NSDV が変更不可変としてマークされているかどうかに関係なく、デプロイ呼び出しは成功します。
- アーティファクト マニフェストを変更不可としてマークすると、そのマニフェストに一覧表示されているすべてのアーティファクト (通常、グラフ、イメージ、Azure Resource Manager テンプレート [ARM テンプレート]) も、アーティファクト ストアに必要なアクセス許可を適用することで変更不可としてマークされます。
残りのギャップに対処するために、合意に基づく名前付け規則とガバナンス手法を使用することを検討してください。
ネットワーク機能定義のグループとバージョンに関する考慮事項
ネットワーク機能定義グループ (NFDG) は、複数のサービス間で個別に再利用する予定の最小コンポーネントを表します。 NFDG のすべての部分は、常に一緒にデプロイされます。 これらの部分は networkFunctionApplications
と呼ばれます。 たとえば、これらのコンポーネントを常に一緒にデプロイする場合、複数の Helm チャートとイメージで構成される 1 つの NF を 1 つの NFDG としてオンボードするのは自然です。 複数の NF が常に一緒にデプロイされる場合は、それらすべてに対して 1 つの NFDG を用意するのが妥当です。 1 つの NFDG に複数の NFDV を含めることができます。
コンテナー化されたネットワーク機能定義バージョン (CNF NFDV) の場合、networkFunctionApplications
リストには helm パッケージのみを含めることができます。 複数の helm パッケージが常に一緒にデプロイおよび削除される場合は、複数の helm パッケージを含めるのが妥当です。
仮想化されたネットワーク機能定義バージョン (VNF NFDV) の場合、networkFunctionApplications
リストには少なくとも 1 つの VhdImageFile
と 1 つの ARM テンプレートが含まれている必要があります。 ARM テンプレートでは、単一の仮想マシン (VM) をデプロイする必要があります。 1 つの VNF に複数の VM をデプロイするには、VM ごとに個別の ARM テンプレートを使用してください。
ARM テンプレートは、次のリソース プロバイダーからの Resource Manager リソースのみをデプロイできます。
- Microsoft.Compute
- Microsoft.Network
- Microsoft.NetworkCloud
- Microsoft.Storage
- Microsoft.NetworkFabric
- Microsoft.Authorization
- Microsoft.ManagedIdentity
Note
上記の一覧以外のリソースを含む ARM テンプレートの場合、VNF でのすべての PUT 呼び出しと再 PUT で検証エラーが発生します。
ネットワーク機能設計バージョンのマイナーまたはメジャー バージョンの更新をトリガーする一般的なユース ケース
deployParametersMappingRuleProfile
の変更をトリガーする既存のリリースの CGS/コンフィギュレーション グループの値 (CGV) の更新。- NFDV でハードコーディングされた値の更新。
- コンポーネントを非アクティブにして、
applicationEnablement: Disabled
経由でデプロイされないようにする。 - グラフやイメージなどの新しい NF リリース。
Note
特定の NF のペイロードが変更されるたびに必要な変更の最小数。 新しい CGS パラメーターを公開しないマイナーまたはメジャーの NF リリースでは、アーティファクト マニフェストを更新し、新しいイメージとグラフをプッシュし、NFDV バージョンをバンプするだけで済みます。
ネットワーク サービス設計のグループとバージョンに関する考慮事項
ネットワーク サービス設計グループ (NSDG) は、1 つ以上の NFDG と、同時にデプロイされたインフラストラクチャ コンポーネント (Nexus Azure Kubernetes Service [NAKS]/Azure Kubernetes Service [AKS] クラスターと仮想マシン) の複合です。 サイト ネットワーク サービス (SNS) は、単一の NSDV を指します。 このような設計により、1 つの SNS PUT から特定のサイトへのネットワーク サービスの一貫性のある反復可能なデプロイが保証されます。
NSDG の例を次に示します。
- 認証サーバー機能 (AUSF) NF
- 統合データ管理 (UDM) NF
- AUSF/UDM をサポートする管理 VM
- Unity Cloud (UC) セッション管理機能 (SMF) NF
- AUSF、UDM、および SMF がデプロイされている NAKS クラスター
これら 5 つのコンポーネントは、単一の NSDG を形成します。 1 つの NSDG に複数の NSDV を含めることができます。
ネットワーク サービス設計バージョンのマイナーまたはメジャー バージョンの更新をトリガーする一般的なユース ケース
- CGS の作成または削除。
- 展開されているいずれかの NF に関連付けられている NF ARM テンプレートの変更。
- インフラストラクチャ ARM テンプレートの変更 (AKS/NAKS や VM など)。
Note
NFDV の変更によって NSDV 更新がトリガーされることはありません。 NFDV 値は CGS 内のパラメーターとして公開されるため、オペレーターは CGV を使用して展開する内容を制御できます。
コンフィギュレーション グループ スキーマに関する考慮事項
NF 全体の CGS は常に 1 つから開始することをお勧めします。 サイト固有またはインスタンス固有のパラメーターがある場合でも、それらを 1 つの CGS に保持することをお勧めします。 複数のコンポーネント (まれに NF、より一般的にはインフラストラクチャ) または複数の NF 間で共有される構成がある場合は、複数の CGS に分割することをお勧めします。 CGS の数によって、CGV の数が定義されます。
シナリオ
- FluentD、Kibana、Splunk (一般的なサードパーティ コンポーネント) は、NSD 内のすべての NF に対して常にデプロイされます。 これらのコンポーネントを 1 つの NFDG にグループ化することをお勧めします。
- NSD には複数の NF があり、すべてがいくつかの構成 (展開場所、パブリッシャー名、およびいくつかのグラフ構成) を共有します。
このシナリオでは、1 つのグローバル CGS を使用して、一般的な NF およびサードパーティ コンポーネントの構成を公開することをお勧めします。 NF 固有の CGS は必要に応じて定義できます。
公開するパラメーターを選択する
- CGS には、NF (day 0/N 構成) または共有コンポーネントによって使用されるパラメーターのみを含める必要があります。
- めったに構成されないパラメーターには、既定値が定義されている必要があります。
- 複数の CGS を使用する場合は、パラメーター間の重複をほとんどまたはまったくなくすことをお勧めします。 重複が必要な場合は、パラメーター名が CGS 間で明確に区別できることを確認します。
- CGS では、API (Azure Operator Nexus、Azure Operator Service Manager) を使用して定義できる内容を考慮する必要があります。 たとえば、CloudInit ファイルを使用してこれらの構成値を定義するのとは対照的です。
- 不明な場合は、パラメーターを公開し、CGS で適切な既定値を指定することをお勧めします。 次の例は、サンプルの CGS と対応する CGV ペイロードを示しています。
- 1 つのユーザー割り当てマネージド ID がすべての NF ARM テンプレートで使用され、CGS 経由で公開されます。
CGS ペイロード:
{ "type": "object", "properties": { "abc": { "type": "integer", "default": 30 }, "xyz": { "type": "integer", "default": 40 }, "qwe": { "type": "integer" //doesn't have defaults } } "required": "qwe" }
オペレーターによって渡される対応する CGV ペイロード:
{ "qwe": 20 }
Azure Operator Service Manager によって生成された CGV ペイロード:
{ "abc": 30, "xyz": 40, "qwe": 20 }
コンフィギュレーション グループの値に関する考慮事項
CGV リソースの作成を送信する前に、基になる YAML または JSON ファイルのスキーマと値が、対応する CGS で想定されているものと一致していることを検証できます。 これを実行するには、Visual Studio Code の YAML 拡張機能を使用する方法があります。
CLI の考慮事項
Azure Operator Service Manager CLI 拡張機能は、NFD と NSD の発行を支援します。 このツールは、新しい NFD と NSD を作成するための開始点として使用します。 CLI を使用して初期ファイルを作成することを検討してください。 次に、それらを編集して、発行する前にインフラストラクチャ コンポーネントを組み込みます。
サイト ネットワーク サービスに関する考慮事項
インフラストラクチャを含め、サイト全体に対して 1 つの SNS を使用することをお勧めします。 SNS では、必要なインフラストラクチャ (たとえば、NAKS/AKS クラスターや仮想マシン) をデプロイし、必要な NF をその上にデプロイする必要があります。 このような設計により、1 つの SNS PUT から特定のサイトへのネットワーク サービスの一貫性のある反復可能なデプロイが保証されます。
すべての SNS は、システム割り当てマネージド ID ではなく、ユーザー割り当てマネージド ID を使用してデプロイすることをお勧めします。 このユーザー割り当てマネージド ID には、NFDV にアクセスするためのアクセス許可が必要であり、マネージド ID オペレーターの役割自体が必要です。 詳細については、「ユーザー割り当てマネージド ID を作成して割り当てる」を参照してください。
ユース ケースごとの Azure Operator Service Manager リソース マッピング
次の 2 つのシナリオは、Azure Operator Service Manager のリソース マッピングを示しています。
シナリオ: 単一ネットワーク機能
1 つまたは 2 つのアプリケーション コンポーネントを含む NF を NAKS クラスターにデプロイします。
リソースの内訳:
- NFDG: コンポーネントを個別に使用できる場合は、コンポーネントごとに 1 つずつ、2 つの NFDG を使用します。 コンポーネントが常に一緒にデプロイされる場合は、1 つの NFDG を使用します。
- NFDV: 必要に応じて、NFDV のマイナーまたはメジャー バージョンの更新をトリガーする前述の「一般的なユース ケース」セクションで説明したユース ケースに基づいています。
- NSDG: 1 つ。 NF と Kubernetes クラスターの定義を結合します。
- NSDV: 必要に応じて、NSDV のマイナーまたはメジャー バージョンの更新をトリガーする前述の「一般的なユース ケース」セクションで説明したユース ケースに基づいています。
- CGS: 1 つ。 CGS には、管理を容易にするために展開される各コンポーネントとインフラストラクチャのサブセクションがあり、NFD のバージョンが含まれていることをお勧めします。
- CGV: CGS の数に基づき 1 つ。
- SNS: NSDV ごとに 1 つ。
シナリオ: 複数のネットワーク機能
一部の共有コンポーネントと独立したコンポーネントを持つ複数の NF を 1 つの NAKS クラスターにデプロイします。
リソースの内訳:
- NFDG:
- すべての共有コンポーネントの NFDG。
- すべての独立したコンポーネントまたは NF の NFDG。
- NFDV: NFDV のマイナー バージョンまたはメジャー バージョンの更新をトリガーする前述の「一般的なユース ケース」セクションで説明したユース ケースに従って、NFDG ごとに複数。
- NSDG: 1 つ。 すべての NF、共有コンポーネントおよび独立したコンポーネント、インフラストラクチャ (Kubernetes クラスターまたはサポート VM) を結合します。
- NSDV: 必要に応じて、NSDV のマイナーまたはメジャー バージョンの更新をトリガーする前述の「一般的なユース ケース」セクションで説明したユース ケースに基づいています。
- CGS:
- 未婚であることを表わします。 共有構成値を持つすべてのコンポーネントにグローバル。
- NFD のバージョンを含む NF ごとの NF CGS。
- パラメーターの総数に応じて、すべての CGSを 1 つの CGS にまとめることを検討してください。
- CGV: CGS の数に等しい。
- SNS: NSDV ごとに 1 つ。
ソフトウェアのアップグレードに関する考慮事項
NF が CNF のインプレース/インサービス アップグレードをサポートしていると仮定します。
- 新しいグラフとイメージが追加されると、Azure Operator Service Manager によって新しいグラフがインストールされます。
- 一部のグラフとイメージが削除された場合、Azure Operator Service Manager は NFDV で宣言されなくなったグラフを削除します。
- Azure Operator Service Manager は、NFDV/NSDV が同じ NFDG/NSDG から生成されたこと、つまり同じパブリッシャーであることを検証します。 クロスパブリッシャー アップグレードはサポートされていません。
VNF の場合:
- インプレース アップグレードは現在サポートされていません。 更新されたイメージを左右に並べて表示して、新しい VNF をインスタンス化する必要があります。 次に、SNS を削除して古い VNF を削除します。
- 高可用性のために VNF が VM のペアとしてデプロイされている場合は、VM を 1 つずつ削除してアップグレードできるようにネットワーク サービスを設計できます。 個々の VM の削除とアップグレードを許可するには、次の設計をお勧めします。
- 各 VM を専用の ARM テンプレートを使用してデプロイします。
- ARM テンプレートから、CGS を介して次の 2 つのパラメーターを公開する必要があります。どのインスタンスがプライマリ/セカンダリであるかを示すことができる VM 名と、VM のデプロイを許可するかどうかを制御するデプロイ ポリシーです。
- NFDV では、
deployParameters
とtemplateParameters
をパラメーター化して、それぞれに CGV を使用して一意の値を指定できるようにする必要があります。
高可用性とディザスター リカバリーの考慮事項
Azure Operator Service Manager は、それらをサポートするリージョン内の可用性ゾーン全体にデプロイされたリージョン サービスです。 Azure Operator Service Manager を使用できるすべてのリージョンについては、「リージョン別の Azure 製品」を参照してください。 可用性ゾーンを持つ Azure リージョンの一覧については、「適切な Azure リージョンを選択する」を参照してください。
次の高可用性とディザスター リカバリーの要件を考慮してください。
- geo 冗長性を提供するには、NF のデプロイを計画しているすべてのリージョンにパブリッシャーがあることを確認します。 パイプラインを使用して、パブリッシャーのアーティファクトとリソースがリージョン間で同期されていることを確認することを検討してください。
- パブリッシャー名は、Microsoft Entra テナントごとにリージョンごとに一意である必要があります。
Note
リージョンが使用できなくなった場合は、別のリージョンのパブリッシャー リソースを使用して NF をデプロイできます (アップグレードすることはできません)。 アーティファクトとリソースがパブリッシャー間で同一であると仮定すると、必要なのは、SNS リソース・ペイロードの networkServiceDesignVersionOfferingLocation
値を変更することだけです。
resource sns 'Microsoft.HybridNetwork/sitenetworkservices@2023-09-01’ = { name: snsName location: location identity: { type: 'SystemAssigned' } properties: { publisherName: publisherName publisherScope: 'Private' networkServiceDesignGroupName: nsdGroup networkServiceDesignVersionName: nsdvName networkServiceDesignVersionOfferingLocation: location
トラブルシューティングの考慮事項
インストールとアップグレードの既定では、アトミック オプションと待機オプションは true
に設定され、操作のタイムアウトは 27 minutes
に設定されます。 初期オンボード中の、成果物のデバッグと開発を行っている間にのみ、atomic フラグを false.
に設定することをお勧めします。これにより、障害が発生しても Helm はロールバックせず、ログやエラーが保持されます。そうしないと、これらが失われる可能性があります。 そのための最適な方法は、NF の ARM テンプレートにあります。
ARM テンプレートで、次のセクションを追加します。
"roleOverrideValues": [ "{\"name\":\"NF_component_name>\",\"deployParametersMappingRuleProfile\":{\"helmMappingRuleProfile\":{\"options\":{\"installOptions\":{\"atomic\":\"false\",\"wait\":\"true\",\"timeout\":\"100\"},\"upgradeOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"4\"}}}}}" ]
コンポーネント名は NFDV で定義されます。
networkFunctionTemplate: { nfviType: 'AzureArcKubernetes' networkFunctionApplications: [ { artifactType: 'HelmPackage' name: 'fed-crds' dependsOnProfile: null artifactProfile: { artifactStore: { id: acrArtifactStore.id }
重要
初期オンボードが完了した後で、atomic と wait が true
に設定されていることを確認してください。
クリーンアップに関する考慮事項
オペレーター リソース
デプロイされた環境をクリーン アップするための最初の手順として、まず次の順序でオペレーター リソースを削除します。
- SNS
- サイト
- CGV
これらのオペレーター リソースが正常に削除された場合にのみ、ユーザーは NAKS クラスターなどの他の環境リソースの削除に進む必要があります。
重要
違う順序でリソースを削除すると、孤立したリソースが残ってしまう場合があります。
パブリッシャー リソース
オンボード環境をクリーン アップするための最初の手順として、まず次の順序でパブリッシャー リソースを削除します。
- NSDV
- NSDG
重要
NFDV を削除する前に、必ず SNS が削除されていることを確認してください。
- NFDV
- NFDG
- アーティファクトマニフェスト
- アーティファクトストア
- 発行元
重要
違う順序でリソースを削除すると、孤立したリソースが残ってしまう場合があります。
NfApp の順序付け動作
概要
既定では、コンテナー化ネットワーク機能アプリケーション (NfApp) は、ネットワーク機能設計バージョン (NFDV) に表示される順序に基づいてインストールまたは更新されます。 削除の場合、NfApp は指定された逆の順序で削除されます。 発行元が既定とは異なる NfApp の特定の順序を定義する必要がある場合、dependsOnProfile を使用して、インストール、更新、削除操作の一意のシーケンスを定義します。
dependsOnProfile の使用方法
発行元は、NFDV の dependsOnProfile を使用して、NfApp の Helm 実行のシーケンスを制御できます。 次の例では、インストール操作時に NfApp が次の順序でデプロイされます: dummyApplication1、dummyApplication2、dummyApplication。 更新操作では、NfApp は次の順序で更新されます: dummyApplication2、dummyApplication1、dummyApplication。 削除操作では、NfApp は次の順序で削除されます: dummyApplication2、dummyApplication1、dummyApplication。
{
"location": "eastus",
"properties": {
"networkFunctionTemplate": {
"networkFunctionApplications": [
{
"dependsOnProfile": {
"installDependsOn": [
"dummyApplication1",
"dummyApplication2"
],
"uninstallDependsOn": [
"dummyApplication1"
],
"updateDependsOn": [
"dummyApplication1"
]
},
"name": "dummyApplication"
},
{
"dependsOnProfile": {
"installDependsOn": [
],
"uninstallDependsOn": [
"dummyApplication2"
],
"updateDependsOn": [
"dummyApplication2"
]
},
"name": "dummyApplication1"
},
{
"dependsOnProfile": null,
"name": "dummyApplication2"
}
],
"nfviType": "AzureArcKubernetes"
},
"networkFunctionType": "ContainerizedNetworkFunction"
}
}
一般的なエラー
現在、NFDV で指定された dependsOnProfile が無効な場合、NF 操作は検証エラーで失敗します。 検証エラー メッセージが操作状態リソースに表示され、次の例のようになります。
{
"id": "/providers/Microsoft.HybridNetwork/locations/EASTUS2EUAP/operationStatuses/ca051ddf-c8bc-4cb2-945c-a292bf7b654b*C9B39996CFCD97AB3A121AE136ED47F67BB13946C573EF90628C47628BC5EF5F",
"name": "ca051ddf-c8bc-4cb2-945c-a292bf7b654b*C9B39996CFCD97AB3A121AE136ED47F67BB13946C573EF90628C47628BC5EF5F",
"resourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/xinrui-publisher/providers/Microsoft.HybridNetwork/networkfunctions/testnfDependsOn02",
"status": "Failed",
"startTime": "2023-07-17T20:48:01.4792943Z",
"endTime": "2023-07-17T20:48:10.0191285Z",
"error": {
"code": "DependenciesValidationFailed",
"message": "CyclicDependencies: Circular dependencies detected at hellotest."
}
}