【Tips】共有ストレージなし&VCSA デプロイ済みのクラスタで EVC を有効にする【自宅ラボ用】

Share on:

Table of contents

背景

仮想マシンとしてデプロイされた vCenter Server が存在するクラスタ上で EVC を有効にする場合、KB2147821 のように EVC がそれぞれ無効/有効な2つのクラスタを用意し、そのクラスタ間で vCenter Server 仮想マシンをインベントリ上で再登録する必要があります。

vCenter Server 6.5 および 6.7 で vCenter Server 自身の仮想マシンが実行されるクラスタの EVC を有効にする方法 (2147821)

先日、Intel NUC 10 1台で構成していた自宅ラボに Intel NUC 11 の ESXi 7.0 を追加したため EVC を有効にしようとしたのですが、共有ストレージを用意していなかったためホスト間でのインベントリの再登録が行えませんでした。

概要

遊びで使っている自宅ラボでの EVC の有効化のためだけに共有ストレージを追加するのも面倒でしたので、以下のような少々トリッキーな手段で EVC を有効にしてみました。

  1. vCenter Server 仮想マシンを停止&スナップショットを作成
  2. ハードウェアバージョン14以降へのアップグレード
  3. 仮想マシンに Per-VM EVC のパラメータを追加
  4. vCenter Server 仮想マシンをパワーオンしてクラスタの EVC を有効化
  5. 1.のスナップショットにリストアして再度クラスタの EVC を有効化

vCenter Server 仮想マシンが存在するクラスタ上で EVC を有効にする場合、vCenter Server 仮想マシン自身の CPU 互換性が問題になります。

一度クラスタで EVC を構成してしまえば vCenter Server が停止していてもホストの EVC モードは維持されるので、手作業で vCenter Server 仮想マシンの CPUID をマスクした後、クラスタの EVC を構成し、作業前のスナップショットにリストアすることで vCenter Server 仮想マシンをクラスタの EVC モードで起動させます。

なお、製品ドキュメントやナレッジベースでサポート対象として記載されているような手順ではないので本番環境での利用は推奨しません。一般には本番環境で vMotion を利用するなら共有ストレージもあると思いますので、正規の KB2147821 の手順で実施することを強く推奨しますし、その方が楽です。

1. vCenter Server 仮想マシンを停止&スナップショットを作成

まず、vCenter Server 仮想マシンをシャットダウンして Host Client から仮想マシンのスナップショットを作成します。

2. ハードウェアバージョン14以降へのアップグレード

Host Client から vCenter Server 仮想マシンを Per-VM EVC が使えるハードウェアバージョン 14 以降にアップグレードしておきます。

なお、vCenter Server Appliance の場合は KB1010675 にハードウェアバージョンのアップグレードがサポートされないことが明記されています。

When upgrading virtual hardware, consider these points:

  • Modification of the virtual hardware version on the vCenter Server Appliance is not supported. Likewise you should not manually install any additional version of VMware Tools inside the guest OS of the vCenter Server Appliance.

3. 仮想マシンに Per-VM EVC のパラメータを追加

vCenter Server 仮想マシンの CPUID をマスクするため、vmx ファイルを編集して Per-VM EVC 周りの構成パラメータを追記します。

ちゃんと調べてはいないのですが、Intel NUC 10 (Comet Lake 世代) や 11 (Tiger Lake 世代) だと一部の CPU 機能のサポートに互換性が無いようで Broadwell 以降の EVC モードが有効に出来なかったため、Haswell の EVC モードに設定しました1

適当な仮想マシンで Haswell の EVC モードを有効にしたところ、以下の構成パラメータが増えていたのでこれらを追記しました。クラスタの EVC だと vSphere Client 上で EVC 設定の [CPU 機能セット] の項目から確認できる値ですが、もしかしたら環境などによって変わるかも知れません。

 1featMask.vm.cpuid.ABM = "Val:1"
 2featMask.vm.cpuid.AES = "Val:1"
 3featMask.vm.cpuid.AVX = "Val:1"
 4featMask.vm.cpuid.AVX2 = "Val:1"
 5featMask.vm.cpuid.BMI1 = "Val:1"
 6featMask.vm.cpuid.BMI2 = "Val:1"
 7featMask.vm.cpuid.CMPXCHG16B = "Val:1"
 8featMask.vm.cpuid.DS = "Val:1"
 9featMask.vm.cpuid.ENFSTRG = "Val:1"
10featMask.vm.cpuid.F16C = "Val:1"
11featMask.vm.cpuid.FAMILY = "Val:6"
12featMask.vm.cpuid.FCMD = "Val:1"
13featMask.vm.cpuid.FMA = "Val:1"
14featMask.vm.cpuid.FP_SEGMENT_ZERO = "Val:1"
15featMask.vm.cpuid.FSGSBASE = "Val:1"
16featMask.vm.cpuid.IBPB = "Val:1"
17featMask.vm.cpuid.IBRS = "Val:1"
18featMask.vm.cpuid.INVPCID = "Val:1"
19featMask.vm.cpuid.Intel = "Val:1"
20featMask.vm.cpuid.LAHF64 = "Val:1"
21featMask.vm.cpuid.LM = "Val:1"
22featMask.vm.cpuid.MDCLEAR = "Val:1"
23featMask.vm.cpuid.MODEL = "Val:0x3f"
24featMask.vm.cpuid.MOVBE = "Val:1"
25featMask.vm.cpuid.MWAIT = "Val:1"
26featMask.vm.cpuid.NUMLEVELS = "Val:0xd"
27featMask.vm.cpuid.NUM_EXT_LEVELS = "Val:0x80000008"
28featMask.vm.cpuid.NX = "Val:1"
29featMask.vm.cpuid.PCID = "Val:1"
30featMask.vm.cpuid.PCLMULQDQ = "Val:1"
31featMask.vm.cpuid.PDPE1GB = "Val:1"
32featMask.vm.cpuid.POPCNT = "Val:1"
33featMask.vm.cpuid.RDRAND = "Val:1"
34featMask.vm.cpuid.RDTSCP = "Val:1"
35featMask.vm.cpuid.SMEP = "Val:1"
36featMask.vm.cpuid.SS = "Val:1"
37featMask.vm.cpuid.SSBD = "Val:1"
38featMask.vm.cpuid.SSE3 = "Val:1"
39featMask.vm.cpuid.SSE41 = "Val:1"
40featMask.vm.cpuid.SSE42 = "Val:1"
41featMask.vm.cpuid.SSSE3 = "Val:1"
42featMask.vm.cpuid.STEPPING = "Val:0"
43featMask.vm.cpuid.STIBP = "Val:1"
44featMask.vm.cpuid.VMX = "Val:1"
45featMask.vm.cpuid.XCR0_MASTER_SSE = "Val:1"
46featMask.vm.cpuid.XCR0_MASTER_YMM_H = "Val:1"
47featMask.vm.cpuid.XSAVE = "Val:1"
48featMask.vm.cpuid.XSAVEOPT = "Val:1"
49featMask.vm.hv.capable = "Val:1"
50featMask.vm.misc.cpuidFaulting = "Val:1"
51featMask.vm.vt.realmode = "Val:1"
52featureCompat.vm.completeMasks = "TRUE"

なお、一応、公式ブログの記事KB67666 で featMask.vm.cpuid.* の構成パラメータについて触れられています。

ただ「上述の Per-VM EVC で追加された構成パラメータ一式を手動で追記する」操作は KB 等で指示がある手順ではないので、恐らくサポートはされないと思われます。もし本番環境で Per-VM EVC を使用するなら正規の手順を踏むべきです。

4. vCenter Server 仮想マシンをパワーオンしてクラスタの EVC を有効化

Per-VM EVC の構成パラメータの追記後、vCenter Server 仮想マシンを起動します。vmx ファイルを直接編集しているので、念のため vmx ファイルを reload してから起動しておきます。

1# vim-cmd vmsvc/getallvms | grep <vm name>
2# vim-cmd vmsvc/reload <vmid>
3# vim-cmd vmsvc/power.on <vmid>

vCenter Server が起動したら、クラスタで EVC を有効にします。

5. 1.のスナップショットにリストアして再度クラスタの EVC を有効化

作業前にパワーオフ状態で作成したスナップショットに vCenter Server 仮想マシンをリストアしてパワーオンします。リストアにより3.のマスクの設定は消えていますが、KB2147821 と同様に、設定済みのホストの EVC モードに基づいて vCenter Server 仮想マシンが起動してきます。

vCenter Server が起動したら、クラスタの設定上では EVC が無効に戻っているので再度 EVC を有効にします。

一通り正常稼働を確認したらスナップショットはもう不要になったので削除しておきます。

おわりに

今回は自宅ラボ向けに共有ストレージのない環境で vCenter Server 仮想マシンが実行されるクラスタの EVC を有効にしてみました。本番環境ではまず使えない(使いたくない)手順ですが、自宅ラボなど壊れても問題ない環境で場当たり的な対応で EVC を使いたい場合は有効かもしれません。

なお繰り返しになりますが、一般に本番環境で vMotion を利用するなら共有ストレージもあると思いますので、本番環境で vCenter Server 仮想マシンが実行されるクラスタの EVC を有効にする場合は正規の KB2147821 の手順で実施しましょう。

vCenter Server 6.5 および 6.7 で vCenter Server 自身の仮想マシンが実行されるクラスタの EVC を有効にする方法 (2147821)

補足: CPU ID マスクの設定

CPU ID マスク周りの操作を調べていて気づいたのですが、vSphere 6.7 以前だと以下のドキュメントにあるように仮想マシンの設定から CPU ID マスクの手動設定が出来たのですが、vSphere 7.0 だと UI 上から設定項目がなくなっているようでした。

CPU 識別マスク設定の変更

推測ですが、そもそもサポートや KB の指示なしで使う設定ではないので、使うユーザーがあまりに少なかったとか Per-VM EVC で事足りるとかそういった理由で UI から消えたのかもしれません。


  1. 海外のvExpertの方の記事だと Sandy Bridge 相当にカスタマイズした EVC モードを自作されているようでした。 ↩︎