vm.gowatana.jp

NEOにほんごVMware(仮)

vSAN の情報を PowerCLI で取得してみる。

個人的な 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

f:id:gowatana:20201205224513p:plain

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 クラスタです。

f:id:gowatana:20201205222904p:plain

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