vm.gowatana.jp

NEOにほんごVMware(仮)

vSAN に配置されている VM の仮想マシン ストレージ ポリシー を PowerCLI で変更してみる。

個人的な vSAN Advent Calendar 18日目です。

自宅ラボの vSAN 7.0 U 1 Advent Calendar 2020 - Adventar

PowerCLI で、仮想マシン ストレージ ポリシーの割り当てを変更してみます。

はじめに

vSAN では、VM の容量確保や冗長性の設定のために、仮想マシン ストレージ ポリシーを利用します。たとえば仮想マシン ストレージ ポリシーを 仮想ディスク(VMDK)に適用するだけで、シン / シック プロビジョニングの変更や、RAID レベルの変更(RAID1 から RAID5)を適用できます。

しかし、対象 VM が多いと GUI である vSphere Client で適用するのが大変なことがあるので、PowerCLI で仮想マシン ストレージ ポリシー を変更してみました。

PowerCLI と仮想マシン ストレージ ポリシー

PowerCLI のバージョンは 12.1 を使用しています。

vCenter には、Connect-VIServer で接続ずみです。今回の vCenter のバージョンです。

PS C:\> $global:DefaultVIServer | select Version,Build

Version Build
------- -----
7.0.1   17005016

仮想マシン ストレージ ポリシーに関連するコマンドレットには、SPBM(Storage Policy Based Management)を含む名前がついています。

PS C:\> Get-Command -Name *Spbm*  -Module VMware.VimAutomation.Storage | group Noun | select Name,{$_.Group.Verb} | Sort-Object Name

Name                           $_.Group.Verb
----                           -------------
SpbmCapability                 Get
SpbmCompatibleStorage          Get
SpbmEntityConfiguration        {Get, Set}
SpbmFaultDomain                Get
SpbmPointInTimeReplica         Get
SpbmReplicationFailover        Start
SpbmReplicationGroup           {Get, Sync}
SpbmReplicationPair            Get
SpbmReplicationPrepareFailover Start
SpbmReplicationPromote         Start
SpbmReplicationReverse         Start
SpbmReplicationTestFailover    {Start, Stop}
SpbmRule                       New
SpbmRuleSet                    New
SpbmStoragePolicy              {Export, Get, Import, New...}
SpbmView                       Get


PS C:\> Get-Command -Name *Spbm* -Module VMware.VimAutomation.Storage | sort Noun,Verb | select Name

Name
----
Get-SpbmCapability
Get-SpbmCompatibleStorage
Get-SpbmEntityConfiguration
Set-SpbmEntityConfiguration
Get-SpbmFaultDomain
Get-SpbmPointInTimeReplica
Start-SpbmReplicationFailover
Get-SpbmReplicationGroup
Sync-SpbmReplicationGroup
Get-SpbmReplicationPair
Start-SpbmReplicationPrepareFailover
Start-SpbmReplicationPromote
Start-SpbmReplicationReverse
Start-SpbmReplicationTestFailover
Stop-SpbmReplicationTestFailover
New-SpbmRule
New-SpbmRuleSet
Export-SpbmStoragePolicy
Get-SpbmStoragePolicy
Import-SpbmStoragePolicy
New-SpbmStoragePolicy
Remove-SpbmStoragePolicy
Set-SpbmStoragePolicy
Get-SpbmView

作成されている仮想マシン ストレージ ポリシーの一覧です。

PS C:\> Get-SpbmStoragePolicy | select Name,Description | Sort-Object Name

Name                                    Description
----                                    -----------
Host-local PMem Default Storage Policy  Storage policy used as default for Host-local PMem datastores
Management Storage policy - Encryption  Management Storage policy used for encrypting VM
Management Storage Policy - Large       Management Storage policy used for VMC large cluster
Management Storage Policy - Regular     Management Storage policy used for VMC regular cluster
Management Storage Policy - Single Node Management Storage policy used for VMC single node cluster
Management Storage Policy - Stretched   Management Storage policy used for VMC stretched cluster
Management Storage policy - Thin        Management Storage policy used for VMC regular cluster which requires THIN provisioning
VM Encryption Policy                    Sample storage policy for VMware's VM and virtual disk encryption
vSAN Default Storage Policy             Storage policy used as default for vSAN datastores
vSAN-RAID5-Policy
vSAN-RAID6-Policy
VVol No Requirements Policy             Allow the datastore to determine the best placement strategy for storage objects

この vCenter での、仮想マシン ストレージ ポリシーの利用状況です。この時点において VM では「vSAN Default Storage Policy」だけが割り当てられています。

PS C:\> Get-SpbmStoragePolicy | select Name,@{N="VMs";E={($_|Get-VM).Count}} | where {$_.VMs -gt 0}

Name                        VMs
----                        ---
vSAN Default Storage Policy   9

vSAN Default Storage Policy というポリシーは、下記のようなルールが設定されています。このポリシーはデフォルトで作成されるものですが、設定変更も可能なので一応確認しておきます。

PS C:\> Get-SpbmStoragePolicy -Name "vSAN Default Storage Policy" | select -ExpandProperty AnyOfRuleSets | select -ExpandProperty AllOfRules | select Capability,Value

Capability                                             Value
----------                                             -----
VSAN.hostFailuresToTolerate                                1
VSAN.replicaPreference      RAID-1 (Mirroring) - Performance
VSAN.checksumDisabled                                  False
VSAN.stripeWidth                                           1
VSAN.forceProvisioning                                 False
VSAN.iopsLimit                                             0
VSAN.cacheReservation                                      0
VSAN.proportionalCapacity                                  0

vSAN-RAID5-Policy ポリシーは、RAID5 になるように下記のようなルールで作成してあります。

PS C:\> Get-SpbmStoragePolicy -Name "vSAN-RAID5-Policy" | select -ExpandProperty AnyOfRuleSets | select -ExpandProperty AllOfRules | select Capability,Value

Capability                                                 Value
----------                                                 -----
VSAN.hostFailuresToTolerate                                    1
VSAN.replicaPreference      RAID-5/6 (Erasure Coding) - Capacity
VSAN.checksumDisabled                                      False
VSAN.stripeWidth                                               1
VSAN.forceProvisioning                                     False
VSAN.iopsLimit                                                 0
VSAN.cacheReservation                                          0
VSAN.proportionalCapacity                                      0

今回は、まだ vSAN Default Storage Policy ポリシーが適用されている VM に、vSAN-RAID5-Policy というポリシーを適用します。vSAN Default Storage Policy を利用している VM は、下記のように確認できます。

PS C:\> (Get-SpbmStoragePolicy -Name "vSAN Default Storage Policy" | Get-VM).Count
9
PS C:\> Get-SpbmStoragePolicy "vSAN Default Storage Policy" | Get-VM | select Name | Sort-Object Name

Name
----
photon-ova
vCLS (11)
vCLS (12)
vCLS (13)
vm01
vm02
vm03
vm04
vm05

PowerCLI での仮想マシン ストレージ ポリシーの変更

それでは、vm01 という VM のポリシーを vSAN-RAID5-Policy に変更してみます。

PS C:\> Get-VM -Name "vm01" | Set-SpbmEntityConfiguration -StoragePolicy "vSAN-RAID5-Policy"

Entity                         Storage Policy                 Status          Time Of Check
------                         --------------                 ------          -------------
vm01                           vSAN-RAID5-Policy

上記のコマンドでは、「仮想マシン ホーム」のポリシーだけが変更されます。

vSphere Client で対象 VM の「仮想マシン ストレージ ポリシーの編集」から VM の「サマリ」画面を確認すると、変更前後のポリシーが両方表示されています。

f:id:gowatana:20201219143443p:plain

VM の「仮想マシン ポリシー」→「仮想マシン ストレージ ポリシーの編集」では、「仮想マシン ホーム」と「Hard disk 1」に、それぞれ別のポリシーが割り当てられていることがわかります。

f:id:gowatana:20201219143603p:plain

そこで、下記のように仮想ディスクのポリシーも変更します。

PS C:\> Get-VM -Name "vm01" | Get-HardDisk | Set-SpbmEntityConfiguration -StoragePolicy "vSAN-RAID5-Policy"

Entity                         Storage Policy                 Status          Time Of Check
------                         --------------                 ------          -------------
Hard disk 1                    vSAN-RAID5-Policy

Get-SpbmEntityConfiguration で、仮想ディスクごとのポリシーも変更されたことが確認できます。

PS C:\> Get-VM -Name "vm01" | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

Entity      Storage Policy    Status Time Of Check
------      --------------    ------ -------------
Hard disk 1 vSAN-RAID5-Policy

これで、VM 全体(仮想ディスクと、仮想マシン ホーム)のポリシーが揃いました。

f:id:gowatana:20201219144011p:plain

ちなみに vSAN に配置されている VM であれば、Get-VsanObject でもオブジェクトごとのポリシーを確認できます。

PS C:\> Get-VsanObject -VM (Get-VM -Name "vm01") | select VM,Type,StoragePolicy,ComplianceStatus

VM          Type StoragePolicy     ComplianceStatus
--          ---- -------------     ----------------
vm01       VDisk vSAN-RAID5-Policy compliant
vm01 VmNamespace vSAN-RAID5-Policy compliant

 

PowerCLI で設定変更できるようにしておくと、多数の VM でポリシーを変更する際に、時間をずらして実行したい場合などにも活用できそうかなと思います。

以上、PowerCLI で仮想マシン ストレージ ポリシーを変更してみる話でした。