Skip navigation

今回は、PowerCLI で 2 Node vSAN を構成してみます。

2 Node vSAN のセットアップも、通常の vSAN と同様に vSphere Web Client を使用できますが

PowerCLI でもセットアップすることができます。

 

以前に PowerCLI での vSAN セットアップを

VMware Hands-on Labs(HoL)でためす方法を投稿しましたが・・・

PowerCLI で vSAN セットアップをためしてみる。

 

今回も同様に、下記の HoL のモジュール 7 にあるシナリオを PowerCLI で実施してみます。

 

HOL-1808-01-HCI - vSAN v6.6 - Getting Started

http://labs.hol.vmware.com/HOL/catalogs/lab/3651

 

ESXi ホストの準備。

最初に、vCenter へ接続してクラスタを作成しておきます。

PowerCLI> Connect-VIServer vcsa-01a.corp.local

PowerCLI> Get-Datacenter RegionA01 | New-Cluster -Name 2-Node-Stretched-Cluster

 

esx-05a.corp.local と esx-06a.corp.local をクラスタに移動します。

PowerCLI> Get-VMHost esx-05a.corp.local,esx-06a.corp.local | Move-VMHost -Location 2-Node-Stretched-Cluster

 

クラスタに移動されたすべてのホストのメンテナンスモードを解除します。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Set-VMHost -State Connected

 

VMkernel ポートで、vSAN の準備ができていることを確認します。

VMkernel ポート「vmk3」ではすでに vSAN のトラフィックが有効化されています。

(vSAN Witness ホストの VMkernel ポートの設定は、後であらためて確認します。)

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostNetworkAdapter -VMKernel | select VMHost,Name,IP,VsanTrafficEnabled | sort VMHost,Name

 

このラボではすでに vSAN トラフィックが有効化されていますが、

有効化する場合は下記のようなコマンドラインになります。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostNetworkAdapter -Name vmk3 | Set-VMHostNetworkAdapter -VsanTrafficEnabled:$true -Confirm:$false

 

ESXi ホストのディスク構成を確認しておきます。

ここで、このラボでは各ホストで構成が若干違う(vmhba1:~ と vmhba2:~)ことがわかります。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-VMHost | Get-VMHostDisk | select VMHost,ScsiLun,TotalSectors | sort VMHost,ScsiLun

vsan1808m7-01.png

 

先程とは別の方法で、VMkernel ポートの設定を確認しておきます。

まだ vSAN Witness が有効化されていないことがわかります。

ここでは、Get-EsxCli により、PowerCLI から esxcli を実行しています。

esxcli で実行可能な作業であれば、このように PowerCLI を介して実行することも可能です。

ここでは、コマンドラインが簡潔な Get-EsxCli -V1 を利用しています。

PowerCLI> Get-VMHost esx-0[568]a.* | Get-VMHostNetworkAdapter -VMKernel | % {$vmk = $_.Name; $_ | select VMHost,Name,@{N="Tags";E={((($_.VMHost | Get-EsxCli).network.ip.interface.tag.get($vmk)).Tags | sort) -join ","}}} | sort VMHost,Name

vsan1808m7-02.png

 

ESXi ホスト「esx-05a.corp.local」の vmk0 に、未設定だった witness タグを付与してみます。

まだ vSAN Witness が有効化されていないことがわかります。

今度は先ほどとはことなり、Get-EsxCli -V2 で esxcli を実行しています。

Get-EsxCli -V2 ではオプション指定の方法が少し複雑になりますが、

かわりにオプションを指定しやすく(必須ではないオプションを省略しやすく)なっています。

PowerCLI> $esxcli = Get-VMHost esx-05a.corp.local | Get-EsxCli -V2

PowerCLI> $a = $esxcli.vsan.network.ipv4.add.CreateArgs()

PowerCLI> $a.interfacename = "vmk0"

PowerCLI> $a.traffictype = "witness"

PowerCLI> $esxcli.vsan.network.ipv4.add.Invoke($a)

 

そのまま下記のコマンド実行すると、設定されたことが確認できます。

PowerCLI> $esxcli.vsan.network.list.Invoke() | select VmkNicName,TrafficType

vsan1808m7-03.png

 

同様に ESXi ホスト「esx-06a.corp.local」の vmk0 に、witness タグを付与します。

(PowerCLI のプロンプトは省略しています。)

$esxcli = Get-VMHost esx-06a.corp.local | Get-EsxCli -V2

$a = $esxcli.vsan.network.ipv4.add.CreateArgs()

$a.interfacename = "vmk0"

$a.traffictype = "witness"

$esxcli.vsan.network.ipv4.add.Invoke($a)

$esxcli.vsan.network.list.Invoke() | select VmkNicName,TrafficType

 

VMkernel ポートの Tag 設定は下記のようになりました。

こちらでは witness は「VSANWitness」と表示されています。

vsan1808m7-02a.png

 

vSAN クラスタのセットアップ。

それでは、2 Node vSAN のセットアップをしていきます。

vSAN Witness 仮想アプライアンス「esx-08a.corp.local」は、

このラボではすでにデプロイとネットワーク設定が実施されています。

 

クラスタで vSAN を有効化します。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Set-Cluster -VsanEnabled:$true -Confirm:$false

Fault Domain を 2 ノードそれぞれに作成します。

優先 Fault Domain は Preferred でセカンダリは Secondary としますが、

ここではまだその区別はありません。

PowerCLI> New-VsanFaultDomain -Name Preferred -VMHost esx-05a.corp.local

PowerCLI> New-VsanFaultDomain -Name Secondary -VMHost esx-06a.corp.local

 

ストレッチ クラスタを有効化します。

ここで Witness ホストと、優先 Fault Domain を指定します。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Set-VsanClusterConfiguration -StretchedClusterEnabled:$true -WitnessHost esx-08a.corp.local -WitnessHostCacheDisk mpx.vmhba1:C0:T2:L0 -WitnessHostCapacityDisk mpx.vmhba1:C0:T1:L0 -PreferredFaultDomain Preferred

 

つづけて、vSAN ディスク グループを作成します。

それぞれにホストに、2つずつ ディスクグループを作成します。

今回は各ホストでキャッシュ用 SSD のデバイス名が異なるので、ディスクグループごとにコマンドラインを実行します。

 

esx-05a.corp.local の ディスクグループ#1

PowerCLI> Get-VMHost esx-05a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T0:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T0:L0,mpx.vmhba3:C0:T1:L0

 

esx-06a.corp.local の ディスクグループ#1

PowerCLI> Get-VMHost esx-06a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba2:C0:T0:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T0:L0,mpx.vmhba3:C0:T1:L0

 

esx-05a.corp.local の ディスクグループ#2

PowerCLI> Get-VMHost esx-05a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T1:L0 -DataDiskCanonicalName mpx.vmhba4:C0:T0:L0,mpx.vmhba4:C0:T1:L0

 

esx-06a.corp.local の ディスクグループ#2

PowerCLI> Get-VMHost esx-06a.corp.local | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba2:C0:T1:L0 -DataDiskCanonicalName mpx.vmhba4:C0:T0:L0,mpx.vmhba4:C0:T1:L0

 

vSAN データストアの名前を確認します。デフォルトで「vsanDatastore」になります。

PowerCLI> Get-Cluster 2-Node-Stretched-Cluster | Get-Datastore | where {$_.Type -eq "vsan"}

 

vSAN データストアに VM を作成しておきます。

PowerCLI> New-VM -Name vm01 -Datastore vsanDatastore -StorageFormat Thin -ResourcePool esx-05a.corp.local

 

今回は省略しますが、あわせて必要に応じて「仮想マシン ストレージ ポリシー」によるローカルアフィニティや、

DRS ルールでのアフィニティ ルールを設定したりします。

 

セットアップした 2 Node vSAN の様子。

PowerCLI で構成したとおり、2 Node vSAN はストレッチ クラスタとなり、

Preferred と Secondary のうち、Preferred が優先 Fault Domain になっています。

vsan1808m7-04.png

 

vSAN Health でも「Storeched cluster」が緑になっています。

ハードウェア互換性に関連するエラーなどがありますが、HoL の仕様上ここでは無視します。

vsan1808m7-05.png

 

vSAN データストアに作成した VM「vm01」は、

データが格納される Component がそれぞれの Fault Domain(Preferred と Secondary)、

Witness が Witness ホストに配置されています。

(今回はデフォルトの仮想マシン ストレージ ポリシーのままです。)

vsan1808m7-06.png

 

vSphere Web Client で簡単に 2 Node vSAN を構成できますが、

PowerCLI を利用すると Fault Domain を手動作成したりするので

より理解を深められるのではないかと思います。

 

2 Node vSAN はリモートオフィス / ブランチオフィスへの配置をユースケースとしているようで

大量展開や省力化のためか自動化のサンプルが多くあります。

VMware Sample Exchange などにもサンプルが多いので、いろいろと挑戦してみたいところです。

vSAN Samples - Samples - VMware {code}

 

以上、PowerCLI で 2 Node vSAN を構成してみる話でした。

vSAN のセットアップには一般的 vSphere Web Client を使用しますが、PowerCLI でも同様の操作ができます。

PowerCLI での vSAN 設定を、 VMware Hands-on Labs(HoL)でためす方法を紹介します。

 

HoL には、vSAN 入門者むけの下記のラボがあります。

 

HOL-1808-01-HCI - vSAN v6.6 - Getting Started

http://labs.hol.vmware.com/HOL/catalogs/lab/3651

 

このラボには PowerCLI を使用するシナリオがあるのですが、

モジュール 1 での vSAN クラスタのセットアップは vSphere Web Client で実施しています。

今回は、その部分を操作を PowerCLI に置き換えてみます。

 

ちなみにラボのシナリオ(マニュアル)は公開されており、下記で確認できます。

 

VMware Hands-on Labs - HOL-1808-01-HCI

http://docs.hol.vmware.com/HOL-2018/Localization/manuals/ja/manualexport-hol-1808-01-hci.zip_html_en/

 

コマンドラインの実行方法について。

コマンドラインは「テキストの送信」を利用すると、HoL に対してコピー&ペーストができるようになります。

(ただし、逆の HoL からのコピーはできません。)

デスクトップにある「VMware PowerCLI」のアイコンから PowerCLI のウインドウを起動しておき、

「送信」をクリックする前に、フォーカスをあてておきます。

vsan-powercli-hol-01.png

 

ちなみに HoL の PowerCLI で実施できる vSAN 関連の操作は、

下記のようなコマンドラインで俯瞰することができます。

PowerCLI> gcm -Module VMware.VimAutomation.Storage | group Noun | select Count,Name,@{N="Verb";E={$_.Group.Verb -join ","}} | sort Name

 

PowerCLI での vSAN クラスタのセットアップをためす。

それでは、vSAN のセットアップをしていきます。

 

まず、vCenter に接続します。

HoL では、パスワードなしでログインできるように構成されています。

PowerCLI> Connect-VIServer vcsa-01a.corp.local

 

今回は、クラスタのオブジェクトを取得して変数「$c」に格納おきます。

HoL へのコピー&ペーストの都合上、短い変数名にしました。

PowerCLI> $c = Get-Cluster RegionA01-COMP01

 

下記のようなコマンドラインで、クラスタの情報を確認できます。

PowerCLI> $c

PowerCLI> $c | select *

PowerCLI> $c | select Name,VsanEnabled

 

クラスタに含まれる ESXi ホストを確認しておきます。

PowerCLI> $c | Get-VMHost | sort Name

 

それでは、vSAN を有効化します。

「-Confirm:$false」でコマンド実行の確認メッセージを抑止しています。

どうしても確認しつつコマンドラインを実行したい場合は、はこのオプションは不要です。

PowerCLI> $c | Set-Cluster -VsanEnabled:$true -Confirm:$false

PowerCLI> $c | Get-VsanClusterConfiguration | Set-VsanClusterConfiguration -SpaceEfficiencyEnabled:$true -AllowReducedRedundancy:$true -Confirm:$false

 

クラスタの vSAN 設定を確認します。

SpaceEfficiencyEnabled では、重複排除と圧縮が有効になっているか確認できます。

設定時の AllowReducedRedundancy は、設定反映時に一時的な冗長性の低下を許容するというオプションなので

ここでのクラスタの設定確認には含めません。

PowerCLI> $c | Get-VsanClusterConfiguration | select Cluster,VsanEnabled,SpaceEfficiencyEnabled

 

VMkernel ポートで vSAN トラフィックが有効化されているか確認しておきます。

PowerCLI> $c | Get-VMHost | Get-VMHostNetworkAdapter -VMKernel -Name vmk3 | select VMHost,Name,IP,VsanTrafficEnabled,PortGroupName | sort VMHost,Name | ft -AutoSize

 

クラスタに含まれるすべてのホストに対して、vSAN のディスク グループを作成します。

ホストに搭載されたディスクは、下記のようなコマンドラインで確認できます。

PowerCLI>  $c | Get-VMHost | Get-VMHostDisk | select VMHost,ScsiLun,TotalSectors | sort VMHost,ScsiLun

 

すべてのホストでハードウェア構成が揃っているので、

SsdCanonicalName と DataDiskCanonicalName  のデバイス名もすべてのホストで揃えられます。

今回はシナリオにあわせて、キャッシュ層として mpx.vmhba1:C0:T1:L0、

キャパシティ層として mpx.vmhba3:C0:T1:L0 と mpx.vmhba4:C0:T1:L0 を追加します。

PowerCLI> $c | Get-VMHost | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T1:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T1:L0,mpx.vmhba4:C0:T1:L0

 

vSAN のディスク グループにディスクが追加されたことを確認します。

PowerCLI> $c | Get-VMHost | %{$hv_name =$_.Name; $_ | Get-VsanDisk | select @{N="VMHost";E={$hv_name}},CanonicalName,IsCacheDisk,VsanDiskGroup} | sort VMHost

 

vSAN データストアの容量は、下記で確認できます。

クラスタの vSAN 設定が更新されているため、以前に取得した $c ではなく

Get-Cluster でクラスタのオブジェクトを取得しなおす必要があります。

PowerCLI> Get-Cluster RegionA01-COMP01 | Get-VsanSpaceUsage | select *

 

これで、モジュール 1 の完了時点と同様の vSAN 環境ができました。

 

このモジュールのシナリオにはありませんが、のこりのディスクで

追加のディスクグループを作成することもできます。

ディスクグループでコントローラを分割したほうがよいとは思いますが、

今回は HoL シナリオの都合上、下記のようにディスクを選択しています。

PowerCLI> $c | Get-VMHost | New-VsanDiskGroup -SsdCanonicalName mpx.vmhba1:C0:T0:L0 -DataDiskCanonicalName mpx.vmhba3:C0:T0:L0,mpx.vmhba4:C0:T0:L0

 

このように、vSphere Web Client での vSAN 操作のほとんどは PowerCLI でも実施できます。

作業を PowerCLI に置き換えることで、設定の効率化やミスの防止などをはかれるかもしれません。

 

また、PowerCLI で vSAN 環境を確認する方法については下記の投稿もどうぞ。

vSAN の情報を PowerCLI 6.5 R1 で見てみる。

 

以上、HoL を利用して PowerCLI による vSAN セットアップをためしてみる話でした。

以前の投稿で PowerCLI を利用して、vSAN 環境の Oracle RAC VM の情報を確認する方法を紹介しました。

PowerCLI で vSphere / vSAN 環境での Oracle RAC むけ VM の構成情報を取得してみる。

 

今回は、その VM を PowerCLI で作成する方法を紹介します。

vCenter 6.5 U1 / ESXi 6.5 U1 の vSAN 環境で、

PowerCLI は、あえて Oracle Linux 7 で使用してみました。

Linux で PowerCLI 10.0 をためしてみる。

 

VM の作成 / クローン。

今回は、db00-template というテンプレートの VM を用意しています。

テンプレート VM には、Oracle Linux 7 がインストールして、

rpm パッケージのアップデートなども済ませておくとよいと思います。

 

テンプレート VM をクローンします。

最初は Get-VM にしていますが、VM を「テンプレート」に変換している場合は Get-Template になります。

DRS を有効化している環境では、ESXi ではなく クラスタ / リソースプールを指定してクローンできます。

  • 今回のクローン先とし指定している リソースプール「rp-lab」は作成ずみです。
  • 仮想マシン フォルダ「vsan-oracle-rac」も作成ずみです。
  • クローン先のデータストアは vSAN データストア「vsanDatastore-01」です。
  • テンプレート VM には OS 領域の VMDK しかないので、Thin プロビジョニングにしています。

PS /home/gowatana> Get-VM db00-template | New-VM -ResourcePool rp-lab -Datastore vsanDatastore-01 -StorageFormat Thin -Location vsan-oracle-rac -Name db01

PS /home/gowatana> Get-VM db00-template | New-VM -ResourcePool rp-lab -Datastore vsanDatastore-01 -StorageFormat Thin -Location vsan-oracle-rac -Name db02

 

作成された VM です。

下記で見られる VM のスペックは、テンプレートの VM から引き継がれています。

PS /home/gowatana> Get-VM db0? | select Name,PowerState,NumCpu,MemoryGB,Version,GuestId,VMHost | Sort-Object Name | ft -AutoSize

 

Name PowerState NumCpu MemoryGB Version GuestId              VMHost

---- ---------- ------ -------- ------- -------              ------

db01 PoweredOff      2        8     v13 oracleLinux7_64Guest hv-i21.go-lab.jp

db02 PoweredOff      2        8     v13 oracleLinux7_64Guest hv-i21.go-lab.jp

 

 

vNIC の追加。

分散ポートグループの作成と、vNIC を追加します。

  • 今回の RAC では、Public(テンプレート VM にすでに作成ずみの vNIC#1)と Private(追加する vNIC#2)の NIC を使用する想定とします。
  • ASM 用のネットワークを分離できますが、今回は Private と兼用にします。
  • 共有ディスクは VMDK ファイルの共有で用意するので、NFS / iSCSI ネットワークも用意しません。
  • Private ネットワークむけに VLAN をわけたポートグループ作成して、vNIC はそこに接続します。
    ちなみに、この環境では分散仮想スイッチ(vDS)を利用しています。

 

まだ、それぞれの VM に vNIC は 1つだけです。

PS /home/gowatana> Get-VM db0? | Get-NetworkAdapter | select Parent,Name,Type,NetworkName,@{N="StartConnected";E={$_.ConnectionState.StartConnected}},@{N="Connected";E={$_.ConnectionState.Connected}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name                 Type NetworkName          StartConnected Connected

------ ----                 ---- -----------          -------------- ---------

db01   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

db02   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

 

 

分散ポートグループを作成します。

PS /home/gowatana> Get-VDSwitch vds01 | New-VDPortgroup -Name dvpg-vds01-vlan-4001 -VlanId 4001

 

vNIC#2 を追加します。

PS /home/gowatana> Get-VM db0? | New-NetworkAdapter -Type Vmxnet3 -Portgroup dvpg-vds01-vlan-4001 -StartConnected:$true 

 

vNIC#2 が追加されました。

PS /home/gowatana> Get-VM db0? | Get-NetworkAdapter | select Parent,Name,Type,NetworkName,@{N="StartConnected";E={$_.ConnectionState.StartConnected}},@{N="Connected";E={$_.ConnectionState.Connected}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name                 Type NetworkName          StartConnected Connected

------ ----                 ---- -----------          -------------- ---------

db01   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

db01   Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True     False

db02   Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True     False

db02   Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True     False

 

 

VMDK の追加。(ローカル ディスクむけ)

VM に、ローカル ディスク むけの VMDK を追加します。

これは、ソフトウェアをインストールする領域として利用します。

(いわゆる ORACLE_BASE / ORACLE_HOME / GRID_HOME...)

このディスクは、特にファイルシステムを分ける必要がない場合は不要ですが、

一般的にはファイルシステムを分割するのではないかと思います。

 

VM テンプレートでは VMDK#1 だけの状態でした。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | select Parent,Name,CapacityGB,Filename | Sort-Object Parent,Name

 

Parent Name        CapacityGB Filename

------ ----        ---------- --------

db01   Hard disk 1         16 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01.vmdk

db02   Hard disk 1         16 [vsanDatastore-01] cac6ab5a-1074-611f-a546-b8aeedea7a23/db02.vmdk

 

 

VMDK を追加します。

PS /home/gowatana> Get-VM db0? | New-HardDisk -Datastore vsanDatastore-01 -CapacityGB 40 -StorageFormat Thin

 

VMDK が追加されました。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | select Parent,Name,CapacityGB,Filename | Sort-Object Parent,Name

 

Parent Name        CapacityGB Filename

------ ----        ---------- --------

db01   Hard disk 1         16 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01.vmdk

db01   Hard disk 2         40 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_1.vmdk

db02   Hard disk 1         16 [vsanDatastore-01] cac6ab5a-1074-611f-a546-b8aeedea7a23/db02.vmdk

db02   Hard disk 2         40 [vsanDatastore-01] cac6ab5a-1074-611f-a546-b8aeedea7a23/db02_1.vmdk

 

 

VMDK の追加。(共有ディスクむけ / db01 側)

RAC の共有ディスクとして利用するための VMDK を追加します。

共有ディスクとして利用する VMDK ファイルの作成は、1台の VM(今回は db01)で実施します。

  • 共有ディスクむけの VMDK は、仮想 SCSI コントローラ(vSCSI Controller)を分けておきます。
  • EagerZeroed Thick にしておきます。
  • スナップショットの対象外になるように「-Persistence IndependentPersistent」にしておきます。

 

デフォルトでは、vSCSI Controller は 1つだけのはずです。

PS /home/gowatana> Get-VM db0? | Get-ScsiController | select Parent,Name,Type,BusSharingMode | Sort-Object Parent

 

Parent Name                     Type BusSharingMode

------ ----                     ---- --------------

db01   SCSI controller 0 ParaVirtual      NoSharing

db02   SCSI controller 0 ParaVirtual      NoSharing

 

 

VMDK と vSCSI Controller を追加します。

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent | New-ScsiController -Type ParaVirtual

 

これで、vSCSI Controllr と VMDK が同時に追加されます。

PS /home/gowatana> Get-VM db01 | Get-ScsiController | select Parent,Name,Type,BusSharingMode

 

Parent Name                     Type BusSharingMode

------ ----                     ---- --------------

db01   SCSI controller 0 ParaVirtual      NoSharing

db01   SCSI controller 1 ParaVirtual      NoSharing

 

 

PS /home/gowatana> Get-VM db01 | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity      Storage Policy    Status    Time Of Check

------      --------------    ------    -------------

Hard disk 1 vsan-policy-raid5 compliant 2018/03/16 18:45:07

Hard disk 2 vsan-policy-raid5 compliant 2018/03/16 21:21:45

Hard disk 3                   none

 

 

さらに VMDK を追加する場合は、ここで追加された 「SCSI controller 1」を指定します。

今回は、あと 5つ追加します。

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db01 | New-HardDisk -CapacityGB 30 -Datastore vsanDatastore-01 -StorageFormat EagerZeroedThick -Persistence IndependentPersistent -Controller "SCSI controller 1"

 

結果的に、Controller 1001 の VMDK#3~#8 が追加されました。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,CapacityGB,@{N="Controller";E={$_.ExtensionData.ControllerKey}},StorageFormat,@{N="StoragePolicy";E={($_|Get-SpbmEntityConfiguration).StoragePolicy}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name        CapacityGB Controller    StorageFormat StoragePolicy

------ ----        ---------- ----------    ------------- -------------

db01   Hard disk 1         16       1000             Thin vsan-policy-raid5

db01   Hard disk 2         40       1000             Thin vsan-policy-raid5

db01   Hard disk 3         30       1001 EagerZeroedThick

db01   Hard disk 4         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 5         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 6         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 7         30       1001 EagerZeroedThick vsan-policy-raid5

db01   Hard disk 8         30       1001 EagerZeroedThick vsan-policy-raid5

 

 

VMDK ファイルは、すべて vSAN データストアに格納されています。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,Filename | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name        Filename

------ ----        --------

db01   Hard disk 1 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01.vmdk

db01   Hard disk 2 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_1.vmdk

db01   Hard disk 3 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

db01   Hard disk 4 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

db01   Hard disk 5 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

db01   Hard disk 6 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

db01   Hard disk 7 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

db01   Hard disk 8 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

 

 

仮想マシン ストレージ ポリシーの作成。

RAC の共有ディスクむけに、仮想マシン ストレージ ポリシーを作成します。

  • オブジェクト領域予約を 100% にします。
  • 許容される障害数(FTT)を 1 にします。
  • オブジェクトあたりのディスク ストライプ数は 2 にします。

PS /home/gowatana> $r1 = New-SpbmRule -Capability (Get-SpbmCapability -Name VSAN.proportionalCapacity) -Value 100

PS /home/gowatana> $r2 = New-SpbmRule -Capability (Get-SpbmCapability -Name VSAN.hostFailuresToTolerate) -Value 1

PS /home/gowatana> $r3 = New-SpbmRule -Capability (Get-SpbmCapability -Name VSAN.stripeWidth) -Value 2

PS /home/gowatana> $rs1 = New-SpbmRuleSet -AllOfRules $r1, $r2, $r3

PS /home/gowatana> New-SpbmStoragePolicy -Name vsan-policy-rac-01 -AnyOfRuleSets $rs1

 

ポリシーが作成されました。

PS /home/gowatana> Get-SpbmStoragePolicy -Name "vsan-policy-rac-01" | select -ExpandProperty AnyOfRuleSets | %{$name = $_.Name; $_ | select -ExpandProperty AllOfRules | select @{N="RuleName";E={$Name}},Capability,Value} | ft -AutoSize

 

RuleName   Capability                  Value

--------   ----------                  -----

Rule-Set 1 VSAN.proportionalCapacity     100

Rule-Set 1 VSAN.hostFailuresToTolerate     1

Rule-Set 1 VSAN.stripeWidth                2

 

 

VMDK へのポリシー割り当て。(db01)

共有ディスクむけの VMDK にポリシーを割り当てます。

接続されている vSCSI Controller を識別したほうがよいと思いますが、

今回は Persistence を IndependentPersistent にしている VMDK に対して割り当てます。

(見分けやすいので)

PS /home/gowatana> Get-VM db01 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | Set-SpbmEntityConfiguration -StoragePolicy vsan-policy-rac-01

 

vSCSI Controller 1(Key が 1001)の VMDK のポリシーが変更されました。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,CapacityGB,@{N="Controller";E={$_.ExtensionData.ControllerKey}},StorageFormat,@{N="StoragePolicy";E={($_|Get-SpbmEntityConfiguration).StoragePolicy}} | Sort-Object Parent,Name | ft -AutoSize

 

Parent Name        CapacityGB Controller    StorageFormat StoragePolicy

------ ----        ---------- ----------    ------------- -------------

db01   Hard disk 1         16       1000             Thin vsan-policy-raid5

db01   Hard disk 2         40       1000             Thin vsan-policy-raid5

db01   Hard disk 3         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 4         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 5         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 6         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 7         30       1001 EagerZeroedThick vsan-policy-rac-01

db01   Hard disk 8         30       1001 EagerZeroedThick vsan-policy-rac-01

 

 

VMDK の追加。(共有ディスクむけ / db02 側)

db02 に、仮想ディスクを接続します。

db01 の下記のディスクが対象になります。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | select Name,Filename

 

Name        Filename

----        --------

Hard disk 3 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

Hard disk 4 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

Hard disk 5 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

Hard disk 6 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

Hard disk 7 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

Hard disk 8 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

 

 

db02 の最初の共有 VMDK を接続するときに、あわせて vSCSI Controller を追加します。

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk" -Persistence IndependentPersistent | New-ScsiController -Type ParaVirtual

 

Type                 BusSharingMode       UnitNumber

----                 --------------       ----------

ParaVirtual          NoSharing                     4

 

 

残りの VMDK も接続します。

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

PS /home/gowatana> Get-VM db02 | New-HardDisk -DiskPath "[vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk" -Persistence IndependentPersistent -Controller "SCSI controller 1"

 

db01、db02 両方に同じパスの VMDK ファイルが接続された状態になりました。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | group Filename | select Count,@{N="VMs";E={($_.Group.Parent | Sort-Object)  -join ","}},Name | ft -AutoSize

 

Count VMs       Name

----- ---       ----

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

    2 db01,db02 [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

 

 

VMDK へのポリシー割り当て。(db02)

db02 では、まだ想定しているポリシーが割り当てられていません。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity      Storage Policy    Status    Time Of Check

------      --------------    ------    -------------

Hard disk 1 vsan-policy-raid5 compliant 2018/03/16 18:45:07

Hard disk 2 vsan-policy-raid5 compliant 2018/03/16 21:21:40

Hard disk 3                   none

Hard disk 4 vsan-policy-raid5 outOfDate 2018/03/17 2:11:59

Hard disk 5 vsan-policy-raid5 outOfDate 2018/03/17 2:12:15

Hard disk 6 vsan-policy-raid5 outOfDate 2018/03/17 2:12:32

Hard disk 7 vsan-policy-raid5 outOfDate 2018/03/17 2:12:48

Hard disk 8 vsan-policy-raid5 outOfDate 2018/03/17 2:13:05

 

 

ポリシーを割り当てます。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | Set-SpbmEntityConfiguration -StoragePolicy vsan-policy-rac-01

 

ポリシーが割り当てれました。少しまつと Compliant になります。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity      Storage Policy     Status    Time Of Check

------      --------------     ------    -------------

Hard disk 1 vsan-policy-raid5  compliant 2018/03/16 18:45:07

Hard disk 2 vsan-policy-raid5  compliant 2018/03/16 21:21:40

Hard disk 3 vsan-policy-rac-01 compliant 2018/03/17 2:26:09

Hard disk 4 vsan-policy-rac-01 compliant 2018/03/17 2:26:16

Hard disk 5 vsan-policy-rac-01 compliant 2018/03/17 2:26:25

Hard disk 6 vsan-policy-rac-01 compliant 2018/03/17 2:26:32

Hard disk 7 vsan-policy-rac-01 compliant 2018/03/17 2:26:39

Hard disk 8 vsan-policy-rac-01 compliant 2018/03/17 2:26:47

 

 

VMDK への multi-writer 設定。(db01 / db02 両方)

コマンドひとつで multi-writer フラグを設定できないようなので、下記のように設定します。

まず Hard disk 3 だけ設定変更します。

PS /home/gowatana> $vm = Get-VM db01

PS /home/gowatana> $disk = $vm | Get-HardDisk -Name "Hard disk 3"

PS /home/gowatana> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

PS /home/gowatana> $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec

PS /home/gowatana> $spec.deviceChange[0].operation = 'edit'

PS /home/gowatana> $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk

PS /home/gowatana> $spec.deviceChange[0].device = $disk.ExtensionData

PS /home/gowatana> $spec.deviceChange[0].device.Backing.Sharing = "sharingMultiWriter"

PS /home/gowatana> $vm.ExtensionData.ReconfigVM($spec)

 

設定されました。

PS /home/gowatana> Get-VM db01 | Get-HardDisk | select Parent,Name,@{N="Sharing";E={$_.ExtensionData.Backing.Sharing}}

 

Parent Name        Sharing

------ ----        -------

db01   Hard disk 1 sharingNone

db01   Hard disk 2 sharingNone

db01   Hard disk 3 sharingMultiWriter

db01   Hard disk 4 sharingNone

db01   Hard disk 5 sharingNone

db01   Hard disk 6 sharingNone

db01   Hard disk 7 sharingNone

db01   Hard disk 8 sharingNone

 

 

煩雑なので、下記のような PowerShell のファンクションを作成します。

function Set-MultiWriterFlag ($vm_name, $vdisk_name) {

    $vm = Get-VM $vm_name

    $disk = $vm | Get-HardDisk -Name $vdisk_name

    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

    $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec

    $spec.deviceChange[0].operation = 'edit'

    $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk

    $spec.deviceChange[0].device = $disk.ExtensionData

    $spec.deviceChange[0].device.Backing.Sharing = "sharingMultiWriter"

    $vm.ExtensionData.ReconfigVM($spec)

}

 

ひたすら設定します。(db01)

PS /home/gowatana> function Set-MultiWriterFlag ($vm_name, $vdisk_name) {

>>     $vm = Get-VM $vm_name            

>>     $disk = $vm | Get-HardDisk -Name $vdisk_name

>>     $spec = New-Object VMware.Vim.VirtualMachineConfigSpec

>>     $spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec

>>     $spec.deviceChange[0].operation = 'edit'

>>     $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk

>>     $spec.deviceChange[0].device = $disk.ExtensionData

>>     $spec.deviceChange[0].device.Backing.Sharing = "sharingMultiWriter"

>>     $vm.ExtensionData.ReconfigVM($spec)

>> }

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 3"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 4"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 5"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 6"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 7"

PS /home/gowatana> Set-MultiWriterFlag db01 "Hard disk 8"

 

のこりの db02 も設定します。

PS /home/gowatana> Get-VM db02 | Get-HardDisk | where {$_.Persistence -eq "IndependentPersistent"} | % {Set-MultiWriterFlag $_.Parent.Name $_.Name}

 

設定されました。

PS /home/gowatana> Get-VM db0? | Get-HardDisk | select Parent,Name,@{N="Sharing";E={$_.ExtensionData.Backing.Sharing}} | Sort-Object Parent,Name

 

Parent Name        Sharing

------ ----        -------

db01   Hard disk 1 sharingNone

db01   Hard disk 2 sharingNone

db01   Hard disk 3 sharingMultiWriter

db01   Hard disk 4 sharingMultiWriter

db01   Hard disk 5 sharingMultiWriter

db01   Hard disk 6 sharingMultiWriter

db01   Hard disk 7 sharingMultiWriter

db01   Hard disk 8 sharingMultiWriter

db02   Hard disk 1 sharingNone

db02   Hard disk 2 sharingNone

db02   Hard disk 3 sharingMultiWriter

db02   Hard disk 4 sharingMultiWriter

db02   Hard disk 5 sharingMultiWriter

db02   Hard disk 6 sharingMultiWriter

db02   Hard disk 7 sharingMultiWriter

db02   Hard disk 8 sharingMultiWriter

 

 

DRS ルールの作成。

クラスタで DRS を有効にしているので、DRS ルールも設定しておきます。

アンチ アフィニティ ルールで、db01 と db02 が別の ESXi ホストで稼働するようにします。

 

アンチ アフィニティ ルールを作成します。

PS /home/gowatana> Get-Cluster vsan-cluster-01 | New-DrsRule -KeepTogether:$false -Name drs-anti-affinity-rac-01 -VM db01,db02

 

ルールが作成されました。

PS /home/gowatana> Get-Cluster vsan-cluster-01 | Get-DrsRule -Name drs-anti-affinity-rac-01 | select Cluster,Name,Type,Mandatory,Enabled,@{N="VMs";E={($_.VMIds | %{(Get-VM -Id $_).Name}) -join ","}}

 

 

Cluster   : vsan-cluster-01

Name      : drs-anti-affinity-rac-01

Type      : VMAntiAffinity

Mandatory : False

Enabled   : True

VMs       : db01,db02

 

 

VM の起動。

ここで VM を起動します。

PS /home/gowatana> Get-VM db0? | Start-VM

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

db01                 PoweredOn  2        8.000

db02                 PoweredOn  2        8.000

 

 

Oracle RAC 構築。

Oracle Grid Infrastructure と Oracle Database をインストールして、RAC データベースを作成します。

(ここでは省略)

 

Oracle RAC のゲスト OS からみた VMDK の様子。

vSAN 上の VMDK ファイルによる仮想ディスクは、ゲスト OS から見ると VMFS にある仮想ディスクと同様に

「VMware Virtual disk」と認識されています。

[grid@db01 ~]$ cat /etc/oracle-release

Oracle Linux Server release 7.4

[grid@db01 ~]$ lsscsi

[2:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[2:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[3:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

[4:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sdc

[4:0:1:0]    disk    VMware   Virtual disk     2.0   /dev/sdd

[4:0:2:0]    disk    VMware   Virtual disk     2.0   /dev/sde

[4:0:3:0]    disk    VMware   Virtual disk     2.0   /dev/sdf

[4:0:4:0]    disk    VMware   Virtual disk     2.0   /dev/sdg

[4:0:5:0]    disk    VMware   Virtual disk     2.0   /dev/sdh

[grid@db01 ~]$

 

共有ディスクとして追加した 30GB のディスクは下記です。

[grid@db01 ~]$ lsblk -l /dev/sd[c-h]

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sdc    8:32   0  30G  0 disk

sdd    8:48   0  30G  0 disk

sde    8:64   0  30G  0 disk

sdf    8:80   0  30G  0 disk

sdg    8:96   0  30G  0 disk

sdh    8:112  0  30G  0 disk

[grid@db01 ~]$

 

Oracle RAC の ASM で利用される Oracle ASM Filter Driver (ASMFD)では、

下記のようなラベルが付与されます。

[grid@db01 ~]$ asmcmd afd_lsdsk --all

node 'db01':

--------------------------------------------------------------------------------

Label                     Filtering   Path

================================================================================

DATA1                       ENABLED   /dev/sdf

DATA2                       ENABLED   /dev/sdg

DATA3                       ENABLED   /dev/sdh

GRID1                       ENABLED   /dev/sdc

GRID2                       ENABLED   /dev/sde

GRID3                       ENABLED   /dev/sdd

node 'db02':

--------------------------------------------------------------------------------

Label                     Filtering   Path

================================================================================

DATA1                       ENABLED   /dev/sdf

DATA2                       ENABLED   /dev/sdg

DATA3                       ENABLED   /dev/sdh

GRID1                       ENABLED   /dev/sdc

GRID2                       ENABLED   /dev/sde

GRID3                       ENABLED   /dev/sdd

[grid@db01 ~]$

 

/dev/sdc、/dev/sdd、/dev/sde で +GRID という ASM Disk Group、

/dev/sdf、/dev/sdg、/dev/sdh で +DATA という ASM Disk Group を構成してあります。

今回の例では微妙な感じになっていますが、/dev/sd? のデバイス名は永続的なものではないので、

Linux OS の再起動で別の名前に変わったりします。

仮想ハードディスクと ゲストOSのデバイス名をうまく対応させるには

最初にディスク認識させたときに識別して ASMFD のラベル付けをする必要があります。

[grid@db01 ~]$ export ORACLE_SID=+ASM1

[grid@db01 ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 12.2.0.1.0 Production on 日 3月 18 03:20:34 2018

 

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

 

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

SQL> set line 120

SQL> col label for a10

SQL> col path for a10

SQL> col DG_NAME for a10

SQL> select dg.NAME as DG_NAME,d.DISK_NUMBER,LABEL,PATH,d.TOTAL_MB from v$asm_disk d,v$asm_diskgroup dg where d.GROUP_NUMBER = dg.GROUP_NUMBER and d.TOTAL_MB > 0;

 

DG_NAME    DISK_NUMBER LABEL      PATH         TOTAL_MB

---------- ----------- ---------- ---------- ----------

GRID                 0 GRID1      AFD:GRID1       30720

GRID                 1 GRID2      AFD:GRID2       30720

GRID                 2 GRID3      AFD:GRID3       30720

DATA                 0 DATA1      AFD:DATA1       30720

DATA                 1 DATA2      AFD:DATA2       30720

DATA                 2 DATA3      AFD:DATA3       30720

 

6 rows selected.

 

SQL>

 

ちなみに、2 ノードでの 12c R2 RAC では下記のようなリソース構成になります。

[grid@db01 ~]$ crsctl stat res -t

--------------------------------------------------------------------------------

Name           Target  State        Server                   State details

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.ASMNET1LSNR_ASM.lsnr

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.DATA.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.GRID.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.LISTENER.lsnr

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.chad

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.net1.network

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.ons

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.proxy_advm

               OFFLINE OFFLINE      db01                     STABLE

               OFFLINE OFFLINE      db02                     STABLE

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.LISTENER_SCAN1.lsnr

      1        ONLINE  ONLINE       db01                     STABLE

ora.MGMTLSNR

      1        ONLINE  ONLINE       db01                     169.254.131.137 192.

                                                             168.41.171,STABLE

ora.asm

      1        ONLINE  ONLINE       db01                     Started,STABLE

      2        ONLINE  ONLINE       db02                     Started,STABLE

      3        OFFLINE OFFLINE                               STABLE

ora.cvu

      1        ONLINE  ONLINE       db01                     STABLE

ora.db01.vip

      1        ONLINE  ONLINE       db01                     STABLE

ora.db02.vip

      1        ONLINE  ONLINE       db02                     STABLE

ora.mgmtdb

      1        ONLINE  ONLINE       db01                     Open,STABLE

ora.orcl.db

      1        ONLINE  ONLINE       db01                     Open,HOME=/u01/app/o

                                                             racle/product/12.2.0

                                                             /dbhome_1,STABLE

      2        ONLINE  ONLINE       db02                     Open,HOME=/u01/app/o

                                                             racle/product/12.2.0

                                                             /dbhome_1,STABLE

ora.qosmserver

      1        ONLINE  ONLINE       db01                     STABLE

ora.scan1.vip

      1        ONLINE  ONLINE       db01                     STABLE

--------------------------------------------------------------------------------

[grid@db01 ~]$

 

このなかで、共有ディスクの ASM Disk Group (+DATA、+GRID)のリソースは下記の部分です。

[grid@db01 ~]$ crsctl stat res -w '(TYPE = ora.diskgroup.type)' -t

--------------------------------------------------------------------------------

Name           Target  State        Server                   State details

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.DATA.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

ora.GRID.dg

               ONLINE  ONLINE       db01                     STABLE

               ONLINE  ONLINE       db02                     STABLE

--------------------------------------------------------------------------------

[grid@db01 ~]$

 

以上、PowerCLI で Oracle RAC むけ VM を設定してみる話でした。

PowerCLI を利用して、Oracle RAC 用に構成した vSphere / vSAN 環境の VM の情報を確認してみます。

 

vSphere / vSAN 環境に Oracle RAC を構築する場合に、いくつか VM に RAC むけの設定をします。

RAC の構築目的によって具体的な設定値は変わりますが、たとえば下記のような設定です。

  • vNICの数や、接続するネットワークを揃える。
  • 仮想ハード ディスク の VMDK ファイルを複数の VM で共有する。
  • VMDK ファイルは EagerZeroed Thick にして「Multi Writer フラグ」を設定する。
    (参考: https://kb.vmware.com/kb/2121181
  • 共有ディスクむけに容量を 100%予約する「仮想マシン ストレージ ポリシー」を作成する。
  • Oracle RAC のクラスタに参加している VM 同士を DRS のアンチ アフィニティ ルールで分割配置する。

など・・・

 

VM の設定項目が多いため、私のラボでは何か忘れていないか気づきやすいように

PowerCLI を利用して設定確認しています。

 

下記のようなスクリプトを作成しています。

get_rac-vm_info.ps1 · GitHub

  • ファイルは UTF-8(with BOM)で保存すると無難かなとおもいます。
  • 実行するときは、PowerShell / PowerCLI のウィンドウ幅を 100 くらいにしておくとよいです。

 

今回は、Windows で PowerCLI 10.0 を利用しています。

PowerCLI> Get-Module VMware.* | select Version,Name | Sort-Object

 

Version        Name

-------        ----

10.0.0.7893910 VMware.VimAutomation.Sdk

10.0.0.7894167 VMware.VimAutomation.Storage

10.0.0.7893909 VMware.VimAutomation.Core

10.0.0.7893915 VMware.VimAutomation.Cis.Core

10.0.0.7893906 VMware.VimAutomation.Common

 

 

PowerCLI>

 

スクリプトの実行前に、vCenter に接続しておきます。

PowerCLI> Connect-VIServer vc-sv01.go-lab.jp -Force | Out-Null

 

私のラボの RAC (db01 / db02 で 2ノード構成)で情報取得してみると、下記のようになっています。

vmx-13 の仮想マシンなので、OSTyep は「Oracle Linux 7 (64-bit)」にしています。

ESXi 6.5 での Guest OS の細分化について。(Oracle Linux 7 など)

PowerCLI> .\get_rac-vm_info.ps1 db01,db02

==========================================================================================

vCPU / vRAM

 

VM   PowerState NumCpu MemoryGB HwVersion OSType

--   ---------- ------ -------- --------- ------

db01  PoweredOn      2        8 vmx-13    Oracle Linux 7 (64-bit)

db02  PoweredOn      2        8 vmx-13    Oracle Linux 7 (64-bit)

 

==========================================================================================

Cluster

 

Cluster     : vsan-cluster-01

VsanEnabled : True

HAEnabled   : True

DrsEnabled  : True

EVCMode     : intel-haswell

 

==========================================================================================

Host

 

VM   Cluster         ESXi

--   -------         ----

db01 vsan-cluster-01 hv-i22.go-lab.jp

db02 vsan-cluster-01 hv-i21.go-lab.jp

 

==========================================================================================

vNIC

 

VM   Name                 Type NetworkName          StartConnected Connected

--   ----                 ---- -----------          -------------- ---------

db01 Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True      True

db01 Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True      True

db02 Network adapter 1 Vmxnet3 dvpg-vds01-vlan-1011           True      True

db02 Network adapter 2 Vmxnet3 dvpg-vds01-vlan-4001           True      True

 

==========================================================================================

vSCSI Controller

 

VM   Name                     Type BusSharingMode UnitNumber ControllerKey

--   ----                     ---- -------------- ---------- -------------

db01 SCSI controller 0 ParaVirtual      NoSharing          3          1000

db01 SCSI controller 1 ParaVirtual      NoSharing          4          1001

db02 SCSI controller 0 ParaVirtual      NoSharing          3          1000

db02 SCSI controller 1 ParaVirtual      NoSharing          4          1001

 

==========================================================================================

vDisk

 

VM   Name        Controller GB    StorageFormat           Persistence Sharing

--   ----        ---------- --    -------------           ----------- -------

db01 Hard disk 1       1000 16             Thin            Persistent sharingNone

db01 Hard disk 2       1000 40             Thin            Persistent sharingNone

db01 Hard disk 3       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 4       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 5       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 6       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 7       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db01 Hard disk 8       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 1       1000 16             Thin            Persistent sharingNone

db02 Hard disk 2       1000 40             Thin            Persistent sharingNone

db02 Hard disk 3       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 4       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 5       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 6       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 7       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

db02 Hard disk 8       1001 30 EagerZeroedThick IndependentPersistent sharingMultiWriter

 

==========================================================================================

Share vDisk

 

vDisk : Hard disk 3

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_2.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 4

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_3.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 5

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_4.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 6

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_5.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 7

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_6.vmdk

VMs   : 2

VM    : db01,db02

 

vDisk : Hard disk 8

Name  : [vsanDatastore-01] 60c4ab5a-6c3e-ca85-29da-b8aeedea7a23/db01_7.vmdk

VMs   : 2

VM    : db01,db02

 

==========================================================================================

VM Storage Policy

 

VM   vDisk       StoragePolicy      ComplianceStatus

--   -----       -------------      ----------------

db01 Hard disk 1 vsan-policy-raid5         compliant

db01 Hard disk 2 vsan-policy-raid5         compliant

db01 Hard disk 3 vsan-policy-rac-01        compliant

db01 Hard disk 4 vsan-policy-rac-01        compliant

db01 Hard disk 5 vsan-policy-rac-01        compliant

db01 Hard disk 6 vsan-policy-rac-01        compliant

db01 Hard disk 7 vsan-policy-rac-01        compliant

db01 Hard disk 8 vsan-policy-rac-01        compliant

db02 Hard disk 1 vsan-policy-raid5         compliant

db02 Hard disk 2 vsan-policy-raid5         compliant

db02 Hard disk 3 vsan-policy-rac-01        compliant

db02 Hard disk 4 vsan-policy-rac-01        compliant

db02 Hard disk 5 vsan-policy-rac-01        compliant

db02 Hard disk 6 vsan-policy-rac-01        compliant

db02 Hard disk 7 vsan-policy-rac-01        compliant

db02 Hard disk 8 vsan-policy-rac-01        compliant

 

==========================================================================================

Storage Policy Setting

 

StoragePolicy      Capability                                                 Value

-------------      ----------                                                 -----

vsan-policy-rac-01 VSAN.proportionalCapacity                                    100

vsan-policy-rac-01 VSAN.hostFailuresToTolerate                                    1

vsan-policy-rac-01 VSAN.stripeWidth                                               2

vsan-policy-raid5  VSAN.replicaPreference      RAID-5/6 (Erasure Coding) - Capacity

vsan-policy-raid5  VSAN.proportionalCapacity                                      0

 

==========================================================================================

DRS Affinity Rule

 

Cluster   : vsan-cluster-01

Name      : drs-anti-affinity-rac-01

Type      : VMAntiAffinity

Mandatory : False

Enabled   : True

VMs       : db01,db02

 

PowerCLI>

 

vSAN 環境に RAC を構築した場合でも VM の構成は VMFS データストアの場合とあまり変わりませんが、

VMDK は EagerZeroed Thick にして、さらに「仮想マシン ストレージ ポリシー」で

オブジェクトの容量予約を 100% にしておきます。

 

Oracle RAC では(ゲスト)OS の iSCSI Initiator から

直接接続した iSCSI デバイスを共有ディスクとして利用することもできます。

一方、vSAN に iSCSI Target を提供する機能がありますが、

現時点(2018年3月)では物理マシンでの RAC のみを対象としているようです。

そして vSAN では RDM には対応しないので

ゲスト OS で RAC を構築するときには VMDK 共有をすることになるはずです。

 

下記の KB に制限が記載されていました。

 

vSAN 6.5 iSCSI デバイスを使用するためのベスト プラクティス (2151966)

https://kb.vmware.com/kb/2151966

制限

  • 現在、Microsoft クラスタの実装ではサポートされていません。
  • 現在、他の vSphere ホストのターゲットとしての使用はサポートされていません。
  • 現在、サードパーティのハイパーバイザーでの使用はサポートされていません。
  • 現在、仮想マシンでの使用はサポートされていません。

 

また、VMware から vSAN + Oracle RAC についてのドキュメントも公開されているので、

本番環境(デモ/開発むけのラボ環境ではなく)での構築となる場合には確認しておくとよいと思います。

 

Oracle Real Application Clusters on VMware vSAN

https://storagehub.vmware.com/t/vmware-vsan/oracle-real-application-clusters-on-vmware-virtual-san/

 

以上、PowerCLI を利用した Oracle RAC VM の情報取得例でした。

前回、HCIBench の設定を Ansible で自動化してみる話を投稿しました。

HCIBench の設定を Ansible で自動化してみる。

 

今回は、設定後のテスト実行にコマンドライン / Ansible を利用してみます。

 

HCIBench のコマンドラインでのテスト実行。

HCIBench をコマンドラインで実行する方法については、

下記のブログで紹介されています。

Use HCIBench Like a Pro – Part 2 - Virtual Blocks

 

まず、HCIBench の Photon OS に SSH でログインします。

HCIBench の仮想アプライアンスは「hci-bench02.go-lab.jp」というアドレスで用意しています。

[gowatana@client01 ~]$ ssh -l root hci-bench02.go-lab.jp

############################################

#                                          #

#        Welcome to HCIBench 1.6.6         #

#                                          #

############################################

root@photon-HCIBench [ ~ ]#

 

今回は、HCIBench で使用する設定ファイルは配置ずみです。

root@photon-HCIBench [ ~ ]# cat /opt/automation/conf/perf-conf.yaml

vc: 'vc-sv01.go-lab.jp'

vc_username: 'hci-bench-connect'

vc_password: 'パスワード'

datacenter_name: 'dc01'

cluster_name: 'vsan-cluster-01'

network_name: 'dvpg-vds01-vlan-1012'

static_enabled: false

reuse_vm: false

datastore_name:

- 'vsanDatastore-01'

deploy_on_hosts: false

hosts:

host_username:

host_password:

vm_prefix: 'vdbench'

easy_run: false

clear_cache: false

number_vm: 2

number_data_disk: 2

size_data_disk: 1

self_defined_param_file_path: '/opt/tmp/tmp20180315144339'

output_path: 'TEST_vsan-cluster-01_case-101'

warm_up_disk_before_testing: 'NONE'

testing_duration:

cleanup_vm: false

root@photon-HCIBench [ ~ ]# file /opt/automation/vdbench-param-files/*

/opt/automation/vdbench-param-files/vdb-case-101: ASCII text

root@photon-HCIBench [ ~ ]#

 

Web UI にある「Varidate」ボタンにかわるスクリプトの実行してみます。

ちなみに出力結果をみると、テスト対象が 6 ノード vSAN クラスタだということもわかります。

※ここでのタイムスタンプは JST ではないので読みかえることになります。

root@photon-HCIBench [ ~ ]# /opt/automation/pre-validate-config.sh

2018-03-15 15:01:07 -0700: Validating VC IP and Crendetial...

2018-03-15 15:01:10 -0700: VC IP and Credential Validated

2018-03-15 15:01:10 -0700: Validating Datacenter dc01...

2018-03-15 15:01:11 -0700: Datacenter dc01 Validated

2018-03-15 15:01:11 -0700: Validating Cluster vsan-cluster-01...

2018-03-15 15:01:12 -0700: Cluster vsan-cluster-01 Validated

2018-03-15 15:01:12 -0700: Cluster vsan-cluster-01 has DRS mode: fullyAutomated

2018-03-15 15:01:12 -0700: Validating If Hosts in Cluster vsan-cluster-01 Could be Connected...

2018-03-15 15:01:25 -0700: All Hosts could be Connected

2018-03-15 15:01:25 -0700: Validating If Any Hosts in Cluster vsan-cluster-01 is in Maintainance Mode...

2018-03-15 15:01:26 -0700: All the Hosts in Cluster vsan-cluster-01 are not in Maitainance Mode

2018-03-15 15:01:26 -0700: Validating Network dvpg-vds01-vlan-1012...

2018-03-15 15:01:28 -0700: Network dvpg-vds01-vlan-1012 Validated

2018-03-15 15:01:28 -0700: Checking If Network dvpg-vds01-vlan-1012 is accessible from all the hosts of vsan-cluster-01...

2018-03-15 15:01:29 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i22.go-lab.jp

2018-03-15 15:01:30 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i25.go-lab.jp

2018-03-15 15:01:31 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i21.go-lab.jp

2018-03-15 15:01:31 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i24.go-lab.jp

2018-03-15 15:01:32 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i26.go-lab.jp

2018-03-15 15:01:33 -0700: Network dvpg-vds01-vlan-1012 is accessible from host hv-i23.go-lab.jp

2018-03-15 15:01:33 -0700: Network dvpg-vds01-vlan-1012 is accessible from all the hosts of vsan-cluster-01

2018-03-15 15:01:33 -0700: Validating Type of Network dvpg-vds01-vlan-1012...

2018-03-15 15:01:34 -0700: Network dvpg-vds01-vlan-1012 Type is DistributedVirtualPortgroup

2018-03-15 15:01:34 -0700: Validating cluster inter-connectivity...

2018-03-15 15:03:20 -0700: Cluster inter-connectivity validated

2018-03-15 15:03:23 -0700: Validating Datastore vsanDatastore-01...

2018-03-15 15:03:24 -0700: Datastore vsanDatastore-01 Validated

2018-03-15 15:03:24 -0700: Checking Datastore vsanDatastore-01 type...

2018-03-15 15:03:24 -0700: Datastore vsanDatastore-01 type is vsan

2018-03-15 15:03:24 -0700: Checking If Datastore vsanDatastore-01 is accessible from all the hosts of vsan-cluster-01...

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i22.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i25.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i21.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i24.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i26.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from host hv-i23.go-lab.jp

2018-03-15 15:03:25 -0700: Datastore vsanDatastore-01 is accessible from all the hosts of vsan-cluster-01

2018-03-15 15:03:25 -0700: Validating If VSAN Enabled in Cluster vsan-cluster-01...

2018-03-15 15:03:30 -0700: VSAN is Enabled in Cluster vsan-cluster-01, the VSAN Datastore name is vsanDatastore-01, capacity is 5589 GB and freespace is 4238 GB, the default policy is vsan-policy-raid5

2018-03-15 15:03:31 -0700: Deploy on hosts: False. Skip validating hosts...

2018-03-15 15:03:31 -0700: Validating Vdbench binary and the workload profiles...

------------------------------------------------------------------------------

2018-03-15 15:03:32 -0700: All the config has been validated, please go ahead to kick off testing

------------------------------------------------------------------------------

Caution:

You have 2 VM Have the Same Prefix as vdbench, Please Make Sure the VMs are OK to be Deleted Otherwise Please Change the VM Name Prefix.

------------------------------------------------------------------------------

root@photon-HCIBench [ ~ ]#

 

ちょうどテスト VM がすでにあるという注意メッセージがあるので、

VM のクリーンアップをしてみます。

root@photon-HCIBench [ ~ ]# /opt/automation/cleanup-vm.sh

Starting Cleaning VDBench Guest VMs...

VDBench Guest VMs Deleted

root@photon-HCIBench [ ~ ]#

 

ベンチマーク テストを実行します。

コマンドラインを実行すると、プロンプトがすくに戻されます。

root@photon-HCIBench [ ~ ]# /opt/automation/start-testing.sh

root@photon-HCIBench [ ~ ]#

 

実行の様子は、下記のようにログファイルから確認できます。

root@photon-HCIBench [ ~ ]# tail -f /opt/automation/logs/test-status.log

Deployment Started.

Verifying If VMs are Accessible

Deployment Successfully Finished.

I/O Test Started.

Started Testing vdb-case-101

Done Testing vdb-case-101

I/O Test Finished.

Testing Finished

 

テストが終了すると、下記のようなログファイルが出力されています。

root@photon-HCIBench [ ~ ]# ls -ltr /opt/automation/logs/

total 44

drwxrwxr-x 2 root root  4096 Mar 15 15:01 prevalidation

-rw-rw-r-- 1 root root   390 Mar 15 15:20 vm-cleanup.log

-rw-rw-r-- 1 root root 16321 Mar 15 15:24 vc-vc-sv01.go-lab.jp-vs-vm-deploy-0.log

-rw-rw-r-- 1 root root   696 Mar 15 15:24 deploy.log

-rw-rw-r-- 1 root root  6379 Mar 15 15:31 io-test-vdb-case-101.log

-rw-rw-r-- 1 root root  1184 Mar 15 15:31 vdbench-testing.log

-rw-rw-r-- 1 root root   195 Mar 15 15:31 test-status.log

root@photon-HCIBench [ /opt/automation/logs ]#

 

テストの進行は Web ブラウザからでも確認できます。

URL は下記のようになっています。

http://  HCIBench のアドレス /hcibench_logs/test-status.log

hci-bench-start-testing-01.png

 

「Testing Finished」があると、ベンチマークが終了しています。

通常の Web UI からの実行時と同様に、レポートが生成されています。

hci-bench-start-testing-02.png

 

レポートは、下記のようにまとめて採取することもできます。

[gowatana@client01 work]$ scp -pr root@hci-bench02.go-lab.jp:/opt/output/results/TEST_vsan-cluster-01_case-101 .

[gowatana@client01 work]$ ls TEST_vsan-cluster-01_case-101/

vdb-case-101-1521152685  vdb-case-101-1521152685-res.txt

 

HCIBench の Ansible でのテスト実行。

Ansible でテストを実行する場合は、shell モジュールなどが利用できます。

ここでは、例として Ansible の Playbook に記載したコマンド ラインを実行してみます。

 

まず、HCIBench の ホスト(ホスト名か、アドレスか)を記載した

Ansible のインベントリファイルを用意しておきます。

[gowatana@client01 hci-bench-config]$ cat hosts

hci-bench01.go-lab.jp

 

そして、下記のような YAML ファイルを用意しています。

Playbook の内容はただ 1行のコマンドラインを実行するだけなので

これだけだと Ansible を利用する意義はありません。

しかし、すでに Ansible を活用していたり、HCIBench の設定にも Ansible を利用するような場合は

環境の構成管理からベンチマーク テストの実行までツールを一貫させることができると思います。

[gowatana@client01 hci-bench-config]$ cat start-testing.yml

---

- name: HCI Bench start testing

  hosts: all

  remote_user: root

 

  tasks:

  - name: start testing

    shell: /opt/automation/start-testing.sh

 

 

ansible-playbook コマンドを実行します。

[gowatana@client01 hci-bench-config]$ ansible-playbook -i hosts start-testing.yml

 

PLAY [HCI Bench start testing] *************************************************

 

TASK [Gathering Facts] *********************************************************

ok: [hci-bench01.go-lab.jp]

 

TASK [start testing] ***********************************************************

changed: [hci-bench01.go-lab.jp]

 

PLAY RECAP *********************************************************************

hci-bench01.go-lab.jp      : ok=2    changed=1    unreachable=0    failed=0

 

[gowatana@client01 hci-bench-config]$

 

今回の Playbook にはテストの進行確認は含めていないため、curl で確認してしまいます。

[gowatana@client01 hci-bench-config]$ curl -s http://hci-bench01.go-lab.jp/hcibench_logs/test-status.log

Deployment Started.

 

ベンチマークテストの進行状況はログ出力され・・・

[gowatana@client01 hci-bench-config]$ curl -s http://hci-bench01.go-lab.jp/hcibench_logs/test-status.log

Deployment Started.

Verifying If VMs are Accessible

Deployment Successfully Finished.

I/O Test Started.

 

「Testing Finished」が出力されれば終了です。

[gowatana@client01 hci-bench-config]$ curl -s http://hci-bench01.go-lab.jp/hcibench_logs/test-status.log

Deployment Started.

Verifying If VMs are Accessible

Deployment Successfully Finished.

I/O Test Started.

I/O Test Finished.

Testing Finished

 

HCIBench 自体は vSAN に限らず、vSphere(vCenter / ESXi)環境であれば利用できるので、

できるだけベンチマーク 環境を自動化しておくと便利ではないかなと思います。

また、このような仕組みを利用すれば、構築作業後の確認や

他のベンチマークツールとの連携などにも利用できそうかなと思います。

 

これまでの HCIBench 利用の工夫については、下記もどうぞ。

HCIBench の OVA を PowerCLI でデプロイする。

HCIBench の設定を Ansible で自動化してみる。

 

以上、HCIBench のベンチマーク テストの実行を工夫してみる話でした。

最近 PowerCLI 10.0 が公開されましたが、とうとう vmware/powerclicore の

Docker コンテナもイメージもアップデートされました。

PowerCLI Docker Image Updated - VMware PowerCLI Blog - VMware Blogs

 

PowerCLI 10.0 は Linux / macOS もサポートされるようになり、

少し前に Linux で実行してみた投稿をしてみましたが・・・

Linux で PowerCLI 10.0 をためしてみる。

 

今回は macOS で PowerCLI 10.0 の Docker コンテナを起動してみます。

 

実行環境。

普段あまり使っていない MacBook なのでバージョンは若干古いかもしれません。

 

macOS です。

gomac:~ gowatana$ sw_vers

ProductName: Mac OS X

ProductVersion: 10.13.2

BuildVersion: 17C205

 

Docker です。

gomac:~ gowatana$ docker version

Client:

Version:      17.09.1-ce

API version:  1.32

Go version:   go1.8.3

Git commit:   19e2cf6

Built:        Thu Dec  7 22:22:25 2017

OS/Arch:      darwin/amd64

 

Server:

Version:      17.09.1-ce

API version:  1.32 (minimum version 1.12)

Go version:   go1.8.3

Git commit:   19e2cf6

Built:        Thu Dec  7 22:28:28 2017

OS/Arch:      linux/amd64

Experimental: false

 

コンテナの起動。

コンテナのイメージは、vmware/powerclicore です。

https://hub.docker.com/r/vmware/powerclicore/

 

イメージを pull します。タグは特に指定せず latest です。

gomac:~ gowatana$ docker image pull vmware/powerclicore

Using default tag: latest

latest: Pulling from vmware/powerclicore

e9b1ffebdf09: Pull complete

1ca0671214e4: Pull complete

e2054d0e7b6e: Pull complete

9e5896375981: Pull complete

4fda4ed0aa8e: Pull complete

ae595f021807: Pull complete

2223c2963494: Pull complete

c0625c88535b: Pull complete

Digest: sha256:4c19d7f6e5b460cdcea403977f1e8491f5c28c81a60e84dddf9d65921ba3ac51

Status: Downloaded newer image for vmware/powerclicore:latest

 

コンテナを起動します。

事情により --dns でコンテナが参照する DNS サーバのアドレスを指定しています。

( macOS で利用している DHCP と自宅ラボの DNS サーバのアドレスがあっていないので・・・)

gomac:~ gowatana$ docker container run -it --rm --dns=192.168.1.254 vmware/powerclicore

PowerShell v6.0.1

Copyright (c) Microsoft Corporation. All rights reserved.

 

https://aka.ms/pscore6-docs

Type 'help' to get help.

 

PS /root>

 

コンテナは、Photon OS 2.0 をベースにされています。

PS /root> cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

 

自宅ラボの vCenter は証明書を入れ替えていないので、

証明書エラーを無視してしまいます。

PS /root> Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore -Confirm:$false

 

PowerShell モジュールの様子です。

Cmds 列は、それぞれのモジュールに含まれるコマンド数のはずです。

PS /root> Get-Module -ListAvailable | select @{N="Cmds";E={$_.ExportedCommands.Count}},Version,Name | Sort-Object Name

 

Cmds Version        Name

---- -------        ----

   1 0.0            apply-hardening

   3 0.0            Backup-VCSA

   9 0.0            ContentLibrary

   6 0.0            DatastoreFunctions

   1 0.0            Get-NewAndRemovedVMs

   1 0.0            Get-NICDetails

   1 0.0            Get-VMmaxIOPS

   1 0.0            Konfig-ESXi

   2 3.0.0.0        Microsoft.PowerShell.Host

  43 3.1.0.0        Microsoft.PowerShell.Management

   6 3.0.0.0        Microsoft.PowerShell.Security

103 3.1.0.0        Microsoft.PowerShell.Utility

   8 1.0.0.0        NSXT

  13 1.1.7.0        PackageManagement

300 3.0.1091       PowerNSX

  29 1.6.0          PowerShellGet

119 3.1.1          PowervRA

   7 0.0            ProactiveHA

  71 0.0            PSDesiredStateConfiguration

   6 1.2            PSReadLine

   1 0.0            PSvLIMessage

   1 0.0            Recommend-Sizing

   1 0.0            Set-CBT

   1 0.0            Start-UNMAP

  16 0.0            VAMI

   5 0.0            vCenter.Alarms

  10 0.0            vCenterManualMigration

   5 0.0            VCHA

  11 1.0            Vi-Module

   2 0.0            VMCPFunctions

   3 1.0.0.0        VMFSIncrease

  11 0.0            VMToolsManagement

   5 1.0.0          VMware-vCD-Module

   3 1.0.2          VMware-vCD-TenantReport

  27 6.5.2.7812840  VMware.DeployAutomation

  15 1.0.0.0        VMware.Hosted

  12 6.5.2.7812840  VMware.ImageBuilder

   0 10.0.0.7895300 VMware.PowerCLI

   3 10.0.0.7893915 VMware.VimAutomation.Cis.Core

106 10.0.0.7893901 VMware.VimAutomation.Cloud

   0 10.0.0.7893906 VMware.VimAutomation.Common

302 10.0.0.7893909 VMware.VimAutomation.Core

   1 6.5.4.7567193  VMware.VimAutomation.HA

   2 7.1.0.7547311  VMware.VimAutomation.HorizonView

   1 10.0.0.7893904 VMware.VimAutomation.License

   3 10.0.0.7893913 VMware.VimAutomation.Nsxt

   4 10.0.0.7893924 VMware.VimAutomation.PCloud

   2 10.0.0.7893910 VMware.VimAutomation.Sdk

   2 10.0.0.7893900 VMware.VimAutomation.Srm

  92 10.0.0.7894167 VMware.VimAutomation.Storage

   1 1.2.0.0        VMware.VimAutomation.StorageUtility

  32 10.0.0.7893903 VMware.VimAutomation.Vds

   5 10.0.0.7893902 VMware.VimAutomation.Vmc

  12 10.0.0.7893921 VMware.VimAutomation.vROps

  16 1.2.0          VMware.VMC

  19 1.0            VMware.VMEncryption

  19 6.5.1.7862888  VMware.VumAutomation

   3 0.0            vSphere_Hardening_Assess_VM_v1a

 

PS /root>

 

Dockerfile を見ると、PowerNSX と PowervRA もインストールされていることがわかります。

そして、vSAN むけのモジュールも PowerCLI に含まれています。

powerclicore/Dockerfile at master · vmware/powerclicore · GitHub

 

vCenter / NSX Manger に接続してみる。

それでは vCenter「vc-sv01.go-lab.jp」に接続します。

すでに InvalidCertificateAction の設定をしているので、エラーが抑止されています。

PS /root> Connect-VIServer vc-sv01.go-lab.jp

Specify Credential

Please specify server credential

User: gowatana

Password for user gowatana: **********

 

 

Name                           Port  User     

----                           ----  ----

vc-sv01.go-lab.jp              443   GO-LAB\gowatana

 

 

PS /root>

 

下記のように vSAN むけのコマンドも実行できます。

PS /root> Get-VsanClusterConfiguration | Sort-Object Cluster

 

 

Cluster              VsanEnabled  IsStretchedCluster   Last HCL Updated

-------              -----------  ------------------   ----------------

ha-cluster-01        False        False

ha-cluster-02        False        False

vsan-cluster-01      True         False                01/28/2018 12:01:23

vsan-cluster-02      True         False                01/28/2018 12:01:23

vsan-cluster-03      True         True                 01/28/2018 12:01:23

work-cluster-01      False        False

 

PS /root>

 

PowerNSX も含まれています。

NSX Manager に接続してみました。

PS /root> Connect-NsxServer -vCenterServer vc-sv01.go-lab.jp

 

PowerShell credential request

vCenter Server SSO Credentials

User: gowatana

Password for user gowatana: **********

 

Using existing PowerCLI connection to 192.168.1.95

 

 

Version             : 6.4.0

BuildNumber         : 7564187

Credential          : System.Management.Automation.PSCredential

Server              : 192.168.1.140

Port                : 443

Protocol            : https

UriPrefix           :

ValidateCertificate : False

VIConnection        : vc-sv01.go-lab.jp

DebugLogging        : False

DebugLogfile        : \PowerNSXLog-gowatana@-2018_03_15_11_10_47.log

 

 

PS /root>

 

macOS 自体に PowerShell / PowerCLI 10.0 をインストールすることも可能になりましたが、

Docker コンテナであれば PowerShell モジュールのインストールよりも、さらに手軽に実行できるはずです。

また、多くの PowerShell モジュールがインストールされてカオス環境になることを避けたり、

将来的に複数の PowerCLI バージョンをきれいに使い分けたり、といった使い方ができそうです。

 

以上、PowerCLI 10.0 の Docker コンテナを起動してみる話でした。

HCIBench の利用方法を模索しているなかで Ansible による設定自動化をこころみたので

アイデアを残しておこうと思います。

 

HCIBench は、仮想アプライアンスをデプロイしたあとに、Web UI からテスト対象の設定をしたり

内部で利用している vdbench のパラメータファイルを用意したりする必要があります。

 

HCIBench のデプロイについては

以前に PowerCLI で OVA をデプロイするアイデアを投稿したのでこちらもどうぞ。

HCIBench の OVA を PowerCLI でデプロイする。

 

デプロイ後の設定は、設定ファイルを直接編集することができます。

HCIBench の仮想アプライアンスの Photon OS にログインすると、

下記のようなファイルが配置されています。

  • 設定内容は適当なので、ここでは雰囲気をお伝えできればと・・・
  • 一度 Web UI で設定を完了すると、よい perf-conf.yaml のテンプレートが取得できると思います。

root@photon-HCIBench [ ~ ]# cat /opt/automation/conf/perf-conf.yaml

vc: 'vc-sv01.go-lab.jp'

vc_username: 'hci-bench-connect'

vc_password: 'パスワード'

datacenter_name: 'dc01'

cluster_name: 'vsan-cluster-01'

network_name: 'dvpg-vds01-vlan-1012'

static_enabled: true

reuse_vm: false

datastore_name:

- 'vsanDatastore-01'

deploy_on_hosts: false

hosts:

host_username:

host_password:

easy_run: false

clear_cache: false

number_vm: 2

number_data_disk: 2

size_data_disk: 10

self_defined_param_file_path: '/opt/tmp/tmp20180210190537'

output_path: 'Test_vsanDatastore-01_take01'

warm_up_disk_before_testing: 'NONE'

testing_duration:

cleanup_vm: false

 

このファイルの設定などを、Ansible に置き換えてみます。

 

Ansible 実行環境の準備。

私の自宅ラボでは、Linux に Ansible の環境を用意しています。

[gowatana@client01 ~]$ cat /etc/oracle-release

Oracle Linux Server release 7.4

[gowatana@client01 ~]$ ansible --version

ansible 2.3.1.0

  config file = /home/gowatana/.ansible.cfg

  configured module search path = Default w/o overrides

  python version = 2.7.5 (default, May 29 2017, 20:42:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

 

Ansible の Playbook の管理には、Git(GitHub の)を利用しています。

実際に利用しているものは荒れているので非公開にしていますが、下記のような感じのものです。

GitHub - gowatana/hci-bench-config-sample

 

ある程度の環境設定(vCenter の接続情報など)をもったブランチ(ここでは master を利用)

を用意して、テストごとにそこからさらにブランチを作成して利用しています。

[gowatana@client01 hci-bench-config]$ git branch

  ha-cluster-03-nvme

  ha-cluster-03-ssd

  ha-cluster-04-ssd-02

* master

  vsan-cluster-01

  vsan-cluster-02

  vsan-cluster-03_case-002

 

Ansaible で利用する Playbook やソフトウェアは、下記のように配置しています。

  • files/vdbench-param-files ディレクトリ配下に、vdbench のパラメータファイルを作成して配置します。
  • files/conf/perf-conf.yaml.j2 が、HCIBench の perf-conf.yaml のテンプレートになります。
  • oracle/ ディレクトリ配下には、vdbench のバイナリ(vdbench~.zip)を ORACLE のサイトからダウンロードして配置します。
    ORACLE の vdbench のバイナリも Playbook で配布しますが、Git のリポジトリからは除外しています。
    (ライセンスの都合上)
  • vars/vsphere.yml には、vCenter への接続情報などを記載しています。
    今回は HCIBench むけに hci-bench-connect というユーザを用意しています。
  • vCenter 接続用のパスワードは別に、vars/vault/pass_hci-bench-connect.yml に記載しています。
  • これらの変更したら、ディレクトリ直下にある setup.yml を編集します。
    この YAML ファイルを ansible-playbook コマンドで指定します。

[gowatana@client01 hci-bench-config-sample]$ LANG=C tree

.

|-- README.md

|-- files

|   |-- conf

|   |   `-- perf-conf.yaml.j2

|   `-- vdbench-param-files

|       |-- vdb-case-101

|       `-- vdb-case-102

|-- hosts

|-- oracle

|   |-- README

|   `-- vdbench50406.zip

|-- setup.yml

`-- vars

    |-- vault

    |   |-- README.md

    |   `-- pass_hci-bench-connect.yml

    `-- vsphere.yml

 

6 directories, 11 files

 

vars/vsphere.yml の内容は下記だけです。

[gowatana@client01 hci-bench-config-sample]$ cat vars/vsphere.yml

---

 

vc_address:    vc-sv01.go-lab.jp

vc_user:       hci-bench-connect

 

 

vCenter 接続用のパスワードの管理には、下記のように Ansible Vault を使用しています。

ふぃあるを編集する場合は、view ではなく「ansible-vault edit ~」といったコマンドラインになります。

[gowatana@client01 hci-bench-config-sample]$ ansible-vault view vars/vault/pass_hci-bench-connect.yml

Vault password: ★このYAMLファイルを作成した時のパスワードを入力

 

---

password: (パスワードを記載しておく)

 

 

vdbench のパラメータファイル のサンプル(vdb-case-101 など)も、

とりあえず HCIBench が動作するか確認するためだけに配置してあるので

一瞬で終了する適当なテスト パラメータになっています。

 

HCIBench 設定の実行イメージ。

Ansible での接続のために、HCIBench に SSH 公開鍵をコピーしておきます。

[gowatana@client01 ~]$ ssh-copy-id root@hci-bench02.go-lab.jp

 

接続確認です。

[gowatana@client01 ~]$ ansible -i hosts -u root -m ping hci-bench02.go-lab.jp

hci-bench02.go-lab.jp | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

[gowatana@client01 ~]$

 

Anaible 実行にかかわるファイルを配置します。

今回は、サンプルを GitHub をダウンロード(git clone)しています。

[gowatana@client01 ~]$ git clone https://github.com/gowatana/hci-bench-config-sample.git

[gowatana@client01 ~]$ cd hci-bench-config-sample/

 

新しいテスト実施の準備としてブランチを作成します。

[gowatana@client01 hci-bench-config-sample]$ git checkout -b vsan-cluster-01_case-101

Switched to a new branch 'vsan-cluster-01_case-101'

 

設定編集、パラメータファイルの追加、編集などを実施します。

vCenter のログインパスワードを指定するファイルも追加します。

vdbench ソフトウェアの zip ファイル、パラメータファイルなども配置します。

(ここでは、これらの手順記載は省略しています)

 

Ansible のインベントリ ファイルに HCIBench 仮想アプライアンスのホストを記載しておきます。

[gowatana@client01 hci-bench-config-sample]$ cat hosts

hci-bench02.go-lab.jp

 

HCIBench の設定ファイルなどを編集します。

最初のうちは Web UI で生成された perf-conf.yaml を scp などで取得して

それをもとに修正したほうがうまくいきます。

そして 適宜、git でファイル管理しておきます。

[gowatana@client01 hci-bench-config-sample]$ vi files/conf/perf-conf.yaml.j2

[gowatana@client01 hci-bench-config-sample]$ git add files/conf/perf-conf.yaml.j2

[gowatana@client01 hci-bench-config-sample]$ git commit -m "set test parameters."

[gowatana@client01 hci-bench-config-sample]$ git push origin vsan-cluster-01_case-101

 

下記のように、パラメータを変更していきます。

他にも VM 数、ディスク数、時間などを変更したり、 vdbench のパラメータ ファイルを追加、編集したりします。

https://github.com/gowatana/hci-bench-config-sample/commit/635d691963b02417a53d07b288c85d99afc0b023

 

それでは、HCIBench を設定します。

ここでは「--ask-vault-pass」をつけて、Ansible Vault のパスワードを入力します。

[gowatana@client01 hci-bench-config-sample]$ ansible-playbook -i hosts --ask-vault-pass setup.yml

 

実行の様子は下記のような感じです。

hci-bench-ansible-setting-01.png

 

HCIBench の Web UI にログインすると、すでに設定されている状態になります。

ただし、vdbench のパラメータ ファイルを複数指定していると、Web UI でも選択が必要です。

また、設定ファイルがうまく記載できていないと、デフォルト値や空欄の箇所があったりします。

テストを実行する前に「Save Configuration」と「Validate」をクリックしておきます。

hci-bench-ansible-setting-02.png

 

ここで、何か不足があったら コンフィグを修正して、再び ansible-playbook で修正します。

(状況によっては、Web UI で直接変更して、あとで Playbook に反映でも・・・)

その都度、Web ブラウザは更新したほうがよさそうです。

 

「Test」でテストを開始します。

hci-bench-ansible-setting-03.png

 

ファイルの編集個所やファイル管理の手順を精査することで

ベンチマーク テストの効率や安定性を向上させられるのではないかと考えられます。

また vSAN 環境ではクラスタあたりのデータストアが 1つに限定されていたりと構成に特徴があるので、

変数の管理にも、さらに工夫ができそうな気がします。

まだ試行錯誤の途中なので、ひきつづき工夫していきたいと思います。

 

以上、HCIBench の設定に Ansible を取り入れてみる話でした。

HCIBench は vSAN などのテスト自動化をするためには便利です。

 

HCIBench

https://labs.vmware.com/flings/hcibench

 

しかし、複数のテストを並行させたり、複数の環境設定を保持したりといった使い方には

あまり向かないように感じます。実際にベンチマーク テストを実行する場合には、

テストの目的や利用者ごとに HCIBench 仮想アプライアンス(OVA)を

デプロイするケースがあると思います。

 

そこで、少しでもデプロイ作業を簡略化すべく、

PowerCLI で HCIBench の OVA をデプロイしてみました。

ちょうど HCIBench v1.6.6 が公開されたのでデプロイしてみます。

 

OVA ファイルは、HCIBench_1.6.6.ova を利用します。

 

今回使用するコマンドの PowerCLI モジュールはバージョン 10.0 のものです。

PowerCLI> Get-Command Get-OvfConfiguration,Import-VApp | select Name,Module,Version

 

Name                 Module                    Version

----                 ------                    -------

Get-OvfConfiguration VMware.VimAutomation.Core 10.0.0.7893909

Import-VApp          VMware.VimAutomation.Core 10.0.0.7893909

 

 

コマンドライン実行での PowerCLI デプロイ。

Get-OvfConfiguration の実行のためには、まず vCenter に接続します。
「vc-sv01.go-lab.jp」は今回のデプロイ先 vCenter です。

PowerCLI> Connect-VIServer vc-sv01.go-lab.jp -Force

 

OVF を設定するための準備をします。

PowerCLI> $ovf_config = Get-OvfConfiguration -Ovf D:\VMware\HCIBench_1.6.6.ova

PowerCLI> $ovf_config

 

====================================

OvfConfiguration: HCIBench_1.6.6.ova

 

   Properties:

   -----------

   Common

   NetworkMapping

 

 

下記のようなパラメータが必要だとわかります。

PowerCLI> $ovf_config.Common

 

Public_Network_Gateway :

Public_Network_IP      :

DNS                    :

Public_Network_Netmask :

Public_Network_Type    :

System_Password        :

 

PowerCLI> $ovf_config.NetworkMapping | fl

 

Public_Network  :

Private_Network :

 

 

今回のデプロイで指定するオブジェクトが存在しているか、事前に確認しておきます。

対象のオブジェクトがあれば Ture、なければ False です。

必要に応じて、ESXi はメンテナンスモードが解除されているか、

他にも必要なオブジェクト(クラスタ、リソースプール、フォルダなど)が作成されているか

といった確認を追加するとさらに確実になります。

PowerCLI> Get-VMHost hv-d02.go-lab.jp -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

PowerCLI> Get-VMHost hv-d02.go-lab.jp | Get-VirtualPortGroup -Name "VM Network" -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

PowerCLI> Get-VMHost hv-d02.go-lab.jp | Get-VirtualPortGroup -Name "pg-vlan-1012" -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

PowerCLI> Get-VMHost hv-d02.go-lab.jp | Get-Datastore ds_hv-d02_01 -ErrorAction:SilentlyContinue | Out-Null; echo $?

True

 

ここから、vSphere Web Client からのデプロイでは下記のように指定していたパラメータを

PowerCLI で指定していきます。

hci-bench-powercli-deploy-00.png

 

OVF のパラメータを設定します。

PowerCLI> $ovf_config.NetworkMapping.Public_Network.Value = "VM Network"

PowerCLI> $ovf_config.NetworkMapping.Private_Network.Value = "pg-vlan-1012"

PowerCLI> $ovf_config.Common.DNS.Value = "192.168.1.254"

PowerCLI> $ovf_config.Common.Public_Network_Gateway.Value = "192.168.1.1"

PowerCLI> $ovf_config.Common.Public_Network_IP.Value = "192.168.1.119"

PowerCLI> $ovf_config.Common.Public_Network_Netmask.Value = "255.255.255.0"

PowerCLI> $ovf_config.Common.Public_Network_Type.Value = "Static"

PowerCLI> $ovf_config.Common.System_Password.Value = "VMware1!"

 

パラメータがひととおり設定されたことを確認できます。

PowerCLI> $ovf_config.Common

 

Public_Network_Gateway : 192.168.1.1

Public_Network_IP      : 192.168.1.119

DNS                    : 192.168.1.254

Public_Network_Netmask : 255.255.255.0

Public_Network_Type    : Static

System_Password        : VMware1!

 

PowerCLI> $ovf_config.NetworkMapping | fl

 

Public_Network  : VM Network

Private_Network : pg-vlan-1012

 

 

OVA をデプロイします。

hci-bench02 という名前で、ESXi「hv-d02.go-lab.jp」のデータストア「ds_hv-d02_01」にデプロイします。

PowerCLI> Import-VApp -Name hci-bench02 -OvfConfiguration $ovf_config -Source $ovf_config.Source -VMHost hv-d02.go-lab.jp -Datastore ds_hv-d02_01 -StorageFormat Thin

 

デプロイが完了したら HCIBench を起動します。

PowerCLI> Get-VM hci-bench02 | Start-VM

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

hci-bench02          PoweredOn  8        8.000

 

 

このあと、Web ブラウザでアクセスして・・・

hci-bench-powercli-deploy-01.png

 

HCIBench の Web UI での設定にすすみます。

hci-bench-powercli-deploy-02.png

 

Web UI からの設定は、vExpert の kawaman さんの投稿がとても参考になります。

https://community.emc.com/people/kawaman/blog/2017/12/17/hcibench-vsan-performancetest

 

デプロイ スクリプトのサンプル。

ここまでのコマンドラインをスクリプトにまとめておくと、

同環境や、類似した環境での 2度目以降のデプロイを簡略化できるようになります。

 

今回は、下記のようなスクリプトを作成してみました。

※自宅ラボむけに目的を絞って簡易的に作成しています。

deploy_hci-bench-ova.ps1 · GitHub

# HCIBench OVA Deploy Script.

#

# Public_Network_Type は "Static" で固定。

# vCenter に接続するが、デプロイ先は ESXi を指定する。

# Usage:

#   PowerCLI> .\deploy_hci-bench-ova.ps1

 

# ------------------------------

# Setting

$ova_file_path           = "D:\VMware\HCIBench_1.6.6.ova"

$vm_name                 = "hci-bench02"

$target_vc               = "vc-sv01.go-lab.jp"

$target_esxi             = "hv-d02.go-lab.jp"

$target_pg_public        = "VM Network"

$target_pg_private       = "pg-vlan-1012"

$target_datastore        = "ds_hv-d02_01"

 

$public_network_ip       = "192.168.1.119"

$public_network_netmask  = "255.255.255.0"

$public_network_gateway  = "192.168.1.1"

$dns                     = "192.168.1.254"

 

$ova_root_password       = "VMware1!"

 

# ------------------------------

# connect VC & get OVF config.

Connect-VIServer $target_vc -Force

$ovf_config = Get-OvfConfiguration -Ovf $ova_file_path

 

# ------------------------------

# Pre Check

$pre_check = "ok"

$hv = Get-VMHost $target_esxi -ErrorAction:SilentlyContinue

$hv | Out-Null; echo $?

if($? -ne $true){"デプロイ先 ESXi を確認して下さい。"; $pre_check = "NG"}

$hv | Get-VirtualPortGroup -Name $target_pg_public -ErrorAction:SilentlyContinue | Out-Null; echo $?

if($? -ne $true){"デプロイ先 Public PG を確認して下さい。"; $pre_check = "NG"}

$hv | Get-VirtualPortGroup -Name $target_pg_private -ErrorAction:SilentlyContinue | Out-Null; echo $?

if($? -ne $true){"デプロイ先 Private PG を確認して下さい。"; $pre_check = "NG"}

$hv | Get-Datastore $target_datastore -ErrorAction:SilentlyContinue | Out-Null; echo $?

if($? -ne $true){"デプロイ先 Datastore を確認して下さい。"; $pre_check = "NG"}

 

if($pre_check -ne "ok"){"デプロイを実行せず終了します。"; exit 1}

 

# ------------------------------

# Configure & Deploy

$ovf_config.Common.Public_Network_Type.Value = "Static"

$ovf_config.NetworkMapping.Public_Network.Value = $target_pg_public

$ovf_config.NetworkMapping.Private_Network.Value = $target_pg_private

$ovf_config.Common.Public_Network_IP.Value = $public_network_ip

$ovf_config.Common.Public_Network_Netmask.Value = $public_network_netmask

$ovf_config.Common.Public_Network_Gateway.Value = $public_network_gateway

$ovf_config.Common.DNS.Value = $dns

$ovf_config.Common.System_Password.Value = $ova_root_password

 

Import-VApp -OvfConfiguration $ovf_config -Source $ovf_config.Source `

    -Name $vm_name `

    -VMHost $target_esxi `

    -Datastore $target_datastore -StorageFormat Thin |

    select Name,PowerState

 

Get-VM $vm_name | Start-VM | select Name,PowerState

 

Disconnect-VIServer $target_vc -Confirm:$false

 

そして、下記のように実行すると、以前のコマンドラインと同じデプロイが実施できます。

PowerCLI> .\deploy_hci-bench-ova.ps1

 

OVA のデプロイ作業の記録をテキスト形式で残せるようになるので、

作業内容の確認もしやすくなるかもしれません。

 

以上、HCIBench を PowerCLI でデプロイしてみる話でした。

vCenter Server Appliance(VCSA) 6.0 から、仮想アプライアンスを

vSphere Client / vSphere Web Clinet 経由ではなく専用のインストーラでデプロイするようになりました。

そして CLI ベースのインストーラも提供されています。

 

VCSA 6.5 でも、引き続き CLI デプロイができます。

vCenter Server Appliance および Platform Services Controller アプライアンスの CLI デプロイ

 

以前に VCSA 6.0 で、vCenter と Platform Services Controller(PSC) を

別サーバとして CLI デプロイする投稿をしましたが・・・

VCSA 6.0 を CLI Install してみる。(External PSC + vCenter)

 

同一サーバに配置することのほうが多いかなと思い今回は embedded PSC 構成です。

 

今回の構成。

今回は、VCSA 6.5 を CLI デプロイしてみました。

  • VCSA 6.5 U1e を使用します。
  • PSCは、vCenter と同じ VM に配置します。(embedded PSC)
  • パスワードはデプロイ時に手入力するようにしてみました。
    (しかし JSON に記載して、デプロイ後に変更したほうが楽かもしれません。)
  • デプロイは Windows 10 の PowerShell のウインドウから実行しています。

 

CLI デプロイの環境準備。

今回は MyVMware からダウンロードした下記のファイルを使用しました。

VMware-VCSA-all-6.5.0-7515524.iso

 

デプロイを実行する Windows にインストーラの ISO イメージファイルを

E: ドライブとしてマウントしています。

インストーラに含まれる下記のあたりのファイルをコピー&編集して、

実際にデプロイで使用する JSON ファイルを作成します。

PS C:\> ls E:\vcsa-cli-installer\templates\install | select Name

 

Name

----

PSC_first_instance_on_ESXi.json

PSC_first_instance_on_VC.json

PSC_replication_on_ESXi.json

PSC_replication_on_VC.json

embedded_vCSA_on_ESXi.json

embedded_vCSA_on_VC.json

vCSA_on_ESXi.json

vCSA_on_VC.json

 

 

JSON ファイルの作成では下記に注意します。

CLI デプロイ用の JSON 構成ファイルの準備

 

特に下記のあたりが要注意かなと思います。

  • UTF-8 で保存する。
  • JSON ファイルのパスは、ASCII 文字だけにする。(日本語や記号を使わないようにする)

 

JSON ファイルの内容。

今回は、下記のような JSON ファイル「C:\work\vc-sv02.json」を作成しました。

  • vCenter 経由ではなく、ESXi に直接デプロイします。最初の 1台として ESXi にデプロイすることが多いかなと思ったため。
  • デプロイ先として指定しているオブジェクトは構築ずみです。
    • デプロイ先の ESXi「hv-d01.go-lab.jp」
    • 標準ポートグループ「VM Network」
    • データストア「ds_ssd-nvme_hv-d01_01」
  • ESXi と vCenter の FQDN (~.go-lab.jp)は、DNS サーバに登録して、vCenter やデプロイ先のホストから名前解決できるようにしてあります。
  • vCenter「vc-sv02」は、最小スペック(tiny)で、Thin プロビジョニングにしています。
  • SSH のアクセスは有効化。
  • CEIP は無効化。

 

vc-sv02.json · GitHub

{

    "__version": "2.3.0",

    "__comments": "vCSA65 with an Embedded-PSC on an ESXi host.",

    "new.vcsa": {

        "esxi": {

            "hostname": "hv-d01.go-lab.jp",

            "username": "root",

            "password": "",

            "deployment.network": "VM Network",

            "datastore": "ds_ssd-nvme_hv-d01_01"

        },

        "appliance": {

            "thin.disk.mode": true,

            "deployment.option": "tiny",

            "name": "vc-sv02"

        },

        "network": {

            "ip.family": "ipv4",

            "mode": "static",

            "ip": "192.168.1.96",

            "dns.servers": [

                "192.168.1.254",

                "192.168.1.253"

            ],

            "prefix": "24",

            "gateway": "192.168.1.1",

            "system.name": "vc-sv02.go-lab.jp"

        },

        "os": {

            "password": "",

            "ssh.enable": true

        },

        "sso": {

            "password": "",

            "domain-name": "vsphere.local",

            "site-name": "site-vc-sv02"

        }

    },

    "ceip": {

        "settings": {

            "ceip.enabled": false

        }

    }

}

パラメータについては、下記に説明があります。

デプロイ構成パラメータ

 

デプロイ。

vcsa-deploy.exe が配置されているフォルダに移動しておきます。

PS C:\> cd E:\vcsa-cli-installer\win32

PS E:\vcsa-cli-installer\win32>

 

まず、JSON ファイルの内容を確認しておきます。

タイムスタンプが表示されていますが、これは JST ではなく UTC になるようです。

PS E:\vcsa-cli-installer\win32> .\vcsa-deploy.exe install --verify-only C:\work\vc-sv02.json

Run the installer with "-v" or "--verbose" to log detailed information

Execution Details:

[1] Result and Log File Information

[2] Template Syntax Validation

[3] Template Verification

[4] Gather Requirements

[5] Prechecks

[6] OVF Tool Parameter Verification

=========== [1] Result and Log File Information started at 15:50:41 ===========

Following result and log files will be generated...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\generated_install.json

============== [2] Template Syntax Validation started at 15:50:41 ==============

Validating json template syntax...

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'esxi', 'password': ★デプロイ先 ESXi のパスワードを入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'os', 'password': ★VCSA の root ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'sso', 'password': ★SSO(PSC)の Administrator ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

CEIP is not enabled because the template key 'ceip.enabled' in section 'ceip',

subsection 'settings' was set to 'false'.

Template syntax validation completed successfully.

================ [3] Template Verification started at 15:50:56 ================

Verifying template...

If an untrusted SSL certificate is installed on 'hv-d01.go-lab.jp', secure

communication cannot be guaranteed. Depending on your security policy, this

issue might not represent a security concern.

The SHA1 thumbprint of the certificate is

'9A:10:B0:B5:43:F6:A8:9D:CD:0E:95:AC:E0:A0:AB:8D:19:C2:76:B6'

Do you accept the thumbprint?

1: Accept and continue.

2: Do not accept and exit.

1 ★1を入力。

Template verification completed successfully.

=================================== 15:50:59 ===================================

Starting vCenter Server Appliance installer to deploy "vc-sv02"...

This appliance is a vCenter Server instance with an embedded Platform Services

Controller.

================= [4] Gather Requirements started at 15:50:59 =================

Gathering Requirements...

Gathering requirements completed successfully.

=================================== 15:50:59 ===================================

Generating template...

====================== [5] Prechecks started at 15:50:59 ======================

Performing prechecks...

Check target thumbprint: PASS

Check target credentials: PASS

Check Target vCenter Server appliance name: PASS

Check system type: PASS

Check target ESXi host or vCenter version: PASS

Check for OVA property availability: PASS

Check the host's configurations against the vCSA's CPU, memory and datastore

size requirements: PASS

Check VC management status of ESXi containers: PASS

Check target datastore free space: PASS

Check Single Sign-On Server identity: PASS

Check Single Sign-On Server credentials: PASS

Check whether the Platform Services Controller (PSC) is external: PASS

 

 

The following warnings were returned from the prechecks:

DRS Warning:

 

The target ESXi host 'hv-d01.go-lab.jp' is managed by vCenter Server

'192.168.1.95'.

 

If any of these hosts are in a cluster, and DRS is enabled, vMotion can take

effect and adversely impact the installation, upgrade, or migration processes.

It is recommended that you use the *_on_VC.json template file for the target

ESXi host if it is managed by a vCenter Server, and ensure the ESXi hosts you

have specified are not members of clusters with DRS set to Fully Automated

during the installation, upgrade, or migration processes.

 

Basic verification completed successfully.

=========== [6] OVF Tool Parameter Verification started at 15:51:04 ===========

Running OVF Tool parameter verification...

OVF Tool: Opening OVA source:

E:\vcsa-cli-installer\win32\..\..\vcsa\VMware-vCenter-Server-Appliance-6.5.0.14000-7515524_OVF10.ova

OVF Tool:  The manifest does not validate

OVF Tool:  Opening VI target: vi://root@hv-d01.go-lab.jp:443/

OVF Tool:  Supported disk provisioning:

OVF Tool:    monolithicSparse

OVF Tool:    monolithicFlat

OVF Tool:    thin

OVF Tool:    thick

OVF Tool:    flat

OVF Tool:    seSparse

OVF Tool:    eagerZeroedThick

OVF Tool:  Connected networks:

OVF Tool:    VM Network

OVF Tool:  Deploying to VI: vi://root@hv-d01.go-lab.jp:443/

OVF Tool: Transfer Completed

OVF Tool:  Completed successfully

OVF Tool verification completed successfully.

Verification completed successfully.

=================================== 15:51:07 ===================================

Result and Log File Information...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-50-eqkbbz\generated_install.json

PS E:\vcsa-cli-installer\win32>

 

特にエラーがなければ、デプロイを実行します。

実際にデプロイする場合は「--accept-eula」が必要です。

PS E:\vcsa-cli-installer\win32> .\vcsa-deploy.exe install --accept-eula C:\work\vc-sv02.json

Run the installer with "-v" or "--verbose" to log detailed information

Execution Details:

[1] Result and Log File Information

[2] Template Syntax Validation

[3] Template Verification

[4] Gather Requirements

[5] Prechecks

[6] OVF Tool Execution

[7] Service Installation

[8] vCenter Service Configuration

[9] vCenter Server Deployment Summary

=========== [1] Result and Log File Information started at 15:52:57 ===========

Following result and log files will be generated...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\generated_install.json

============== [2] Template Syntax Validation started at 15:52:57 ==============

Validating json template syntax...

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'esxi', 'password': ★デプロイ先 ESXi のパスワードを入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'os', 'password': ★VCSA の root ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

 

To escape the password prompt, keep pressing <Enter>.

Enter the value for 'new.vcsa', 'sso', 'password': ★SSO(PSC)の Administrator ユーザに設定するパスワードを入力。

Confirm password: ★再入力。

CEIP is not enabled because the template key 'ceip.enabled' in section 'ceip',

subsection 'settings' was set to 'false'.

Template syntax validation completed successfully.

================ [3] Template Verification started at 15:53:12 ================

Verifying template...

If an untrusted SSL certificate is installed on 'hv-d01.go-lab.jp', secure

communication cannot be guaranteed. Depending on your security policy, this

issue might not represent a security concern.

The SHA1 thumbprint of the certificate is

'9A:10:B0:B5:43:F6:A8:9D:CD:0E:95:AC:E0:A0:AB:8D:19:C2:76:B6'

Do you accept the thumbprint?

1: Accept and continue.

2: Do not accept and exit.

1 ★1を入力。

Template verification completed successfully.

=================================== 15:53:15 ===================================

Starting vCenter Server Appliance installer to deploy "vc-sv02"...

This appliance is a vCenter Server instance with an embedded Platform Services

Controller.

================= [4] Gather Requirements started at 15:53:15 =================

Gathering Requirements...

Gathering requirements completed successfully.

=================================== 15:53:15 ===================================

Generating template...

====================== [5] Prechecks started at 15:53:15 ======================

Performing prechecks...

Check target thumbprint: PASS

Check target credentials: PASS

Check Target vCenter Server appliance name: PASS

Check system type: PASS

Check target ESXi host or vCenter version: PASS

Check for OVA property availability: PASS

Check the host's configurations against the vCSA's CPU, memory and datastore

size requirements: PASS

Check VC management status of ESXi containers: PASS

Check target datastore free space: PASS

Check Single Sign-On Server identity: PASS

Check Single Sign-On Server credentials: PASS

Check whether the Platform Services Controller (PSC) is external: PASS

 

 

The following warnings were returned from the prechecks:

DRS Warning:

 

The target ESXi host 'hv-d01.go-lab.jp' is managed by vCenter Server

'192.168.1.95'.

 

If any of these hosts are in a cluster, and DRS is enabled, vMotion can take

effect and adversely impact the installation, upgrade, or migration processes.

It is recommended that you use the *_on_VC.json template file for the target

ESXi host if it is managed by a vCenter Server, and ensure the ESXi hosts you

have specified are not members of clusters with DRS set to Fully Automated

during the installation, upgrade, or migration processes.

 

Basic verification completed successfully.

================== [6] OVF Tool Execution started at 15:53:19 ==================

Running OVF Tool to deploy the OVF...

OVF Tool: Opening OVA source:

E:\vcsa-cli-installer\win32\..\..\vcsa\VMware-vCenter-Server-Appliance-6.5.0.14000-7515524_OVF10.ova

OVF Tool:  The manifest does not validate

OVF Tool:  Opening VI target: vi://root@hv-d01.go-lab.jp:443/

OVF Tool:  Deploying to VI: vi://root@hv-d01.go-lab.jp:443/

OVF Tool: Disk progress: 99%

OVF Tool: Transfer Completed

OVF Tool:  Powering on VM: vc-sv02

OVF Tool: Task progress: 0%

OVF Tool: Task Completed

OVF Tool:  Completed successfully

================= [7] Service Installation started at 15:57:28 =================

Installing services...

Service Installation: Progress: 5% Setting up storage

Service Installation: Progress: 50% Installing RPMs

Service Installation: Progress: 54% Installed

VMware-unixODBC-2.3.2.vmw.2-6.5.0.x86_64.rpm

Service Installation: Progress: 56% Installed

vmware-afd-6.5.0.2570-7130183.x86_64.rpm

Service Installation: Progress: 61% Installed

vmware-dns-server-1.0.0-7130192.x86_64.rpm

Service Installation: Progress: 78% Installed

VMware-mbcs-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 80% Installed

vmware-virgo-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 84% Installed

vmware-imagebuilder-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 90% Installed

vmware-vsm-6.5.0-7515524.x86_64.rpm

Service Installation: Progress: 95% Configuring the machine

vCenter Server Service installations succeeded.

============ [8] vCenter Service Configuration started at 16:08:02 ============

Configuring services for first time use...

vCenter Service Configuration: Progress: 2% Starting VMware Authentication

Framework...

vCenter Service Configuration: Progress: 5% Starting VMware Identity Management

Service...

vCenter Service Configuration: Progress: 8% Starting VMware Single Sign-On User

Creation...

vCenter Service Configuration: Progress: 17% Starting VMware Component

Manager...

vCenter Service Configuration: Progress: 20% Starting VMware License Service...

vCenter Service Configuration: Progress: 22% Starting VMware Platform Services

Controller Client...

vCenter Service Configuration: Progress: 25% Starting VMware Service Control

Agent...

vCenter Service Configuration: Progress: 28% Starting VMware vAPI Endpoint...

vCenter Service Configuration: Progress: 31% Starting VMware Service Lifecycle

Manager API...

vCenter Service Configuration: Progress: 34% Starting VMware Appliance

Management Service...

vCenter Service Configuration: Progress: 45% Starting VMware Postgres...

vCenter Service Configuration: Progress: 51% Starting VMware vCenter-Services...

vCenter Service Configuration: Progress: 54% Starting VMware Message Bus

Configuration Service...

vCenter Service Configuration: Progress: 58% Starting VMware vSphere Web

Client...

vCenter Service Configuration: Progress: 59% Starting VMware vSphere Web

Client...

vCenter Service Configuration: Progress: 61% Starting VMware vSphere Client...

vCenter Service Configuration: Progress: 62% Starting VMware vCenter Server...

vCenter Service Configuration: Progress: 65% Starting VMware Content Library

Service...

vCenter Service Configuration: Progress: 68% Starting VMware ESX Agent

Manager...

vCenter Service Configuration: Progress: 71% Starting VMware vSphere Auto Deploy

Waiter...

vCenter Service Configuration: Progress: 74% Starting VMware vSphere

Profile-Driven Storage Service...

vCenter Service Configuration: Progress: 77% Starting VMware Update Manager...

vCenter Service Configuration: Progress: 82% Starting VMware vSphere

Authentication Proxy...

vCenter Service Configuration: Progress: 85% Starting VMware VSAN Health

Service...

vCenter Service Configuration: Progress: 88% Starting VMware vService Manager...

vCenter Service Configuration: Progress: 91% Starting VMware Image Builder

Manager...

vCenter Service Configuration: Progress: 97% Starting VMware Performance

Charts...

First time configuration succeeded.

========== [9] vCenter Server Deployment Summary started at 16:16:27 ==========

Deployment Summary

=================================== 16:16:28 ===================================

vCenter Server Appliance installer finished deploying "vc-sv02".

This appliance is a vCenter Server instance with an embedded Platform Services

Controller.

    System Name: vc-sv02.go-lab.jp

    Log in as: Administrator@vsphere.local

Finished successfully.

=================================== 16:16:28 ===================================

Result and Log File Information...

The vCenter Server Appliance installer result file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.json

The vCenter Server Appliance installer log file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer.log

The vCenter Server Appliance installer metadata file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-metadata.json

The vCenter Server Appliance installer status file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\vcsa-cli-installer-status.json

The generated template file:

c:\users\gowatana\appdata\local\temp\vcsaCliInstaller-2018-03-06-15-52-o6hfv0\generated_install.json

PS E:\vcsa-cli-installer\win32>

 

ESXi に、VCSA の仮想アプライアンスがデプロイされました。

vcsa65-cli-deploy-01.png

 

Web ブラウザで vCenter にアクセスできるようになります。

※URL は「https://vCenter のアドレス/ui」もしくは「https://vCenter のアドレス/vsphere-client」です。

vcsa65-cli-deploy-02.png

 

沢山 vCenter をデプロイするようなときには便利ではないかなと思います。

 

ちなみに、何度も同じ名前で vCenter をデプロイしていると Chrome / Microsoft Edge で

証明書のエラーになり HTML5 Client / vSphere Web Client にアクセスできなくなることがありますが、

その場合はデプロイした VCSA の CA 証明書を(Firefox などアクセスできるブラウザで何とかダウンロードして)

インストールするとアクセス可能になります。

※その場合、証明書は「https://vCenterのアドレス/certs/download.zip」からダウンロードできます。

 

以上、VCSA 6.5 を CLI でデプロイしてみる話でした。

 

最近、PowerCLI 10.0 がリリースされました。

New Release: VMware PowerCLI 10.0.0 - VMware PowerCLI Blog - VMware Blogs

 

とうとう macOS や Linux でも PowerCLI がサポートされるようです。

そこで Linux OS で PowerCLI をためしてみました。

 

今回は、Oracle Linux 7 を利用しています。

[root@vm01 ~]# cat /etc/oracle-release

Oracle Linux Server release 7.4

 

PowerShell のインストール。

まず、PowerShell をインストールします。

Oracle Linux では、ORACLE の Public Yum サーバから PowerShell をインスト―ルできます。

 

まず、Yum リポジトリの参照先が記載されている .repo ファイルを最新化します。

[root@vm01 ~]# curl http://yum.oracle.com/public-yum-ol7.repo -o /etc/yum.repos.d/public-yum-ol7.repo

 

Oracle Linux の PowerShell は、ol7_developer リポジトリにあります。

http://yum.oracle.com/repo/OracleLinux/OL7/developer/x86_64/

 

「--enablerepo」でリポジトリを有効にしつつインストールします。

[root@vm01 ~]# yum install -y --enablerepo=ol7_developer powershell

 

PowerCLI のインストール。

PowerShell を起動します。Linux では「pwsh」です。

[root@vm01 ~]# pwsh

PowerShell v6.0.1

Copyright (c) Microsoft Corporation. All rights reserved.

 

https://aka.ms/pscore6-docs

Type 'help' to get help.

 

PS /root>

 

PowerCLI をインストールします。

インストール元になる PowerShell Gallery がまだ信頼されていないと確認されるので

「Y」と入力して Enter キーをおすと、ひたすらモジュールがインストールされます。

PS /root> Install-Module -Name VMware.PowerCLI -Scope CurrentUser

 

Untrusted repository

You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy

value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?

[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y

PS /root>

 

警告抑止のため、VMware の Customer Experience Improvement Program (CEIP) の

参加についての設定をしておきます。

ここでは $false にしておきます。(自宅ラボでは基本的に CEIP に参加していますが・・・)

PS /root> Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false

 

PowerCLI 10.0.0 がインストールできています。

PS /root> Get-PowerCLIVersion

WARNING: The cmdlet "Get-PowerCLIVersion" is deprecated. Please use the 'Get-Module' cmdlet instead.

 

PowerCLI Version

----------------

   VMware PowerCLI 10.0.0 build 7895300

---------------

Component Versions

---------------

   VMware Cis Core PowerCLI Component PowerCLI Component 10.0 build 7893915

   VMware VimAutomation VICore Commands PowerCLI Component PowerCLI Component 10.0 build 7893909

 

 

 

PS /root>

 

WARNING にあるように、最近は Get-Module でバージョン確認するほうが

良いようなので、ついでに確認しておきます。

PS /root> Get-Module -ListAvailable -Name VMware.* | select Version,Name

 

Version        Name

-------        ----

6.5.2.7812840  VMware.DeployAutomation

6.5.2.7812840  VMware.ImageBuilder

10.0.0.7895300 VMware.PowerCLI

10.0.0.7893915 VMware.VimAutomation.Cis.Core

10.0.0.7893901 VMware.VimAutomation.Cloud

10.0.0.7893906 VMware.VimAutomation.Common

10.0.0.7893909 VMware.VimAutomation.Core

6.5.4.7567193  VMware.VimAutomation.HA

7.1.0.7547311  VMware.VimAutomation.HorizonView

10.0.0.7893904 VMware.VimAutomation.License

10.0.0.7893913 VMware.VimAutomation.Nsxt

10.0.0.7893924 VMware.VimAutomation.PCloud

10.0.0.7893910 VMware.VimAutomation.Sdk

10.0.0.7893900 VMware.VimAutomation.Srm

10.0.0.7894167 VMware.VimAutomation.Storage

1.2.0.0        VMware.VimAutomation.StorageUtility

10.0.0.7893903 VMware.VimAutomation.Vds

10.0.0.7893902 VMware.VimAutomation.Vmc

10.0.0.7893921 VMware.VimAutomation.vROps

6.5.1.7862888  VMware.VumAutomation

 

 

PS /root>

 

PowerCLI を使用してみる。

vCenter に接続してみます。

  • 今回の vCenter のアドレスは vc-sv01.go-lab.jp です。
  • 証明書エラー回避のため「 -Force」をつけています。

PS /root> Connect-VIServer vc-sv01.go-lab.jp -Force

 

 

Specify Credential

Please specify server credential

User: gowatana

Password for user gowatana: **************

 

 

Name                           Port  User

----                           ----  ----

vc-sv01.go-lab.jp              443   GO-LAB\gowatana

 

 

PS /root> $global:DefaultVIServer | Format-List Name,Version,Build,ProductLIne

 

 

Name        : vc-sv01.go-lab.jp

Version     : 6.5.0

Build       : 7515524

ProductLine : vpx

 

 

PS /root>

 

まだ Windows 版ほどの完成度ではないようですが、

基本的に Windows 版と同様のコマンドレットがあるようで vSAN 系のものも含まれています。

PS /root> Get-Cluster vsan-cluster-* | Get-VsanClusterConfiguration | Sort-Object Cluster

 

Cluster              VsanEnabled  IsStretchedCluster   Last HCL Updated

-------              -----------  ------------------   ----------------

vsan-cluster-01      True

vsan-cluster-02      True

vsan-cluster-03      True         True                 2018/01/28 12:01:23

 

 

PS /root> Get-Cluster vsan-cluster-01 | Get-VsanRuntimeInfo | Sort-Object VMHost | ft -AutoSize

 

Cluster         VMHost           ResyncTrafficMbps

-------         ------           -----------------

vsan-cluster-01 hv-i21.go-lab.jp                 0

vsan-cluster-01 hv-i22.go-lab.jp                 0

vsan-cluster-01 hv-i23.go-lab.jp                11

vsan-cluster-01 hv-i24.go-lab.jp                 4

vsan-cluster-01 hv-i25.go-lab.jp                 5

vsan-cluster-01 hv-i26.go-lab.jp                 5

 

 

PS /root>

 

また、PowerCLI の Linux 対応以前に

Linux 環境での PowerShell の使い方にも注意が必要そうです。

 

たとえば以前の投稿で使用したスクリプト「get_vsan_summary.ps1」を実行してみると、

「sort」でエラーになってしまいました。

PowerCLI で vSAN クラスタの概要を見てみる。

 

下記のような感じになったりします。

Linux の sort コマンドを実行しようとしてしまったりするようです。

PS /root> Get-Cluster | sort name

/usr/bin/sort: cannot read: name: そのようなファイルやディレクトリはありません

 

これについては、エイリアスの「sort」ではなく

ちゃんと Sort-Object とするとこの問題は回避できます。

PS /root> Get-Cluster | Sort-Object Name

 

 

Name                           HAEnabled  HAFailover DrsEnabled DrsAutomationLevel

                                          Level

----                           ---------  ---------- ---------- ------------------

ha-cluster-01                  False      1          False      FullyAutomated

ha-cluster-02                  True       1          True       FullyAutomated

ha-cluster-03                  False      1          False      FullyAutomated

vsan-cluster-01                True       1          True       FullyAutomated

vsan-cluster-02                True       1          True       PartiallyAutomated

vsan-cluster-03                False      1          False      FullyAutomated

work-cluster-01                False      1          False      FullyAutomated

 

 

以前の投稿の get_vsan_summary.ps1 スクリプトだと

下記のような感じの置換ですみましたが・・・

これまでの PowerShell / PowerCLI のバージョンアップよりも

修正箇所が多くなりそうな予感がします。

PS /root> sed -i "s/sort/Sort-Object/g" ./get_vsan_summary.ps1

 

私の場合、PowerShell のエイリアスを利用していたり、

ちょっと癖のあるスクリプトを作成したりすることがあるので

シンプルなコマンドライン / スクリプト作成を心掛けつつ

Linux 版 PowerCLI も徐々に利用していこうと思います。

 

以上、PowerCLI 10.0 を Linux で使用してみる話でした。

以前に、vSAN のストレージ ポリシーを PowerCLI で変更してみる投稿をしました。

今回は、PowerCLI で vSAN データストアのデフォルト ストレージ ポリシーを確認してみます。

vSAN の仮想マシン ストレージ ポリシー を PowerCLI で変更してみる。

 

vSAN データストアでは、デフォルト ストレージ ポリシーを設定できます。

powercli-vsan-default-policy-01.png

 

PowerCLI でデフォルト ストレージ ポリシーの確認をするのは難しそうです。

vSAN Cluster の設定を確認すると「StoragePolicy」プロパティがあります。

PowerCLI> Get-Cluster vsan-cluster-03 | Get-VsanClusterConfiguration | fl Cluster,VsanEnabled,StoragePolicy

 

Cluster       : vsan-cluster-03

VsanEnabled   : True

StoragePolicy :

 

 

しかし、これは vSAN のパフォーマンスサービスの

「統計オブジェクトのストレージ ポリシー」が格納されているようです。

このクラスタでは vSAN のパフォーマンス サービスがオフのままなので、

PowerCLI の StoragePolicy は空欄になっていますが、いずれにせよ

Get-VsanClusterConfiguration の StoragePolicy ではデフォルト ストレージ ポリシーはわかりません。

powercli-vsan-default-policy-02.png

 

そこで今回はバッド プラクティスですが、

実際に vSAN Cluster に VM を作成することで、デフォルト ストレージ ポリシーを確認してみます。

 

ここでは「check-vm」という名前の VM を vSAN データストアに作成してみます。

PowerCLI> New-VM -Name check-vm -ResourcePool vsan-cluster-03 -Datastore vsanDatastore-03 -StorageFormat Thin

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

check-vm             PoweredOff 1        0.250

 

 

ストレージ ポリシーを指定せずに作成したので、

この VM のストレージ ポリシーを確認することでデフォルト ストレージ ポリシーがわかります。

この vSAN データストアのデフォルト ストレージ ポリシーは「vSAN Default Storage Policy」でした。

PowerCLI> Get-VM check-vm | Get-SpbmEntityConfiguration | fl Entity,StoragePolicy

 

Entity        : check-vm

StoragePolicy : vSAN Default Storage Policy

 

 

ということで、デフォルト ストレージ ポリシーを確認するスクリプトを作成してみました。

ポリシーのルール確認方法は、以前に投稿した下記と同じです。

vSAN の情報を PowerCLI 6.5 R1 で見てみる。

 

スクリプトの内容:

get_vsan_default_storage_policy.ps1 · GitHub

 

下記のように実行できます。

PowerCLI> .\get_vsan_default_storage_policy.ps1 <vSAN クラスタ名>

 

実行すると下記のように表示されます。

  • あらかじめ、PowerCLI のウインドウ幅は広げてあります。(120 くらい)
  • vSAN Default Storage Policy はデフォルトで作成されるポリシーですが、
    設定変更することもできるので、ポリシーのルール設定も表示してみました。
  • テスト VM を作成して、情報を取得したあとに削除しています。

powercli-vsan-default-policy-03.png

 

もっと良い方法に気づいたら、更新するかもしれません・・・

 

以上、PowerCLI で vSAN のデフォルト ストレージ ポリシーを見てみる話でした。

PowerCLI に含まれる Image Builder では、標準では含まれない VIB を追加したインストーラの

ISO イメージファイルを作成することができます。

今回は ESXi 6.5 に、RealTek の NIC ドライバを追加してみます。

 

ちなみに、ドライバを追加した ISO イメージファイルを作成する場合、

最近では Andreas Peetz さんが作成した ESXi-Customizer-PS という

PowerShell / PowerCLI ベースのツールが利用されることが多いです。

このツールについては、下記のブログで紹介されています。

 

ESXi-Customizer-PS

https://www.v-front.de/p/esxi-customizer-ps.html

 

しかし今回は、あえて標準的な PowerCLI / Image Builder を使用して

ISO イメージファイルを作成してみます。

 

今回利用するファイルについて。

ESXi 6.5 は最新のパッチ(ESXi650-201712001.zip)を MyVMware からダウンロードずみです。

 

RealTek の NIC ドライバの VIB は、おなじく

Andreas Peetz さんの下記の Web サイトで公開されているもの(Net55-r8168)を

利用させていただきます。

今回のイメージに追加するファイルは、

.vib ファイルではなくオフラインバンドルを利用してみます。

これは VIB が含まれた ZIP ファイルで、net55-r8168-8.045-napi-offline_bundle.zip です。

※せっかくオフライン バンドルも提供していただいているので・・・

 

List of currently available ESXi packages

https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages

 

ファイルは下記のように同じディレクトリに配置しています。

PowerCLI> ls .\ESXi650-201712001.zip,net55-r8168-8.045-napi-offline_bundle.zip | select Name,Length

 

Name                                         Length

----                                         ------

ESXi650-201712001.zip                     478519869

net55-r8168-8.045-napi-offline_bundle.zip   1131520

 

 

なお、PowerCLI も、インストールずみです。

 

ISO イメージ ファイルの作成。

まず、ESXi のパッチ(オフラインバンドル)を読み込みます。

今回も、不具合修正&セキュリティ修正の両方と、VMware Tools が含まれるイメージ プロファイルである

ESXi-6.5.0-20171204001-standard を利用します。

PowerCLI> Add-EsxSoftwareDepot .\ESXi650-201712001.zip

 

 

PowerCLI> Get-EsxImageProfile | where {$_.Name -notmatch "s-standard|-no-tools"} | ft -AutoSize

 

Name                            Vendor       Last Modified       Acceptance Level

----                            ------       -------------       ----------------

ESXi-6.5.0-20171204001-standard VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

 

 

RealTek ドライバのオフラインバンドルを読み込みつつ、

ついでに含まれている VIB の名前を見ておきます。

VIB の名前は、net55-r8168 です。

PowerCLI> Add-EsxSoftwareDepot .\net55-r8168-8.045-napi-offline_bundle.zip | Get-EsxSoftwarePackage | ft -AutoSize

 

Name        Version    Vendor  Creation Date

----        -------    ------  -------------

net55-r8168 8.045-napi Realtek 2018/02/08 12:46:36

 

 

ちなみに、VIB のファイル名も確認できたりします。

PowerCLI> Get-EsxSoftwarePackage -AcceptanceLevel CommunitySupported -Name net55-r8168 | select SourceUrls

 

SourceUrls

----------

{zip:D:\work\net55-r8168-8.045-napi-offline_bundle.zip?net55-r8168-8.045-napi.x86_64.vib}

 

 

今回 読み込んだ VIB パッケージの中で、net55-r8168 だけは

他よりも許容レベル(AcceptanceLevel)が低く、CommunitySupported のパッケージです。

PowerCLI> Get-EsxSoftwarePackage -AcceptanceLevel CommunitySupported | ft -AutoSize

 

Name        Version    Vendor  Creation Date

----        -------    ------  -------------

net55-r8168 8.045-napi Realtek 2018/02/08 12:46:36

 

 

イメージ プロファイルの 許容レベル については、ドキュメントでは下記のあたりに説明があります。

VIB およびホストの許容レベルについて

 

そこで新しく作成するイメージ プロファイルも、許容レベルを CommunitySupported にします。

新しいプロファイル名は、わかりやすく ESXi-6.5.0-20171204001-with-realtek にしました。

Vendor の指定も必須になるので、今回は HomeLab としています。

PowerCLI> New-EsxImageProfile -CloneProfile $image_profile -Vendor HomeLab -Name ESXi-6.5.0-20171204001-with-realtek -AcceptanceLevel CommunitySupported | fl Name,Vendor,AcceptanceLevel

 

Name            : ESXi-6.5.0-20171204001-with-realtek

Vendor          : HomeLab

AcceptanceLevel : CommunitySupported

 

 

作成したプロファイルに、ドライバを追加します。

PowerCLI> Add-EsxSoftwarePackage -ImageProfile ESXi-6.5.0-20171204001-with-realtek -SoftwarePackage net55-r8168

 

Name                           Vendor          Last Modified   Acceptance Level

----                           ------          -------------   ----------------

ESXi-6.5.0-20171204001-with... HomeLab         2018/02/10 1... CommunitySupported

 

 

ドライバの VIB パッケージが追加されています。

PowerCLI> Get-EsxImageProfile -Name ESXi-6.5.0-20171204001-with-realtek | select -ExpandProperty VibList | where {$_.Name -eq "net55-r8168"} | ft -AutoSize

 

Name        Version    Vendor  Creation Date

----        -------    ------  -------------

net55-r8168 8.045-napi Realtek 2018/02/08 12:46:36

 

 

ISO イメージ ファイルとしてエクスポートします。

PowerCLI> Export-EsxImageProfile -ImageProfile ESXi-6.5.0-20171204001-with-realtek -ExportToIso -FilePath .\ESXi-6.5.0-20171204001-with-realtek.iso

 

ついでに、ドライバを追加したイメージ プロファイルの

オフラインバンドルもエクスポートしておきます。

これは、後でこのイメージにさらに VIB を追加したい場合などに利用できます。

PowerCLI> Export-EsxImageProfile -ImageProfile ESXi-6.5.0-20171204001-with-realtek -ExportToBundle -FilePath .\ESXi-6.5.0-20171204001-with-realtek.zip

 

結果として、下記のようなファイルが作成されます。

PowerCLI> ls | select Name,Length

 

Name                                         Length

----                                         ------

ESXi-6.5.0-20171204001-with-realtek.iso   350390272

ESXi-6.5.0-20171204001-with-realtek.zip   341466626

ESXi650-201712001.zip                     478519869

net55-r8168-8.045-napi-offline_bundle.zip   1131520

 

 

この ISO イメージファイルで ESXi をインストールすると、

通常のインストーラでは認識できない RealTek の NIC が認識できるようになります。

esxi65-realtek-pnic.png

 

ちなみに ESX Shell や SSH で直接ログインして確認すると、下記のように認識されています。

[root@localhost:~] vmware -vl

VMware ESXi 6.5.0 build-7388607

VMware ESXi 6.5.0 Update 1

[root@localhost:~] esxcli network nic list

Name    PCI Device    Driver  Admin Status  Link Status  Speed  Duplex  MAC Address         MTU  Description                                                   

------  ------------  ------  ------------  -----------  -----  ------  -----------------  ----  -----------------------------------------------------------------------------------------

vmnic0  0000:01:00.0  r8168   Up            Up            1000  Full    d8:9e:f3:7c:91:c6  1500  Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller

 

おまけ。

以前に似たようなことをしていましたので、こちらもどうぞ・・・

ESXi のオフライン バンドルから ISO イメージ ファイルを作成してみる。

ESXi 5.5 を Intel NUC にインストールしてみる。

ESXi 5.5 を Intel Haswell NUC にインストールしてみた。

ネステッドESXi 用 VMware Tools 導入済みの ESXi 5.5 を作成してみました。(Image Builder PowerCLI)

 

以上、ESXi 6.5 でカスタムイメージを作成してみる話でした。

PowerCLI で、vSAN の情報取得や設定、操作などをすることができます。

今回は、vSAN クラスタの概要を取得するスクリプトのサンプルを作成してみました。

 

以前に VMware Hands-on Labs(HoL)で PowerCLI をためしてみる投稿をしてみましたが、

この時はコピー&ペーストでためす都合により、ワンライナーっぽい実行例でした。

vSAN の情報を PowerCLI 6.5 R1 で見てみる。

 

手元に vSAN 環境がある場合は、コマンドラインを1行ずつ実行するよりも

スクリプトにして実行したほうが便利なケースがあると思います。

たとえば以前に HoL でためしたコマンドラインをまとめて、

下記のリンクにあるようなスクリプトで vSAN 環境の概要を確認することができます。

get_vsan_summary.ps1 · GitHub

 

このスクリプトを実行すると、下記のような感じになります。

  • PowerShell / PowerCLI のウインドウ幅は 140 にしてあります。
  • Connect-VIServer で vCenter に接続してから実行しています。
  • vSAN クラスタは 3つあります。(最初にクラスタ設定だけ表示)
  • vSAN Disk のデバイス名(CanonicalName)は長すぎて切れてますが、
    ウインドウ幅を広げて実行すれば全体が表示されます。
  • 長いので2クラスタ目の途中までの表示となってますが、
    1クラスタ目の様子で雰囲気を感じてもらえればと思います。

powercli-vsan-report-sample.png

 

ちなみに PowerCLI のプロンプト「PowerCLI>」は、下記のように工夫しています。

PowerCLI プロンプト文字列に vCenter への接続状態を反映してみる。

 

そして今回ためした PowerCLI のバージョンは下記です。

PowerCLI> Get-PowerCLIVersion | select UserFriendlyVersion

 

UserFriendlyVersion

-------------------

VMware PowerCLI 6.5.1 build 5377412

 

 

PowerCLI> Get-Module VMware.* | select Version,Name

 

Version       Name

-------       ----

6.5.2.6234650 VMware.VimAutomation.Core

6.5.1.5374001 VMware.VimAutomation.Storage

6.5.1.5374428 VMware.VimAutomation.Vds

 

 

今回のサンプルスクリプトは、vSAN の情報を網羅的に取得しているわけではなかったり、

スクリプトの書き方が独特だったりしますが、何かのヒントにしていただければと思います。

 

以上、PowerCLI での vSAN 情報の取得例でした。

ESXi 6.5 の「仮想マシン バージョン 13」(vmx-13)では

対応するゲスト OS の種類が増えましたが、

これまで対応していた OS の細分化もされています。

 

たとえば Oracle Linux や CentOS などは、Red Hat Enterprise Linux 異なり

これまで「Oracle Linux 4/5/6・・・」 のように 1つにまとめられていました。

しかし、vmx-13 の VM では「Oracle Linux 6」「Oracle Linux 7」と、ちゃんと細分化されました。

esxi65-guestid-01.png

 

vCenter 6.5 の vSphere Web Client で見ると、

vmx-11 の VM での Oracle Linux は下記のようになっています。

esxi65-guestid-02.png

 

そして

vmx-13 の VM での Oracle Linux は下記のように分割されています。

esxi65-guestid-03.png

 

API のリファレンスを見ると、

実際に増えた ゲスト OS の GuestId が「Since vSphere API 6.5」でわかりそうです。

 

Enum - VirtualMachineGuestOsIdentifier(vim.vm.GuestOsDescriptor.GuestOsIdentifier)

https://vdc-repo.vmware.com/vmwb-repository/dcr-public/6b586ed2-655c-49d9-9029-bc416323cb22/fa0b429a-a695-4c11-b7d2-2cbc284049dc/doc/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html

 

リファレンスにあるゲスト OS の NAME は VM の GuestId とおなじもので、

PowerCLI などでゲスト OS の種類を指定するときに使用されます。

従来だとバージョン指定がない oracleLinux64Guest だけでしたが

oracleLinux6_64Guest、oracleLinux6_64Guest などが追加されています。

PowerCLI> Get-VM oracle-* | select Name,GuestId | sort Name

 

Name              GuestId

----              -------

oracle-linux-6-vm oracleLinux6_64Guest

oracle-linux-7-vm oracleLinux7_64Guest

oracle-linux-vm   oracleLinux64Guest

 

 

このように、以前より VM にゲスト OS の指定が明確にできるようになりました。

 

また、.vmx ファイルの直接編集などで vmx-11 以前の仮想マシンに

vmx-13 以降に追加された GuestId を指定してしまうと、

vSphere Web Client での VM の設定確認・変更ができなくなることがあるので

注意が必要かもしれません。

たとえば、vmx-11 の VM に vmx-13 で追加された「VMware Photon OS (64-bit)」

(vmwarePhoton64Guest)を指定するとこの問題が起きたりします。

※実は Photon OS 2.0 GA の vmx-11 版の ova ファイルがそうなっていたりします。

 

以上、ESXi 6.5 での GuestId についてでした。

最新の ESXi を利用したい場合、たいてい ISO イメージ ファイルからインストールした後に

オフライン バンドルとよばれるパッチを適用することになります。

 

しかし PowerCLI の Image Builder を利用することで、オフライン バンドルの zip ファイルから

そのパッチが適用された ESXi の ISO イメージ ファイルをエクスポートすることができます。

 

Image Builder のドキュメントは下記のあたりです。

vSphere ESXi Image Builder を使用したインストールのカスタマイズ

 

Image Builder については、以前に下記のブログでも紹介されていました。

VMware ESXi イメージ管理ベストプラクティス その1 - Japan Cloud Infrastructure Blog - VMware Blogs

VMware ESXi イメージ管理ベストプラクティス その2 - Japan Cloud Infrastructure Blog - VMware Blogs

 

本来であれば Image Builder は、ハードウェア特有のドライバ追加などの場合に利用されますが、

今回はただ、パッチから最新版 ESXi のインストーラを抽出するためだけに利用してみます。

 

PowerCLI をインストールしておきます。

今回のバージョンは下記です。

PowerCLI> Get-PowerCLIVersion | select User*

 

UserFriendlyVersion

-------------------

VMware PowerCLI 6.5.1 build 5377412

 

 

ESXi のオフラインバンドル(パッチ)を MyVMware からダウンロードしておきます。

PowerCLI> ls .\ESXi650-201712001.zip | select Name,Length

 

Name                     Length

----                     ------

ESXi650-201712001.zip 478519869

 

 

ISO イメージ ファイルのエクスポート。

Image Builder で、オフライン バンドルを読み込みます。

PowerCLI> Add-EsxSoftwareDepot .\ESXi650-201712001.zip

 

Depot Url

---------

zip:D:\VMware\ESXi\ESXi650-201712001.zip?index.xml

 

 

オフラインバンドルには、複数のイメージ プロファイルが含まれています。

今回は、VMware Tools のインストーラと、セキュリティパッチ以外の修正も含んでいる

「ESXi-6.5.0-20171204001-standard」というイメージ プロファイルを利用します。

PowerCLI> Get-EsxImageProfile | ft -AutoSize

 

Name                             Vendor       Last Modified       Acceptance Level

----                             ------       -------------       ----------------

ESXi-6.5.0-20171201001s-no-tools VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

ESXi-6.5.0-20171204001-standard  VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

ESXi-6.5.0-20171204001-no-tools  VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

ESXi-6.5.0-20171201001s-standard VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

 

 

イメージプロフィアるを指定して、ISO イメージ ファイルをエクスポートします。

PowerCLI> Export-EsxImageProfile ESXi-6.5.0-20171204001-standard -ExportToIso -FilePath D:\work\ESXi-6.5.0-20171204001-standard.iso

 

ISO イメージ ファイルがエクスポートされました。

 

PowerCLI> ls D:\work\ESXi-6.5.0-20171204001-standard.iso | select Name,Length

 

Name                                   Length

----                                   ------

ESXi-6.5.0-20171204001-standard.iso 349245440

 

 

PowerCLI スクリプト編。

同様のことができる簡易的な PowerCLI スクリプトを作成してみました。

(ただし特にエラー制御とかはしていません。)

 

export_esxi-offline-bundle_to_iso.ps1

ESXiのオフラインバンドルから、ISO イメージファイルをエクスポート。 · GitHub

 

下記のように、オフライン バンドルと、スクリプト ファイルを配置して・・・

PowerCLI> ls | select Name,Length

 

Name                                     Length

----                                     ------

ESXi650-201712001.zip                 478519869

export_esxi-offline-bundle_to_iso.ps1       502

 

 

オフライン バンドルのファイル名とエクスポート先のディレクトリを指定して実行します。

PowerCLI> .\export_esxi-offline-bundle_to_iso.ps1 .\ESXi650-201712001.zip D:\work\

Export ISO File: D:\work\ESXi-6.5.0-20171204001-standard.iso

 

この ISO ファイルからブートして、ESXi をインストールすることができます。

export-iso-boot.png

 

vSAN の動作確認などでは最新の ESXi を利用したかったりするので、

環境構築の効率化として活用できるかもしれないと思います。

 

以上、Image Builder で ESXi のパッチから ISO イメージ ファイルをエクスポートする話でした。