Share via


Azure Operator Nexus 仮想マシンでの配置ヒントの操作

この記事では、Azure Operator Nexus 環境内で仮想マシン配置をガイドするヒントの使用方法について説明します。 これらの配置ヒントを使用して、仮想マシン、ベアメタル マシン、またはラック間にアフィニティまたはアンチアフィニティを作成できます。 仮想マシンが Azure Operator Nexus 環境内で目的の方法でスケジュールされていることを確認するには、配置ヒントを使用します。

アフィニティ ルールを使用すると、仮想マシンを同じ物理マシンまたはラックでホストするように指定できます。 逆に、アンチアフィニティ ルールでは、仮想マシンが異なる物理マシンまたはラックでホストされるようにします。

アンチアフィニティ ルールを使用して仮想マシンをさまざまな障害ドメイン (ラック、物理マシンなど) に分散させることで、アプリケーションの全体的な回復性を向上できます。 アフィニティ ルールを使用して仮想マシンをより少ない物理マシンにパックすることで、アプリケーションのコスト効率を向上できます。

前提条件

この攻略ガイドに進む前に、Azure Operator Nexus 仮想マシン クイック スタート に関するガイドに記載されたすべての手順を完了していることを確認してください。

配置ヒントの構成

このセクションでは、配置ヒントの概念と、API の各フィールドのしくみについて説明します。これは、仮想マシンを設定、管理するときに役立ちます。

{
 "hintType": "Affinity/AntiAffinity",
 "resourceId": "ARM ID of the virtual machine, bare-metal machine, or rack",
 "schedulingExecution": "Hard/Soft",
 "scope": "Rack/Machine"
}

ヒントの種類

この hintType 引数は、配置ヒントが参照先リソースとのアフィニティまたはアンチアフィニティをサポートするかどうかを指定するために、配置ヒントで使用されます。

hintType 引数には、Affinity または AntiAffinity の 2 つの値を指定できます。

  • Affinity: hintType が Affinity に設定されている場合、配置ヒントを使用して、VM と参照されるリソースの間にアフィニティ ルールが作成されます。 その結果、VM は、参照先のリソースとして、特定のベアメタル マシン、ラック、または仮想マシン インスタンスの近くにスケジュールされます。
  • AntiAffinity: hintType が AntiAffinity に設定されている場合、配置ヒントを使用して、VM と参照されるリソースの間にアンチアフィニティ ルールが作成されます。 その結果、VM は、参照先のリソースとは異なるベアメタル マシン、ラック、または仮想マシン インスタンスでスケジュールされます。

Resource ID

配置ヒントの resourceId 引数は、配置ヒントをチェックする対象オブジェクトを指定します。 ターゲット オブジェクトには、次のいずれかを指定できます。

  • Virtual Machine: ターゲット オブジェクトが仮想マシンの場合、配置ヒントはその特定の仮想マシン インスタンスに対してチェックされます。
  • BareMetalMachine: ターゲット オブジェクトがベアメタル マシンの場合、配置ヒントはその特定のベアメタル マシンに対してチェックされます。
  • Rack: ターゲット オブジェクトがラックの場合、配置ヒントは、そのラックで実行されているすべてのベアメタル マシンに対してチェックされます。

重要

resourceId 引数は ARM ID の形式で指定され、ターゲット オブジェクトの有効なリソース ID である必要があります。 resourceId が正しくないか無効な場合、配置ヒントは正しく機能せず、VM のスケジュール設定が失敗する可能性があります。

Scope

この scope 引数は、仮想マシンのアフィニティまたはアンチアフィニティ配置ヒントのスコープを指定するために、配置ヒントで使用されます。 スコープ引数は、resourceId 引数が仮想マシンを対象とする場合にのみ適用されます。

スコープ引数には、Machine または Rack の 2 つの値を指定できます。

  • Machine: スコープが Machine に設定されている場合、配置ヒントは、指定された仮想マシンと同じベアメタル マシンに適用されます。 たとえば、配置ヒントで、指定した VM と同じベアメタル マシンに VM を配置するよう指定されている場合、スコープは Machine に設定されます。
  • Rack: スコープが Rack に設定されている場合、配置ヒントは、指定された仮想マシンが属しているラックに適用されます。 たとえば、配置ヒントで、指定した仮想マシンが現在配置されているのと同じラックに VM を配置するよう指定されている場合、スコープは Rack に設定されます。

重要

この引数を空白のままにすることはできません。

実行のスケジュール設定

この schedulingExecution 引数は、スケジュール設定時に配置ヒントをハード要件とソフト要件のどちらにするかを指定するために、配置ヒントで使用されます。

schedulingExecution 引数には、Hard または Soft の 2 つの値を指定できます。

  • Hard: schedulingExecution が Hard に設定されている場合、配置ヒントはスケジュール設定中に厳密な要件と見なされます。 その結果、スケジューラは、配置ヒントで指定された、特定のリソースにのみ仮想マシンを配置します。 ハード要件を満たす使用可能なリソースがない場合、仮想マシンのスケジュール設定は失敗します。
  • Soft: schedulingExecution が Soft に設定されている場合、配置ヒントはスケジューリング設定中に優先の要件と見なされます。 その結果、スケジューラは、配置ヒントで指定された、特定のリソースに仮想マシンを配置しようとしますが、それが不可能な場合、別のリソースに仮想マシンを配置できます。

ラック アフィニティとアンチアフィニティ配置ヒントの例

使用可能なラック ID を取得する

  1. 必要な変数を設定します。

    NEXUS_CLUSTER_NAME=<Operator Nexus cluster name>
    NEXUS_CLUSTER_RG=<Operator Nexus cluster resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    NEXUS_CLUSTER_MANAGED_RG="$(az networkcloud cluster show -n $NEXUS_CLUSTER_NAME -g $NEXUS_CLUSTER_RG --query managedResourceGroupConfiguration.name | tr -d '\"')"
    
  2. ラック ID を取得します。

    az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. サンプル出力。

    $ az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id    
    [
      "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<network-aggregation-rack>",
      "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-1>",
      "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>",
      "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-3>",
      "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-4>",
      "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-n>"
    ]
    

仮想マシンを特定のラックに配置する

この例では、特に仮想マシンを特定のラックに配置する場合の、ソフト アフィニティとハード アフィニティの概念について説明します。

Note

この例と次の例では、--placement-hints 引数のバリエーションのみが示されています。 配置ヒントを使用して VM を実際に作成するには、VM のクイック スタート ガイドに示されている CLI に --placement-hints を追加する必要があります。

厳密なスケジュール設定 (ラックのアフィニティ)

この配置ヒントでは、Affinity hintType を使用して、指定されたラック ID を持つ特定のラックのみで仮想マシンがスケジュール設定されるようにします。 ラックが使用できない場合、または容量がない場合、スケジュール設定は失敗します。 この配置ヒントは、パフォーマンス、セキュリティ、またはその他の理由で特定の仮想マシンを特定のラックに配置しなければならない場合に役立ちます。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Hard","scope":"Rack"}]'

Note

Affinity hintType を使用した現在の配置ヒントの構成により、指定されたラック ID を持つ特定のラックに仮想マシンが排他的にスケジュールされます。 ただし、Hard の実行をスケジュール設定する複数のラックに対してラック アフィニティを指定できないことに特に注意してください。 この制限は、特に複数のラックに VM を配置し、スケジューラがそれらの選択を考慮する場合に、デプロイ戦略に影響を与える可能性があります。

優先スケジュール設定 (ラックのアフィニティ)

この配置ヒントでは、Affinity hintType を使用して、仮想マシンと指定されたラックの間にアフィニティ ルールを確立します。 また、Soft schedulingExecution を使用して、指定されたラックにアクセスできない場合や容量がない場合に備えて、VM を代替ラックに配置できるようにします。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Soft","scope":"Rack"}]'

仮想マシンが特定のラックに配置されないようにする

この例では、ソフト アンチアフィニティとハード アンチアフィニティの概念について説明します。特に、仮想マシンが特定のラックに配置されるのを防ぐことについて説明します。

厳密なスケジュール設定 (ラックのアンチアフィニティ)

この配置ヒントでは、AntiAffinity hintType と Hard schedulingExecution の両方を使用して、ラック ID で識別される特定のラックに仮想マシンがスケジュール設定されないようにします。 この構成では、スケジューラはこれらの配置ヒントに厳密に従います。 ただし、ラック ID が正しくない場合、または他のラックに十分な容量がない場合、Hard スケジュール ルールの厳密な適用により VM の配置が失敗することがあります

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Hard","scope":"Rack"}]'

優先スケジュール設定 (ラックのアンチアフィニティ)

この配置ヒントでは、仮想マシンの配置用に特定のラックを使用しない目的で AntiAffinity hintType を使用します。 ただし、この設定にもかかわらず、他のラックに十分な容量がない場合でも、この望ましくないラックに VM を配置できることに注意してください。 この配置は、schedulingExecution が Soft に設定されているために発生します。これにより、他のオプションが実現できない場合に、最初に回避されたラックに VM を収容できます。

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Soft","scope":"Rack"}]'

ベアメタル マシンのアフィニティとアンチアフィニティ配置ヒントの例

使用可能なベアメタル マシン ID を取得する

  1. 必要な変数を設定します。

    NEXUS_CLUSTER_NAME=<Operator Nexus cluster name>
    NEXUS_CLUSTER_RG=<Operator Nexus cluster resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    NEXUS_CLUSTER_MANAGED_RG="$(az networkcloud cluster show -n $NEXUS_CLUSTER_NAME -g $NEXUS_CLUSTER_RG --query managedResourceGroupConfiguration.name | tr -d '\"')"
    
  2. ラック ID を取得します。

    az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"
    
  3. サンプル出力。

    $ az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"
    [
      {
        "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>",
        "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-1>"
      },
      {
        "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>",
        "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>"
      },
      {
        "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>",
        "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-3>"
      },
      {
        "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>",
        "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-4>"
      },
      {
        "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>",
        "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-n>"
      }
    ]
    

仮想マシンを特定のベアメタル マシンに配置する

この例では、特に仮想マシンを特定のベアメタル マシンに配置する場合の、ソフト アフィニティとハード アフィニティの概念について説明します。

厳密なスケジュール設定 (ベアメタル マシンのアフィニティ)

この配置ヒントでは、Affinity hintType を使用して、指定されたベアメタル マシン ID を持つ特定のベアメタル マシンでのみ仮想マシンがスケジュール設定されるようにします。 ベアメタル マシンが使用できない、または容量がない場合、スケジュール設定は失敗します。 この配置ヒントは、パフォーマンス、セキュリティ、またはその他の理由で特定のベアメタル マシンを特定のラックに配置しなければならない場合に役立ちます。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'

優先スケジュール (ベアメタル マシンのアフィニティ)

この配置ヒントでは、Affinity hintType を使用して、仮想マシンと指定されたベアメタル マシンの間にアフィニティ ルールを確立します。 また、Soft schedulingExecution を使用して、指定されたベアメタル マシンにアクセスできない場合や容量がない場合に備えて、VM を代替ベアメタル マシンに配置できるようにします。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Soft","scope":"Machine"}]'

仮想マシンが特定のベアメタル マシンに配置されないようにする

この例では、ソフト アンチアフィニティとハード アンチアフィニティの概念について説明します。特に、仮想マシンが特定のベアメタル マシンに配置されるのを防ぐことについて説明します。

厳密なスケジュール設定 (ベアメタル マシンのアンチアフィニティ)

この配置ヒントでは、AntiAffinity hintType と Hard schedulingExecution の両方を使用して、ベアメタル マシン ID で識別される特定のベアメタル マシンに仮想マシンがスケジュール設定されないようにします。 この構成では、スケジューラはこれらの配置ヒントに厳密に従います。 ただし、ベアメタル マシン ID が正しくない場合、または他のベアメタル マシンに十分な容量がない場合、Hard スケジュール ルールの厳密な適用により VM の配置が失敗することがあります

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'

優先スケジュール設定 (ベアメタル マシンのアンチアフィニティ)

この配置ヒントでは、仮想マシンの配置用に特定のベアメタル マシンを使用しない目的で AntiAffinity hintType を使用します。 ただし、この設定にもかかわらず、他のベアメタル マシンに十分な容量がない場合でも、この望ましくないベアメタル マシンに VM を配置できることに注意してください。 この配置は、schedulingExecution が Soft に設定されているために発生します。これにより、他のオプションが実現できない場合に、最初に回避されたベアメタル マシンに VM を収容できます。

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Soft","scope":"Machine"}]'

VM 間アフィニティとアンチアフィニティ配置ヒントの例

使用可能な仮想マシン ID を取得する

  1. 必要な変数を設定します。

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. 仮想マシン ID を取得します。

    az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. サンプル出力。

    $ az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    [
      "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>",
      "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>",
      "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-3>",
      "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-n>"
    ]
    

特定の仮想マシンの近くに仮想マシンを配置する

このセクションでは、特定の VM の近くに仮想マシンを配置する方法と、配置ヒントの構成における scope パラメータの重要な役割について説明します。 スケジューラは、定義されたスコープを介して、同じベアメタル マシン上または参照先の VM resourceId と同じラック内に VM 配置を指示します。 ここで示す例は Hard のスケジュール実行を示していますが、特定のユース ケースに基づき必要に応じて Soft のスケジュールを使用できることに注意してください。

仮想マシンを同じベアメタル マシンに配置する (VM アフィニティ)

この例では、ヒントの種類として Affinity を、スコープとして Machine を指定すると、指定されたリソース ID で識別される VM と同じベアメタル マシンに仮想マシンが配置される構成になります。 その結果、新しい VM は、参照先 VM と同じベアメタル マシンを共有するため、VM 間の待機時間が短くなり、パフォーマンスが向上する場合があります。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>","schedulingExecution":"Hard","scope":"Machine"}]'

仮想マシンを同じラックに配置する (VM アフィニティ)

この例では、ヒントの種類として Affinity を、スコープとして Rack を構成することにより、指定されたリソース ID で識別される VM と同じラック内に仮想マシンが配置されます。 その結果、新しい VM は参照 VM に物理的に近接して配置されるため、ネットワーク待機時間が短縮され、パフォーマンスが向上する場合があります。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>","schedulingExecution":"Hard","scope":"Rack"}]'

仮想マシンが特定の仮想マシンの近くに配置されないようにする (VM のアンチアフィニティ)

このセクションでは、 AntiAffinity のヒントの種類を使用して、VM が他の特定の VM の近くに配置されないようにします。 この scope パラメータは、この分離をマシン レベルまたはラック レベルで行うかどうかを決定します。 この構成は、VM をさまざまなハードウェアに分散して障害やパフォーマンスの問題を回避しなければならない場合に便利です。

仮想マシンが同じベアメタル マシン上に配置されないようにする (VM のアンチアフィニティ)

この例では、スコープを Machine に設定することで、VM が同じベアメタル マシンに配置されなくなります。 このアプローチでは、1 台のマシンの障害がワークロードに影響を与えるリスクを減らすことでフォールト トレランスが向上するため、全体的な堅牢性が向上します。

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>","schedulingExecution":"Hard","scope":"Machine"}]'

仮想マシンが同じラックに配置されないようにする (VM のアンチアフィニティ)

この例では、スコープを Rack に設定して、VM が同じラック内に配置されないようにします。 この構成は、1 つのラックの障害がワークロードに影響しないようにすることで、フォールト トレランスを強化するのに役立ちます。

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>","schedulingExecution":"Hard","scope":"Rack"}]'

次のステップ

この記事の例では一般的なユース ケースをいくつか示していますが、API を使用してさまざまな配置シナリオを実装できるため、仮想マシンの配置を管理する柔軟で適応可能なソリューションになります。 scopeschedulingExecutionhintType パラメータをさまざまな組み合わせで調整して、それらが VM の配置にどのように影響するかを理解します。 配置ヒントを適切に使用すると、Azure Operator Nexus インスタンスで実行されているアプリケーションとサービスの可用性と回復性を向上させることができます。