雑木林

頭の中の整理と忘れないための確認メモ

VMWareにおけるアドミッションコントロールに関する覚え書き

VMWare環境でクラスタを構成してお客様に提供する場合、よくこんな質問をいただきます。

  • 利用可能なリソースはどれだけか?
  • 1台障害が発生してもvSphere HAで全仮想マシンは救われるのか?
  • ○○vCPUと××GBのメモリが必要なのだが、収容可能か?

オーバーコミット上等な昨今、正確に答えるのは非常に難しいのですが、 よくあるN+1台構成においてリソースがどのように使われているのか、 色々試してみたので覚え書きです。

2019/10/15 追記
追加検証をしている最中で利用可能なリソースに不明な点が出ています。
別途確認を行いますが、おそらくアドミッションコントロールVM起動、vMotion、リソース予約値変更の際に影響し、物理リソース(CPU、MEM)はすべて利用可能…ということになりそうです。

試験環境

今回は以下の試験環境で動作確認しています(HDDは割愛)。

  • ESXi : ESXi 6.5×2台
    • CPU : 4core/台
    • MEM : 16GB/台
  • vSphere HA
    • 予約済みのフェイルオーバー CPU キャパシティ : 50%
    • 予約済みのフェイルオーバー メモリ キャパシティ : 50%

VMWare環境上で構築した仮想マシンは以下の通りです。

  • vCSA:vCSA6.5(Tiny構成)
    • CPU:2core
    • MEM:10GB(全リソース予約)
  • VM1:CentOS7
    • CPU:1core
    • MEM:4GB(全リソース予約)
  • VM2:CentOS7
    • CPU:1core
    • MEM:4GB(予約なし)
  • VM3:CentOS7
    • CPU:1core
    • MEM:2GB(全リソース予約)
  • VM4:CentOS7
    • CPU:1core
    • MEM:2GB(予約なし)

vCSAのみが起動している初期状態の使用リソースは以下になっています。
メモリのリソースを見ると3GB弱空きがある状態となっていました。 f:id:zokibayashi:20180702232526p:plain

OSの起動可否その1

VM1~VM4のOSが起動できるか確認した結果が以下の表です。
4GBメモリの仮想マシンはリソースが不足して起動できないようです。

項番 起動するVM 結果
(1) VM1 (メモリ4GB予約有) NG
(2) VM2 (メモリ4GB予約無) NG
(3) VM3 (メモリ2GB予約有) OK
(4) VM4 (メモリ2GB予約無) OK

起動に失敗する際には、リソースが不足する旨のエラーが表示されます。 f:id:zokibayashi:20180702233325p:plain

OSの起動可否その2

起動可否その1で起動に成功した状態で、2つ目の仮想マシンを起動します。
2GBの仮想マシンが起動した状態で、追加で2GBの仮想マシンを起動することができました。

(3)VM3(メモリ2GB予約有)が起動した状態で2つ目の仮想マシンを起動

項番 起動するVM 結果
(3-1) VM1 (メモリ4GB予約有) NG
(3-2) VM2 (メモリ4GB予約無) NG
(3-3) VM4 (メモリ2GB予約有) OK

(4)VM4(メモリ2GB予約無)が起動した状態で2つ目の仮想マシンを起動

項番 起動するVM 結果
(4-1) VM1 (メモリ4GB予約有) NG
(4-2) VM2 (メモリ4GB予約無) NG
(4-3) VM3 (メモリ2GB予約無) OK

OSの起動可否その3

VM4のメモリ予約を100%にした状態で再度起動確認を行いました。
100%予約した場合は起動に失敗しました。

(3)VM3(メモリ2GB予約有)が起動した状態で2つ目の仮想マシンを起動

項番 起動するVM 結果
(3-a) VM4 (メモリ2GB予約有) NG

OS起動可否その4

VCSAを除くすべてのVMのメモリ予約を0にした状態で起動確認を行いました。
この状態ではすべてのVMを起動することができました。

項番 起動するVM 結果
(1) VM1 OK
(2) VM1,VM2 OK
(3) VM1,VM2.VM3 OK
(4) VM1,VM2,VM3,VM4 OK

f:id:zokibayashi:20180702234810p:plain

また、このときのリソース状態はこのようになっています。 f:id:zokibayashi:20180702234829p:plain

OS起動可否その5

VCSAを除くすべてのVMに対してメモリ予約が0のまま、容量を8GBにして起動確認を行いました。
この状態でもすべてのVMを起動することができました。

項番 起動するVM 結果
(1) VM1 OK
(2) VM1,VM2 OK
(3) VM1,VM2.VM3 OK
(4) VM1,VM2,VM3,VM4 OK

すべてメモリ予約無し

また、このときのリソース状態はこのようになっています。 f:id:zokibayashi:20180702235827p:plain

OSの起動可否その1~5でわかること

この試験からわかることは以下の通りです。

  • OSの起動に必要なリソースを確保できない場合、起動に失敗する
  • リソースの予約をしていない場合、OSの起動に必要なリソースは割り当てたリソースより小さい
  • VMを多数起動し、オーバーコミット状態であってもフェールオーバー用のリソースは使用しない
  • メモリ予約をしていない場合、オーバーコミットにより多くのVMが起動可能

最初の問いへの答え

  • 利用可能なリソースはどれだけか?
    ⇒アドミッションポリシーで予約されたリソースを除いたクラスタリソースが利用可能(確認中)

  • 1台障害が発生してもvSphere HAで全仮想マシンは救われるのか?
    ⇒N+1のアドミッションポリシーの環境下で起動している仮想マシンは、基本的に救われる

  • ○○vCPUと××GBのメモリが必要なのだが、動作するのか?
    ⇒リソースの予約をしていない環境では、実使用量がリソース量を大幅に超えない限りは利用可能。
     リソースの予約をしている環境では予約リソース量によってオーバーコミットできずに起動できないことがある

今回は負荷が乗らない仮想マシンで試験を行いましたが、実際は負荷によってメモリ消費量が増加することで、 メモリのバルーニング等が発生して仮想マシンの動作に大きく影響してしまいます。 このため、システムのリソース消費量に基づいて適切なサイジングを行い、 リソースの予約や起動優先度等を設定することで仮想マシンを保護してやることが必要です。

とはいってもリソースモニタリングとキャパシティプランニングは非常に面倒なので、 ある程度の指標(CPUは300%までオーバーコミットOKとするが、メモリはオーバーコミット不可など)で 運用を開始して、状態を見ながら閾値を変更していくことが現実的かと思います。