vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere のリソース制限機能を鑑賞してみる。

この投稿は、vExperts Advent Calendar 2020 の1日目の投稿です。

adventar.org

はじめに

ESXi には、仮想マシンのリソース制御機能があり、CPU やメモリといったリソースの、優先度や制限を設定することができます。しかしこれまでリソース「制限」については、個人的な感覚としては、あまり使用されることがなかったのではないかと思います。

vSphere 7.0 からの「vSphere with Tanzu」では、ESXi の上で Kubernetes Pod を起動する「vSphere Pod」が利用できるようになりました。vSphere Pod では、コンテナのリソース制限に、従来からの仮想マシンのリソース制御の仕組みを利用できます。

Kubernetes では Pod ごとのリソース制限が重要ということもあり、これまでよりも仮想マシンのリソース制限機能が話題になるかもしれないと思い、今回は、仮想マシンのリソース制限でクリスマスっぽいことをしてみます。

なお、vSphere のリソース管理について詳しく知りたい場合のドキュメントは下記です。

vSphere のリソース管理について

仮想マシンのリソース制限 設定(vSphere Client)

今回は、CPU リソースの制限を設定してみます。まずは vSphere Client を利用します。ラボの都合により、vSphere 7.x ではなく vSphere 6.7 U3 です。それでは、仮想マシン「lab-advent-01」の CPU リソースを制限してみます。

仮想マシン lab-advent-01 は、VMware Photon OS 4.0(Beta)の OVA ファイル「OVA with virtual hardware v13 (UEFI Secure Boot)」をデプロイ、起動したものです。

Downloading Photon OS · vmware/photon Wiki · GitHub

そしてゲスト OS で CPU使用率を 100% にしておきます。

root@lab-advent-01 [ ~ ]# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=d98e681
root@lab-advent-01 [ ~ ]# while :; do true; done

仮想マシンには、デフォルトでは特にリソース制限は設定されていません。

f:id:gowatana:20201130210416p:plain

仮想マシンの右クリック→「設定の変更」→「仮想ハードウェア」→「CPU」→「制限」で、リソース制限が設定できます。

f:id:gowatana:20201130210502p:plain

設定タスクが完了すると、リソース制御はすぐに適用されます。

f:id:gowatana:20201130210739p:plain

仮想マシンのリソース制限(PowerCLI)

リソース制限を、PowerCLI でも設定してみます。今回はせっかくなので、PowerCLI も VMware Photon OS 4.0 で実行します。Photon OS 4.0 の OVA から、もうひとつ仮想マシン(lab-photon-01)をデプロイしてあります。そこで、Docker サービスを起動します。

root@lab-photon-01 [ ~ ]# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=d98e681
root@lab-photon-01 [ ~ ]# systemctl start docker
root@lab-photon-01 [ ~ ]# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
root@lab-photon-01 [ ~ ]# systemctl is-active docker
active
root@lab-photon-01 [ ~ ]# docker -v
Docker version 19.03.10, build 9424aea

PowerCLI コンテナを起動します。

root@lab-photon-01 [ ~ ]# docker run -it --rm vmware/powerclicore
Unable to find image 'vmware/powerclicore:latest' locally
latest: Pulling from vmware/powerclicore
31111373f494: Pull complete
5c9de3a881e6: Pull complete
Digest: sha256:b98f21807df14f454fb12f36a4c5090d42180697a766784ed1255fe99bf06b74
Status: Downloaded newer image for vmware/powerclicore:latest
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/powershell
Type 'help' to get help.

PS /root>

PowerCLI のバージョンは 12.0 です。

PS /root> Get-Module -ListAvailable VMware.PowerCLI | select Version

Version
-------
12.0.0.15947286

vCenter Server に接続しておきます。

PS /root> Connect-VIServer -Force

CPU リソースを制限する仮想マシンです。さきほど vSphere Client から設定した、1400 MHz の CPU リソース制限が確認できます。

PS /root> Get-VM lab-advent-01

Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
lab-advent-01        PoweredOn  1        2.000

PS /root> Get-VM lab-advent-01 | Get-VMResourceConfiguration | select CpuLimitMhz

CpuLimitMhz
-----------
       1400

リソース設定変更は、Set-VMResourceConfiguration です。たとえば「-CpuLimitMhz 1000」のように値を指定します。無制限に戻すには、数字のかわりに $null を指定します。

PS /root> Get-VM lab-advent-01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuLimitMhz 1000

今回はクリスマス風なスクリーン ショットを得るため、下記のようなスクリプトを用意してみました。

vCenter のパフォーマンス チャートの間隔は 20秒ごとなので、20秒単位でリソース制限を設定変更しています。また、私の自宅ラボのマシンに調整してあるので他では結果が異なるかもしれません。

gist.github.com

それでは、スクリプトをダウンロードして・・・

PS /root> curl -OL https://gist.githubusercontent.com/gowatana/ee236bc1fc3fd4561ddc06beb7289d1a/raw/change_vm_cpu_limit.ps1

実行すると・・・

PS /root> ./change_vm_cpu_limit.ps1

リソース制限が作用して、使用率が下がっています。そして制限されたリソース分は、「準備(英語だと Ready)」メトリックとしてあがっています。

f:id:gowatana:20201130223643p:plain

vSphere Pod とリソース制限

ちなみに vSphere 7.0 から登場した vSphere Pod は、実際には仮想マシンです。しかし、仮想マシンでのリソース制御設定はできないようになっています。なお、ここからのスクリーンショットは vSphere 7.0 U1 です。

f:id:gowatana:20201130230605p:plain

そこで、vSphere Pod を起動する「スーパーバイザー名前空間」でリソース制限を設定します。lab-ns-01 という名前空間を作成してあるので、そこで CPU のリソース制限を設定してみると・・・

f:id:gowatana:20201130230835p:plain

vSphere Pod の仮想マシンに作用します。

f:id:gowatana:20201130230914p:plain

以上、仮想マシンのリソース制限についての小ネタでした。

明日の Advent Calendar は、yueisu913 さんです。

vExperts Advent Calendar 2020 - Adventar