アフィニティルール【affinity rule】
概要
このルールは仮想化基盤において、複数の物理サーバ上に配置されるワークロードの配置方針を定義するために用いられる。特定のワークロード同士を同一ホスト上で実行するよう指定する「アフィニティ」は通信頻度の高いワークロード同士の遅延を抑える目的で設定される。逆に、同一ホストに配置しないよう制限する「アンチアフィニティ」は、障害発生時の影響範囲を分散させるために用いられる。
アフィニティルールはワークロードの自動配置やライブマイグレーションの動作にも影響を与える。リソースの使用状況や負荷分散の観点からワークロードの移動が行われる際にも、設定されたルールが優先されるため、配置の自由度は制約される。設定内容によっては特定のホストに負荷が集中する場合や、移動可能な範囲が限定される場合があるため、性能要件や可用性要件を踏まえて調整が行われる。
vSphereのアフィニティルール
VMware vSphereでは、仮想マシンのアフィニティルールをvCenter Serverで設定できる。「VM-VMアフィニティルール」は複数の仮想マシンを常に同一ホスト上で動作させる設定で、仮想マシン間の通信遅延を最小化したい場合などに使われる。「VM-VMアンチアフィニティルール」は特定の仮想マシン同士を異なるホストに配置する設定で、冗長構成のサーバーを物理的に分離して単一障害点を避ける目的で使われる。
Kubernetesのアフィニティルール
Kubernetesでは、PodのアフィニティルールをPod specのaffinityフィールドで定義する。「podAffinity」は特定のラベルを持つPodと同じノードまたはゾーンに配置する設定で、頻繁に通信するマイクロサービス同士を近くに置く用途に使われる。「podAntiAffinity」はその逆で、同じDeploymentのPodを複数のノードに分散させて可用性を高める構成に使われる。ノード自体の属性(ラベル)を条件にする「nodeAffinity」も用意されており、特定のGPU搭載ノードや特定リージョンのノードにのみPodを配置するといった制御が可能だ。これらのルールは必須条件(required)と優先条件(preferred)の2段階で設定できる。
