個人的な vSAN Advent Calendar 5日目です。
自宅ラボの vSAN 7.0 U 1 Advent Calendar 2020 - Adventar
PowerCLI での、vSAN の情報取得の様子を紹介します。
PowerCLI の実行環境について
今回は Photon OS(Linux)上の Docker コンテナとして PowerCLI を実行します。これは数日前の投稿(下記)で紹介した環境と同様です。
vSphere のリソース制限機能を鑑賞してみる。 - vm.gowatana.jp
今回も Photon OS 4.0 です。
root@lab-photon-01 [ ~ ]# cat /etc/photon-release VMware Photon OS 4.0 PHOTON_BUILD_NUMBER=d98e681
Docker サービスは起動してあります。
root@lab-photon-01 [ ~ ]# systemctl is-active docker active
PowerCLI コンテナ(vmware/powerclicore)を起動します。
root@lab-photon-01 [ ~ ]# docker run -it --rm vmware/powerclicore PowerShell 7.0.0 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help. PS /root>
警告メッセージ抑止のため、VMware's Customer Experience Improvement Program(CEIP)の設定をしておきます。
PS /root> Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP:$false -Confirm:$false

vCenter Server に接続しておきます。SSL/TLS 証明書エラー回避のため「-Force」をつけています。
PS /root> Connect-VIServer -Server lab-vc-01.go-lab.jp -User administrator@vsphere.local -Password VMware1! -Force Name Port User ---- ---- ---- lab-vc-01.go-lab.jp 443 VSPHERE.LOCAL\Administrator PS /root>
PowerCLI のモジュールについて
今回も、PowerCLI 12.0 を利用しています。
PS /root> Get-Module -Name VMware.PowerCLI -ListAvailable | select Version Version ------- 12.0.0.15947286 PS /root> Get-PowerCLIVersion PowerCLI Version ---------------- VMware PowerCLI 12.0.0 build 15947286 --------------- Component Versions --------------- VMware Common PowerCLI Component 12.0 build 15939652 VMware Cis Core PowerCLI Component PowerCLI Component 12.0 build 15939657 VMware VimAutomation VICore Commands PowerCLI Component PowerCLI Component 12.0 build 15939655
vSAN に関連するコマンドは、おもに VMware.VimAutomation.Storage モジュールにあります。どのようなコマンドがあるか雰囲気を見ておきます。
PS /root> Get-Command -Module VMware.VimAutomation.Storage -CommandType Cmdlet | Group-Object Noun | select name,{$_.Group.Verb} | Sort-Object Name
Name $_.Group.Verb
---- -------------
EntityDefaultKeyProvider {Add, Remove}
KeyManagementServer {Add, Get, Remove, Set}
KeyProvider {Get, Set}
KmipClientCertificate {Get, New}
NfsUser {Get, New, Remove, Set}
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
VAIOFilter {Get, New, Remove, Set}
VasaProvider {Get, New, Remove}
VasaStorageArray Get
VDisk {Copy, Get, Move, New…}
VsanClusterConfiguration {Get, Set}
VsanClusterDiskUpdate Start
VsanClusterHealth Test
VsanClusterRebalance {Start, Stop}
VsanComponent Get
VsanDisk {Get, New, Remove}
VsanDiskGroup {Get, New, Remove}
VsanEncryptionConfiguration Start
VsanEnterMaintenanceModeReport Get
VsanEvacuationPlan Get
VsanFaultDomain {Get, New, Remove, Set}
VsanFileServerIpConfig New
VsanFileServiceDomain {Get, New, Remove, Set}
VsanFileServiceOvf Add
VsanFileServiceOvfInfo Get
VsanFileShare {Get, New, Remove, Set}
VsanFileShareNetworkPermission New
VsanHclDatabase Update
VsanIscsiInitiatorGroup {Get, New, Remove, Set}
VsanIscsiInitiatorGroupTargetAssociation {Get, New, Remove}
VsanIscsiLun {Get, New, Remove, Set}
VsanIscsiTarget {Get, New, Remove, Set}
VsanNetworkPerformance Test
VsanObject Get
VsanObjectToRepairQueue Add
VsanResyncingComponent Get
VsanResyncingOverview Get
VsanRuntimeInfo Get
VsanSpaceUsage Get
VsanStat Get
VsanStoragePerformance Test
VsanView Get
VsanVMCreation Test
PS /root> Get-Command -Module VMware.VimAutomation.Storage -CommandType Alias | Sort-Object Name | select Name
Name
----
Get-KmsCluster
Repair-VsanObject
Set-KmsCluster
今回の vSAN クラスタ
今回も vCenter Server 7.0 U1a + ESXi 7.0 U1 の vSAN クラスタです。

PowerCLI から見た vCenter のバージョンです。
PS /root> $global:DefaultVIServer | select Name,Version,Build | Format-List Name : lab-vc-01.go-lab.jp Version : 7.0.1 Build : 17005016
そして、ESXi のバージョンです。
PS /root> Get-VMHost | Sort-Object Name | select Name,Version,Build Name Version Build ---- ------- ----- 192.168.10.171 7.0.1 16850804 192.168.10.172 7.0.1 16850804 192.168.10.173 7.0.1 16850804 192.168.10.174 7.0.1 16850804
PowerCLI での vSAN 環境の確認
vSAN クラスタの情報を確認してみます。vSAN が有効化されていることがわかります。
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanClusterConfiguration
Cluster VsanEnabled IsStretchedCluster Last HCL Updated
------- ----------- ------------------ ----------------
vsan-cluster-202012… True False 12/05/2020 05:06:00
「select *」のように、表示するプロパティを増やすと、FileService など新しめの機能についても情報取得できます。
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanClusterConfiguration | select * | Format-List
Uid : /VIServer=vsphere.local\administrator@lab-vc-01.go-lab.jp:443/Cluster=ClusterCompu
teResource-domain-c144/VsanClusterConfiguration=vsan-cluster-20201205/
Cluster : vsan-cluster-20201205
VsanEnabled : True
VsanDiskClaimMode : Manual
SpaceEfficiencyEnabled : False
PerformanceServiceEnabled : False
PerformanceStatsStoragePolicy :
StoragePolicy :
TimeOfHclUpdate : 12/05/2020 05:06:00
HealthCheckEnabled : True
HealthCheckIntervalMinutes : 60
StretchedClusterEnabled : False
PreferredFaultDomain :
WitnessHost :
IscsiTargetServiceEnabled : False
DefaultIscsiNetworkInterface :
DefaultIscsiTcpPort :
DefaultIscsiAuthenticationType :
DefaultIncomingChapUser :
DefaultOutgoingChapUser :
StoragePolicyForIscsiTargetService :
DiskFormatCompatibility : VMware.VimAutomation.Storage.Impl.V1.Vsan.VsanDiskFormatCompatibilityImpl
SilentHealthCheck : {}
ResyncThrottlingMbps : 0
EncryptionEnabled : False
EncryptionChanging :
KmsCluster :
KeyProvider :
EraseDiskBeforeUse :
GuestTrimUnmap : False
SiteReadLocalityEnabled : True
CustomizedSwapObjectEnabled : True
LargeClusterSupported : False
ObjectRepairTimerMinutes : 60
VsanBaselinePreference : LatestRelease
ProactiveRebalanceEnabled : False
ProactiveRebalanceThreshold : 30
FileServiceEnabled : False
FileServiceNetwork :
Name : vsan-cluster-20201205
Id : ClusterComputeResource-domain-c144
ディスクグループの情報を確認してみます。IsCacheDisk が True のものがキャッシュ ディスクで、False のものがキャパシティ ディスクです。
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | Sort-Object VMHost | select VMHost, DiskGroupType, DiskFormatVersion, @{N="CacheDisk"; E={($_ | Get-VsanDisk | where {$_.IsCacheDisk -eq $true}).Count}}, @{N="CapacityDisk"; E={($_ | Get-VsanDisk | where {$_.IsCacheDisk -ne $true}).Count}}, Uuid | Format-Table -AutoSize
VMHost DiskGroupType DiskFormatVersion CacheDisk CapacityDisk Uuid
------ ------------- ----------------- --------- ------------ ----
192.168.10.171 AllFlash 13 1 1 0000000000766d686261303a313a30
192.168.10.172 AllFlash 13 1 1 0000000000766d686261303a313a30
192.168.10.173 AllFlash 13 1 1 0000000000766d686261303a313a30
192.168.10.174 AllFlash 13 1 1 0000000000766d686261303a313a30
vSAN ディスクを確認してみます。
環境によっては、CapacityGB の結果を CanonicalName より前に持ってきた方が見やすいかもしれません。物理マシンの環境ではデバイス名が長くなるので容量の桁数を調整したり、ESXi ホストごとに並ばない場合は結果をソート(下記では「| sort-Object ESXi,IsCacheDisk」)すると、さらに見やすくすることもできます。ちなみに、Uuid がユニークでないのはネスト環境のためです。
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | % {$hv = $_.VMHost; $_ | Get-VsanDisk | % {$path = $_.DevicePath; $_| select @{N="ESXi"; E={$hv.Name}},Uuid,IsCacheDisk,IsSSD,@{N="CapacityGB"; E={[int]($hv | Get-VMHostDisk | where {$_.DeviceName -eq $path }).ScsiLun.CapacityGB}},CanonicalName}} | Sort-Object ESXi,IsCacheDisk | Format-Table -AutoSize
ESXi Uuid IsCacheDisk IsSsd CapacityGB CanonicalName
---- ---- ----------- ----- ---------- -------------
192.168.10.171 0000000000766d686261303a323a30 False True 300 mpx.vmhba0:C0:T2:L0
192.168.10.171 0000000000766d686261303a313a30 True True 50 mpx.vmhba0:C0:T1:L0
192.168.10.172 0000000000766d686261303a323a30 False True 300 mpx.vmhba0:C0:T2:L0
192.168.10.172 0000000000766d686261303a313a30 True True 50 mpx.vmhba0:C0:T1:L0
192.168.10.173 0000000000766d686261303a323a30 False True 300 mpx.vmhba0:C0:T2:L0
192.168.10.173 0000000000766d686261303a313a30 True True 50 mpx.vmhba0:C0:T1:L0
192.168.10.174 0000000000766d686261303a323a30 False True 300 mpx.vmhba0:C0:T2:L0
192.168.10.174 0000000000766d686261303a313a30 True True 50 mpx.vmhba0:C0:T1:L0
vSAN データストアの容量情報を確認してみます。
PS /root> Get-Datastore | where {$_.Type -eq "vsan"} | select Name, Type, CapacityGB, FreeSpaceGB, @{N="ProvisionedSpaceGB"; E={($_.CapacityGB - $_.FreeSpaceGB) + ($_.ExtensionData.Summary.Uncommitted / 1GB)}} | Format-Table -AutoSize
Name Type CapacityGB FreeSpaceGB ProvisionedSpaceGB
---- ---- ---------- ----------- ------------------
vsanDatastore vsan 1199.96875 1177.734375 22.234375
データストアの使用容量は Get-VsanSpaceUsage でも確認できます。
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanSpaceUsage | Format-Table -AutoSize
Cluster FreeSpaceGB CapacityGB
------- ----------- ----------
vsan-cluster-20201205 1,177.727 1,199.969
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanSpaceUsage | select *
Cluster : vsan-cluster-20201205
CapacityGB : 1199.96875
FreeSpaceGB : 1177.72652405128
VirtualDiskUsageGB : 1.72265625
VMHomeUsageGB : 2.20703125
FileSystemOverheadGB : 16.7418749965727
ChecksumOverheadGB : 1.46519470214844
PrimaryVMDataGB : 1.96484375
VsanOverheadGB : 20.2773821987212
IscsiTargetUsageGB :
IscsiLunUsedGB :
VsanWhatIfCapacity : {}
Get-VsanSpaceUsage では、「-StoragePolicy」仮想マシン ストレージ ポリシーをもとにした空き容量の確認も可能です。
PS /root> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanSpaceUsage -StoragePolicy "vSAN Default Storage Policy" | select -ExpandProperty VsanWhatIfCapacity | Format-List
StoragePolicy : vSAN Default Storage Policy
TotalWhatIfCapacityGB : 599.984375
FreeWhatIfCapacityGB : 588.86326202564
デフォルトで利用される仮想マシン ストレージ ポリシー「vSAN Default Storage Policy」のルールを確認してみます。VSAN.hostFailuresToTolerate が1となっていて、1台のホストでの障害障害を許容する(つまりデータは2重化)ルールなどが設定されていることがわかります。
PS /root> Get-SpbmStoragePolicy -Name "vSAN Default Storage Policy" | select -ExpandProperty AnyOfRuleSets | %{$name = $_.Name; $_ | select -ExpandProperty AllOfRules | select @{N="RuleName"; E={$Name}}, Capability, Value} | Format-Table -AutoSize
RuleName Capability Value
-------- ---------- -----
VSAN sub-profile VSAN.hostFailuresToTolerate 1
VSAN sub-profile VSAN.stripeWidth 1
VSAN sub-profile VSAN.forceProvisioning False
VSAN sub-profile VSAN.proportionalCapacity 0
VSAN sub-profile VSAN.cacheReservation 0
vSAN の構成情報をレポートとして残したい場合などに利用すると便利かなと思います。
以上、PowerCLI で vSAN の情報を見てみる話でした。
つづく。
vSAN の情報を PowerCLI で取得してみる。(テキストで簡易レポート出力編) - vm.gowatana.jp