6.11. アフィニティーグループ

6.11.1. アフィニティーグループ

アフィニティーグループ を作成して、選択した仮想マシンが相互に、および指定されたホストに対してどこで実行されているかを判断するのに役立てることができます。この機能は、ライセンス要件、高可用性ワークロード、障害復旧などのワークロードシナリオの管理に役立ちます。

VM アフィニティールール

アフィニティーグループ の作成時は、グループに属する仮想マシンを選択します。これらの仮想マシンが相互に関連して実行できる場所 を定義するには、VM Affinity Rule を有効にします。Positive アフィニティールールは、1 つのホストで仮想マシンを一緒に実行しようとします。Negative のアフィニティールールは、別のホストで仮想マシンを実行しようとします。ルールを実行できない場合に、結果は加重またはフィルターモジュールが有効になっているかどうかにより異なります。

ホストのアフィニティールール

オプションで、アフィニティーグループにホストを追加できます。グループ内のホストに関連してグループ内の仮想マシンを実行できる場所 を定義するには、Host Affinity Rule を有効にします。Positive アフィニティールールは、アフィニティーグループ内のホストで仮想マシンを実行しようとします。Negative のアフィニティールールは、アフィニティーグループにないホストで仮想マシンを実行しようとします。ルールを実行できない場合に、結果は加重またはフィルターモジュールが有効になっているかどうかにより異なります。

デフォルトの加重モジュール

デフォルトでは、両方のルールがクラスターのスケジューリングポリシーの 加重モジュール を適用します。加重モジュールを使用すると、スケジューラーはルールを実行しようとしますが、ルールを実行できない場合でも、アフィニティーグループ内の仮想マシンを実行できます。

たとえば、正の VM アフィニティールール と加重モジュールが有効になっている場合には、スケジューラーは単一のホストでアフィニティーグループのすべての仮想マシンを 実行しよう とします。ただし、単一のホストにこれに十分なリソースがない場合には、スケジューラーは複数のホストで仮想マシンを実行します。

このモジュールを機能させるには、スケジューリングポリシーの 加重モジュール セクションに VmAffinityGroups および VmToHostsAffinityGroups キーワードを追加する必要があります。

強制オプションとフィルターモジュール

どちらのルールにも、クラスターのスケジューリングポリシーで filter module を適用する Enforcing オプションがあります。フィルターモジュールは加重モジュールを上書きします。フィルターモジュールを有効にすると、スケジューラーはルールに対応する 必要 があります。ルールを満たすことができない場合には、フィルターモジュールにより、アフィニティーグループ内の仮想マシンを実行できなくなります。

たとえば、正の Host Affinity Rule および Enforcing が有効にされている場合 (フィルターモジュールが要求)、スケジューラーはアフィニティーグループの仮想マシンがアフィニティーグループの一部であるホストで実行されることを 要求します。ただし、それらのホストがダウンしている場合、スケジューラーは仮想マシンをまったく実行しません。

このモジュールが機能するには、スケジューリングポリシーの filter module セクションに VmAffinityGroups および VmToHostsAffinityGroups キーワードを追加する必要があります。

これらのルールとオプションを相互に利用する方法については、アフィニティーグループの例 を参照してください。

警告
  • アフィニティーラベルが機能するには、スケジューリングポリシーの filter module セクションに Label が含まれている必要があります。
  • アフィニティーグループとアフィニティーラベルが相互に競合する場合、影響を受ける仮想マシンは実行されません。競合の回避、トラブルシューティング、および解決の方法は、アフィニティーグループのトラブルシューティング を参照してください。
重要

各ルールは、クラスターのスケジューリングポリシーの重みおよびフィルターモジュールの影響を受けます。

  • VM Affinity Rule ルールが機能するには、スケジューリングポリシーの Weight module および Filter module セクションに VmAffinityGroups キーワードがなければなりません。
  • Host Affinity Rule が機能するには、スケジューリングポリシーの Weight module および Filter module セクションに VmToHostsAffinityGroups キーワードがなければなりません。

詳細は、管理ガイドスケジューリングポリシー を参照してください。

注記
  • アフィニティーグループはクラスター内の仮想マシンに適用されます。仮想マシンをあるクラスターから別のクラスターに移動すると、その仮想マシンは元のクラスターのアフィニティーグループから削除されます。
  • アフィニティーグループルールを有効にするのに、仮想マシンを再起動する必要はありません。

6.11.2. アフィニティーグループの作成

管理ポータルで新しいアフィニティーグループを作成できます。

アフィニティーグループの作成

  1. ComputeVirtual Machines をクリックし、仮想マシンを選択します。
  2. 仮想マシンの名前をクリックして、詳細ビューに移動します。
  3. Affinity Groups タブをクリックします。
  4. New をクリックします。
  5. アフィニティーグループの NameDescription を入力します。
  6. VM Affinity Rule ドロップダウンから、Positiveを選択して正のアフィニティーを適用するか、Negative を選択して負のアフィニティーを適用します。アフィニティールールを無効にするには、Disable を選択します。
  7. Enforcing チェックボックスを選択してハード強制を適用するか、このチェックボックスの選択を解除してソフト強制を適用します。
  8. ドロップダウンリストを使用して、アフィニティーグループに追加する仮想マシンを選択します。+ ボタンと- ボタンを使用して、仮想マシンを追加または削除します。
  9. OK をクリックします。

6.11.3. アフィニティーグループの編集

アフィニティーグループの編集

  1. ComputeVirtual Machines をクリックし、仮想マシンを選択します。
  2. 仮想マシンの名前をクリックして、詳細ビューに移動します。
  3. Affinity Groups タブをクリックします。
  4. Edit をクリックします。
  5. VM Affinity Rule ドロップダウンおよび Enforcing チェックボックスを希望する値に変更し、+ ボタンおよび - ボタンを使用して、アフィニティーグループに仮想マシンを追加または削除します。
  6. OK をクリックします。

6.11.4. アフィニティーグループの削除

アフィニティーグループの削除

  1. ComputeVirtual Machines をクリックし、仮想マシンを選択します。
  2. 仮想マシンの名前をクリックして、詳細ビューに移動します。
  3. Affinity Groups タブをクリックします。
  4. Remove をクリックします。
  5. OK をクリックします。

アフィニティーグループのメンバーであった仮想マシンに適用されるそのアフィニティーポリシーは適用されなくなります。

6.11.5. アフィニティーグループの例

以下の例では、本章で説明しているアフィニティーグループのさまざまな機能を使用して、さまざまなシナリオでアフィニティールールを適用する方法を説明します。

例6.1 高可用性

Dalia は、スタートアップ企業の DevOps エンジニアです。高可用性を確保するために、特定のシステムの 2 つの仮想マシンをクラスター内の任意の異なるホスト上で実行する必要があります。

Dalia は、high availability という名前のアフィニティーグループを作成し、以下を行います。

  • 2 つの仮想マシン VM01 および VM02 をアフィニティーグループに追加します。
  • VM AffinityNegative に設定して、仮想マシンが別のホストで実行されるようにします。
  • Enforcing の選択を解除 (無効) したままにし、障害発生時に利用可能なホストが 1 つしかない場合に、両方の仮想マシンが実行を継続できるようにします。
  • Hosts 一覧を空のままにし、仮想マシンがクラスター内の任意のホストで実行されるようにします。

例6.2 パフォーマンス

Sohni は、2 つの仮想マシンを使用して、毎日ソフトウェアを何回もビルドしてテストするソフトウェア開発者です。これら 2 つの仮想マシン間には、大量のネットワークトラフィックが発生します。同じホストでマシンを実行すると、ビルドおよびテストプロセスでのネットワークトラフィックとネットワークレイテンシーの影響の両方が減ります。ハイスペックのホスト (高速の CPU、SSD、大量のメモリー) を使用すると、このプロセスがさらに加速します。

Sohni は、build and test という名前のアフィニティーグループを作成し、以下を行います。

  • VM01 および VM02 (ビルドおよびテスト用仮想マシン) をアフィニティーグループに追加します。
  • ハイスペックのホスト、host03host04、および host05 をアフィニティーグループに追加します。
  • 仮想マシンを同じホストで実行してネットワークトラフィックとレイテンシーの影響を削減するように、VM affinityPositive に設定します。
  • Host affinityPositive に設定して、仮想マシンがハイスペックのホストで実行されプロセスを加速できるようにします。
  • 両方のルールで Enforcing の選択を解除 (無効) したままにし、ハイスペックなホストが利用できない場合に仮想マシンを実行できるようにします。

例6.3 ライセンス

ソフトウェアアセットマネージャーである Bandile は、会社が 3D イメージングソフトウェアベンダーに対する厳しいライセンス要件に準拠するのを支援します。これらの要件では、ライセンスサーバー用の仮想マシン (VM-LS) と、イメージングワークステーション (VM-WS#) を、同じホストで実行する必要があります。さらに、物理 CPU ベースのライセンスモデルでは、ワークステーションを GPU 搭載の 2 つのホストhost-gpu-primary または host-gpu-backup のいずれかで実行する必要があります。

これらの要件を満たすために、Bandile は 3D seismic imaging というアフィニティーグループを作成し、以下を行います。

  • 前述の仮想マシンおよびホストをアフィニティーグループに追加します。
  • VM affinityPositive に設定し、Enforcing を選択して、ライセンスサーバーとワークステーションが、複数のホストではなく必ずどちらかのホストで共に実行されるようにします。
  • Host affinityPositive に設定し、Enforcing を選択して、仮想マシンがクラスター内の他のホストではなく必ず GPU 搭載のいずれかのホストで実行されるようにします。

6.11.6. アフィニティーグループのトラブルシューティング

アフィニティーグループの問題を防ぐ方法

  • アフィニティーグループを使用する際のシナリオを計画し、予想される結果を文書化します。
  • 各種の条件下で結果を確認し、テストします。
  • 変更管理のベストプラクティスに従います。
  • Enforcing オプションは、必要な場合にのみ使用してください。

仮想マシンが実行されていないという問題を確認した場合

アフィニティーラベルとアフィニティーグループ間に競合の可能性がある場合

  • アフィニティーラベルとアフィニティーグループが相互に競合する場合、共通項の仮想マシンのセットが実行されません。
  • 競合の可能性を判断する:

    • クラスターのスケジューリングポリシーのフィルターモジュールセクションを調べます。これらには、Label キーワードと VmAffinityGroups または VmToHostsAffinityGroups キーワードの両方が含まれている必要があります。そうでない場合は、競合は 起こりません。(重みモジュールセクションに VmAffinityGroupsVmToHostsAffinityGroups が存在しても、フィルターモジュールセクションの Label がそれらをオーバーライドするため、重要ではありません。)
    • アフィニティーグループを検査します。Enforcing が有効になっているルールが含まれている必要があります。そうでない場合は、競合は 起こりません
  • 競合の可能性がある場合は、関与する可能性のある仮想マシンのセットを特定します。

    • アフィニティーラベルとグループを検査します。Enforcing オプションを有効なアフィニティーラベル アフィニティーグループ両方のメンバーである仮想マシンの一覧を作成します。
    • この共通項のセット内の各ホストおよび仮想マシンについて、競合が発生する可能性のある条件を分析します。
  • 実際の実行されていない仮想マシンが分析での仮想マシンとマッチするかどうかを判断します。
  • アフィニティーグループとアフィニティーラベルを再構築して、意図しない競合を回避します。
  • さまざまな条件下で、変更によって想定された結果が生成されることを確認します。
  • アフィニティーグループとアフィニティーラベルの重複がある場合は、アフィニティーグループとしてこれらを 1 カ所で簡単に確認することができます。アフィニティーラベルを同等のアフィニティーグループに変換することを検討してください。つまり、ホストのアフィニティールール には、Positive を選択し、Enforcing を有効にします。