VMware Cloud on AWS でアフィニティポリシーを設定してみた

# 1. はじめに

VMware仮想環境おける仮想マシンの配置ルール(`アフィニティルール`)、結構便利なので要件によってはわりとよく利用されているのではないでしょうか。

App VMとDB VMを同じESXiで稼働させたいという要件や、逆にApp VM#1とApp VM#2を別のESXiホストで稼働させたいなどがよくある要件として想定されます。

> アフィニティ (Affinity) は「類似性」「親近感」という意味で、特定の仮想マシン同士をくっつけたり離したりする設定、と認識すればイメージしやすいかと思います。

若干挙動は異なるのですが、VMware Cloud on AWSでも同様のアフィニティ設定ができるので設定方法を備忘録として残しておきます。

::: note
オンプレミスVMware仮想環境などにおける一般的なアフィニティルールについては次のVMware公式ガイドをご参照ください。

[(VMware Docs) 仮想マシン間のアフィニティ ルール](https://docs.vmware.com/jp/VMware-vSphere/8.0/vsphere-resource-management/GUID-94FCC204-115A-4918-9533-BFC588338ECB.html)
:::

# 2. VMware Cloud on AWS でアフィニティポリシーを設定してみる

今回はいくつかあるアフィニティの選択肢のうち、`仮想マシン間のアフィニティ`と`仮想マシン間の非アフィニティ`について設定方法を確認してみます。

VMware Cloud on AWSでは、対象仮想マシン(グループ)をタグで指定して、タグに対してポリシーを適用するのが特徴となります。
また前提として、`ユーザーが手動で設定することになるアフィニティポリシー`よりも`デフォルトで有効となっているHAおよびDRSの構成`が優先されるため、ホスト台数やリソース状況によっては、必ずしもアフィニティポリシーどおりの挙動とならない点はご留意ください。

::: note
VMware Cloud on AWS におけるアフィニティ設定およびその詳細については、次のVMware公式ガイドを参照します。

[(VMware Docs) ポリシーおよびプロファイルの使用](https://docs.vmware.com/jp/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-9C4E90A8-5DB9-43BB-8A9A-92D55121C414.html)
:::

![スクリーンショット 2024-02-25 16.04.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/389831f8-96d3-d99a-3141-80209ffb79c4.png)

## 事前準備

### 前提となるVMware Cloud on AWS 環境の確認: 初期2ホスト構成

i3.metal x2ホスト構成で構成しており、ネットワークセグメントもデフォルトのカスタマーセグメント以外は存在していません。

vCenterやNSXなど管理系仮想マシン以外には、`AWS Backup Gateway`、`Cent OS`、`Windows Server`、`TinyCore Linux`をそれぞれ複数台稼働させています。特にOS間、アプリケーション間の連携はしておらず、ほぼOS初期インストール状態となっています。

![スクリーンショット 2024-02-25 15.54.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/7a40afec-dd3e-6e12-ba59-b28746c6ee48.png)

アフィニティ設定もしていないので、それぞれの仮想マシンはまばらな状態で配置されています。
下図はデプロイ完了後から数時間が経過しているので、ホスト毎の消費コンピュートリソース偏りもなく、かなり安定している状態です。
![スクリーンショット 2024-02-25 15.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/db46e5b6-f306-a414-c95c-79886da2b370.png)

![スクリーンショット 2024-02-25 15.55.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/1e5fbaef-fe56-aecc-61f9-dd5efc4a38e2.png)

### タグの作成

vSphere Clientのメニューから`タグとカスタム属性`を選択し、仮想マシンに付与するタグおよび`タグ`が属する`カテゴリー`を作成します。
厳密な条件はなく識別さえできれば良いので、自由に命名します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/c0e8387a-4597-c47e-b58c-0a1c5a1f402a.png)

### 仮想マシンへのタグの付与

作成したタグを、対象仮想マシンの`タグ`から割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/6f77167b-338d-bca8-adb3-0ccec440dc22.png)

今回の環境において、私は次のようにカテゴリー名とタグを命名し、対象の仮想マシンに割り当てました。
下記以外の仮想マシンについては特にタグなどは付与していません。

|カテゴリー名|タグ|対象仮想マシン|
|:-:|:-:|:-:|
| Affinity  | Linux - CentOS|CentOS_01, 02, 03, 04, 05, 06|
| Affinity  | Linux - TinyCoreLinux|TinyCoreLinux_01, 02, 03|
| Anti-Affinity  | AWSBackupGW-VMs|awsbackup-gateway-01, 02, 03|

`タグとカスタム属性`から遷移すると、該当のタグを割り当てた仮想マシンは次のように確認できます。

![スクリーンショット 2024-02-25 16.01.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/e5985dfd-d798-0a92-9bf8-c79e272710c6.png)

## アフィニティに関するポリシー設定

それではこれからアフィニティに関する`ポリシー`を作成し、挙動を確認します。

vSphere Clientのメニューから`ポリシーおよびプロファイル`を選択し、`コンピューティングポリシー`に遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/0afae4e3-8919-66c8-939a-9fcd5a875ae0.png)

`追加`を選択し、新しい`コンピューティングポリシー`を作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/604949f5-8128-6b7f-5bb8-a47871cb4660.png)


## 仮想マシン間のアフィニティ

`仮想マシン間のアフィニティ`を設定し、`特定のタグを付与された複数の仮想マシンを同じESXiホストで稼働`させてみます。

::: note
VMware公式ガイドの次の章を参照します。

[(VMware Docs) 仮想マシン間のアフィニティ ポリシーの作成または削除](https://docs.vmware.com/jp/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-DAEBADD6-4B4B-47A5-AA0E-01423650F03D.html)
:::

新しい`コンピューティングポリシー`の作成から、ポリシータイプ`仮想マシン間のアフィニティ`を選択します。
適当なポリシー名を設定し、対象の`仮想マシンタグ`を選択します。

まずは`Linux - TinyCoreLinux`のタグを選択しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/6d55f22e-504d-176d-57e8-4655ee3fac53.png)

ポリシーの作成当初は、ステータスは更新中と表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/c646c972-574d-7880-1052-fe5a39516f91.png)

その際に仮想マシンの状況を確認してみると、仮想マシンの移行(vMotion)が実行され、`TinyCoreLinux`の仮想マシン3台が同じESXiホストに集まりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/613af913-c8dc-e37b-1c1a-8015f44e9b21.png)

この時点で再度コンピューティングポリシーをの状況を確認すると、`正常(準拠)`マークが表示されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/50750b19-b5bd-50a3-330e-82d3b402f3da.png)

### 別の仮想マシングループに対してポリシー追加

追加で、`Linux - CentOS`に対しても同じように仮想マシン間のアフィニティ`を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/7b5db3f6-4219-1bb0-a053-6a4e1fb9267c.png)

6台の仮想マシンが対象となるので一時的に`非準拠`のステータスとなりましたが、並行して仮想マシンの移行(vMotion)も行われています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/7ab9663e-e6f8-babf-1b3a-69b01cbb9f85.png)

しばらく経つと`準拠(正常)`のステータスとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/eb349a07-1410-2a3a-b0ca-07fa555f64c2.png)

`CentOS`の仮想マシン6台が同じESXiホストに集まりまっているのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/b4061484-6011-7ba4-3894-07000121000c.png)

## 仮想マシン間の非アフィニティ

`仮想マシン間の非アフィニティ`を設定し、`特定のタグを付与された複数の仮想マシンを異なるESXiホストで稼働`させてみます。

::: note
VMware公式ガイドの次の章を参照します。

[(VMware Docs) 仮想マシン間の非アフィニティ ポリシーの作成または削除](https://docs.vmware.com/jp/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-D9C32E7A-595E-4961-9522-43C618945804.html)
:::

新しい`コンピューティングポリシー`の作成から、ポリシータイプ`仮想マシン間の非アフィニティ`を選択します。
適当なポリシー名を設定し、対象の`仮想マシンタグ`を選択します。

今回は`AWSBackupGW-VMs`のタグを選択しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/a4c7ac8c-11e8-9ca5-adef-8bf5c175b4d3.png)

### 初期状態: VMware Cloud on AWS x2ホスト構成

対象の仮想マシンは3台あるのに対して、ESXiは2ホストしか存在していません。

当然ながらこの状態では各対象マシンをそれぞれ別々のESXiホストで稼働させることは不可能なので、いつまで経っても`非準拠`のステータスから更新されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/b1d2ed29-ec7e-1fd5-773a-8a3a5b6397ca.png)

### ホスト追加: VMware Cloud on AWS x3ホスト構成

ホスト1台追加し、ESXiが3台となるよう構成にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/1bc492ad-e939-fe65-651a-33cd859ad297.png)

メンテナンスモード、vSAN再構成が実行されます。
![スクリーンショット 2024-02-25 22.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/9faf8d20-0829-bc03-71ca-40429e76966a.png)

ほどなくして3台目のESXiホストが利用可能になります。
![スクリーンショット 2024-02-25 22.55.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/6c1283b5-3add-2b18-f01a-7fd2a4fca951.png)

しばらく待つと`準拠(正常)`のステータスとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/2e3c4969-1bf6-eb05-a79e-364194ad7c31.png)

念のため各ESXiホストの状況を確認しても、それぞれ対象の仮想マシンは別々のESXiホストに稼働していると確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/dc04253b-1613-a954-83f5-946629383972.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/c444b9a7-2d1a-c242-e41e-b97634872fbe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/f14553a7-a387-ca37-8b35-b4797c8799e9.png)

## おまけ: 仮想マシン間のアフィニティポリシーの削除

作成した`仮想マシン間のアフィニティ`ポリシーを削除してみました。

![スクリーンショット 2024-02-26 0.50.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/d4b94995-91e3-706f-f1f2-41a3309a9112.png)

`仮想マシン間の非アフィニティ`のポリシーだけは残しています。
![スクリーンショット 2024-02-26 20.38.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/36a7b5e6-a4b8-5dd1-1ef0-63306a336b99.png)

この状態でしばらく放置したあと各ESXiホストの状況をみてみると、今まで同じESXiホストでまとまっていた仮想マシンもそれぞれDRSでリソース状況に応じて分散配置されているのが確認できました。

![スクリーンショット 2024-02-26 20.37.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/ee40fda8-dbe7-02e6-aee4-d8683dee8311.png)


![スクリーンショット 2024-02-26 20.37.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/060b1380-13ff-349d-885c-b8caea4c29ae.png)

![スクリーンショット 2024-02-26 20.37.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/3116e3e6-e7ac-abb3-e4f9-84ac6cb671e7.png)

# 3. さいごに

今回はVMware Cloud on AWS環境におけるアフィニティ設定時の挙動を確認してみました。比較的シンプルでゆるめのアフィニティ設定だったので、想定通りの挙動でした。

VMware Cloud on AWS環境に限らず、一般的なVMware仮想環境においても複雑で厳格なアフィニティ設定にするとリソースのバランシングが最適化されない可能性もあるので、もしも利用される際にはやはりできる限りリラックスさせた運用とした方が良いかと思われます。

# 4. 参考資料

[(VMware Docs) ポリシーおよびプロファイルの使用](https://docs.vmware.com/jp/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-9C4E90A8-5DB9-43BB-8A9A-92D55121C414.html)

https://qiita.com/sanjushi003/items/03c3f634931fb8e0fbc7