この投稿は、vExperts Advent Calendar 2020 の1日目の投稿です。
はじめに
ESXi には、仮想マシンのリソース制御機能があり、CPU やメモリといったリソースの、優先度や制限を設定することができます。しかしこれまでリソース「制限」については、個人的な感覚としては、あまり使用されることがなかったのではないかと思います。
vSphere 7.0 からの「vSphere with Tanzu」では、ESXi の上で Kubernetes Pod を起動する「vSphere Pod」が利用できるようになりました。vSphere Pod では、コンテナのリソース制限に、従来からの仮想マシンのリソース制御の仕組みを利用できます。
Kubernetes では Pod ごとのリソース制限が重要ということもあり、これまでよりも仮想マシンのリソース制限機能が話題になるかもしれないと思い、今回は、仮想マシンのリソース制限でクリスマスっぽいことをしてみます。
なお、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)」をデプロイ、起動したものです。
そしてゲスト 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
仮想マシンには、デフォルトでは特にリソース制限は設定されていません。
仮想マシンの右クリック→「設定の変更」→「仮想ハードウェア」→「CPU」→「制限」で、リソース制限が設定できます。
設定タスクが完了すると、リソース制御はすぐに適用されます。
仮想マシンのリソース制限(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秒単位でリソース制限を設定変更しています。また、私の自宅ラボのマシンに調整してあるので他では結果が異なるかもしれません。
それでは、スクリプトをダウンロードして・・・
PS /root> curl -OL https://gist.githubusercontent.com/gowatana/ee236bc1fc3fd4561ddc06beb7289d1a/raw/change_vm_cpu_limit.ps1
実行すると・・・
PS /root> ./change_vm_cpu_limit.ps1
リソース制限が作用して、使用率が下がっています。そして制限されたリソース分は、「準備(英語だと Ready)」メトリックとしてあがっています。
vSphere Pod とリソース制限
ちなみに vSphere 7.0 から登場した vSphere Pod は、実際には仮想マシンです。しかし、仮想マシンでのリソース制御設定はできないようになっています。なお、ここからのスクリーンショットは vSphere 7.0 U1 です。
そこで、vSphere Pod を起動する「スーパーバイザー名前空間」でリソース制限を設定します。lab-ns-01 という名前空間を作成してあるので、そこで CPU のリソース制限を設定してみると・・・
vSphere Pod の仮想マシンに作用します。
以上、仮想マシンのリソース制限についての小ネタでした。
明日の Advent Calendar は、yueisu913 さんです。