個人的な 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 の「サマリ」画面を確認すると、変更前後のポリシーが両方表示されています。
VM の「仮想マシン ポリシー」→「仮想マシン ストレージ ポリシーの編集」では、「仮想マシン ホーム」と「Hard disk 1」に、それぞれ別のポリシーが割り当てられていることがわかります。
そこで、下記のように仮想ディスクのポリシーも変更します。
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 全体(仮想ディスクと、仮想マシン ホーム)のポリシーが揃いました。
ちなみに 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 で仮想マシン ストレージ ポリシーを変更してみる話でした。