はじめに #
ESXiのインストールには、VMware純正のイメージのほかにベンダーのカスタムイメージを使うことがあると思います。 しかしベンダーによっては全てのESXiのversionをカバーしているわけではなく、歯抜けが結構ある印象です。
この時は通常以下の手段を取ることになると思います。
ベンダーイメージでインストール → VMwareの純正zipバンドルでアップデート → 任意のマイナーバージョンへ
しかし2段階のアップデートはESXiの再起動等も伴い面倒です。。。
これを解決するのがvCenterに搭載されているImage Builder機能になっており、自分で好きなvibを選んでカスタムメイドのESXiイメージ(profile)を作成することができます。
1. Image Builderとは? #
今まではpowerCLIで提供されていましたが、vCenterのGUI上からも操作ができる様になった、カスタムメイドのESXiイメージ作成ツールです。公式doc
7.0系のvCenterを使っていれば追加のinstall等不要で使用することができます。初回だけ有効化をする必要があるので管理者権限でloginし以下の画面から有効にしましょう。

右側の「ENABLE IMAGE BUILDER」をクリックしましょう。左側の「AUTO DEPLOY」は今回使いません。
AUTO DEPLOYはPXE-BOOTを使って、ESXi自体を自動でinstallするシステムになります。公式doc
2. zipバンドルを読み込む #
Image Builderが読み込めるのはzipバンドルのみなのでzipバンドルを手元にdownload後、右上の「import」から追加します。

Image Profiles #
zipバンドルの読み込みが完了すると、まずはImage Profilesのタブが表示され、profileの確認、clone、比較ができます。

Software Pacakges #
Software Pacakgesでは、zipバンドルに搭載されているvibの一覧を把握することができます。

以下の記事で解説したときには、install後esxcli software vib list
でvibを確認していましたが、これだとinstall前にGUIで確認できるので非常に便利です。
3. profileの比較をしてみる #
「Image Profiles」画面にて、4つのprofileが表示されていますが、これらにどんな違いがあるかご存知でしょうか? 折角なのでImage Builderの比較機能で比較してみます。
比較機能は「Image Profiles」タブの「Compare To」ボタンから実行できます。
-no-toolsと-standardの違い #
これは名前から推測できますが、vmware-toolsのvibが入っているかの違いになるようです。
121個のvibの中、same=120、Additional=1となっているのでtoolsありなし以外の違いは無いことがすぐに分かります。

「s」の有無の違い #
ESXi-8.0U2sb-23305545-standard
のように「s」の文字列があるprofileも存在します。
差を見てみると「s」ありの方がversionが古く、「s」なしの方がversionが新しくなっていることが分かります。

リリースノートをみると、機能更新を含まないセキュリティーアップデートのみなのでvibのversionに差異が現れているようです。

4. 新しいprofileを作る #
さて本題のベンダーイメージ + VMware純正zipバンドルを使ってカスタムメイドのESXiイメージを作ってみます。
1. ベンダーイメージのzipバンドルを読み込み

2. カスタムデポを作成する
Image Builderでは各種zipバンドルをデポという形で管理しています。Importの時はデポ名を指定して作成していましたが、今回は新しく作るのでNewからカスタムデポを作ります。

3. 既存のprofileをclone
ベースにしたいdepot、profileを選びcloneを実施します。Software depot
は先ほど作ったカスタムデポ指定します。
命名は分かりやすいように適当な名前に変更しておきます。

4. 追加、削除するvibを選ぶ
Depotのカラムに他のデポのvibも表示されているので、他のデポのvibをcloneしたdepotに追加や削除ができます。

esxcli software vib list
等でどのvibが採用されているか検証しておきましょう。
今回はベンダー専用vibをVMware純正zibバンドルに混ぜ込んでみます。

5. profileのバリデーション
vibを選びNEXTで進めるとバリデーションが実行されます。
バリデーションがOKであれば、以下のように作成画面になるのでOKを押します。

例えばESXiのベースとなるesx-base
を何も選択しないで、次に進めてみます。

するとエラーで警告してくれます。

6. 確認のため比較
作成が成功するとカスタムデポの中に新しいprofileができるので、比較機能で意図したvib変更が反映されているかcheckしましょう。
今回はVMware純正パッチにベンダー専用vibを追加しただけなので、以下のようになりました。

本来はベンダーイメージ + VMware純正zibバンドルでは、nicのdriver等も変わってきます。詳細はこちらの記事へ
今回は例のためにベンダー専用vibだけ追加しているので注意してください。
8. EXPORTしてダウンロード
全てOKであれば、カスタムデポのprofileを選択してEXPORTをすればカスタムイメージの作成は完了です。ISOかZIPか選んでEXPORT後にダウンロードしましょう。


5. よくあるエラー #
再現性がない場合がよくあるので、エラーをみて良く分からなかった場合はとりあえずretryをしてみましょう。 retryで解決することも多々あります。
diskスペースが足らない
経験したのはEXPORTに失敗した時ですが、IMPORT時にもdiskスペースが足らないという警告が出るらしいです。

Alertが発生していたので、

VAMIを確認すると、Image Builderに割り当てられたdiskスペースが足りないことが分かります。

Image Builder専用の領域が確保されているので、vCenter自体の容量枯渇ではないです。
root@v0-vcsa-01 [ ~ ]# df -h
Filesystem Size Used Avail Use%
devtmpfs 4.0M 0 4.0M 0%
tmpfs 6.9G 1.3M 6.9G 1%
tmpfs 2.8G 1.3M 2.8G 1%
tmpfs 4.0M 0 4.0M 0%
/dev/mapper/vg_root_0-lv_root_0 47G 19G 27G 41%
/dev/sda3 488M 37M 416M 9%
/dev/sda2 10M 2.0M 8.1M 20%
tmpfs 6.9G 4.8M 6.9G 1%
/dev/mapper/seat_vg-seat 9.8G 120M 9.2G 2%
/dev/mapper/vg_lvm_snapshot-lv_lvm_snapsh 147G 28K 140G 1%
/dev/mapper/log_vg-log 9.8G 1.7G 7.7G 18%
/dev/mapper/lifecycle_vg-lifecycle 98G 4.0G 89G 5%
# Image Builderの領域にはまだ空きがありそうに見えますが。。。
/dev/mapper/imagebuilder_vg-imagebuilder 9.8G 1.9G 7.4G 20%
/dev/mapper/vtsdb_vg-vtsdb 9.8G 35M 9.2G 1%
/dev/mapper/updatemgr_vg-updatemgr 98G 430M 93G 1%
/dev/mapper/core_vg-core 25G 276K 24G 1%
/dev/mapper/vtsdblog_vg-vtsdblog 4.9G 17M 4.6G 1%
/dev/mapper/dblog_vg-dblog 15G 49M 14G 1%
/dev/mapper/db_vg-db 9.8G 143M 9.1G 2%
/dev/mapper/archive_vg-archive 49G 81M 47G 1%
/dev/mapper/autodeploy_vg-autodeploy 9.8G 40K 9.3G 1%
/dev/mapper/netdump_vg-netdump 982M 24K 915M 1%
overlay 47G 19G 27G 41%
どうやらcacheSize_GB=2
で設定されているのでこれを変更します。公式doc
(不要なdepotを削除でもOK)
root@v0-vcsa-01 [ ~ ]# cat /etc/vmware-imagebuilder/sca-config/imagebuilder-config.props
loglevel=INFO
cacheSize_GB=2
vmomiPort=8098
httpPort=8099root@v0-vcsa-01 [ ~ ]# vi /etc/vmware-imagebuilder/sca-config/imagebuilder-config.props
root@v0-vcsa-01 [ ~ ]# vi /etc/vmware-imagebuilder/sca-config/imagebuilder-config.props
root@v0-vcsa-01 [ ~ ]# cat /etc/vmware-imagebuilder/sca-config/imagebuilder-config.props
loglevel=INFO
cacheSize_GB=6
vmomiPort=8098
httpPort=8099
root@v0-vcsa-01 [ ~ ]# service-control --restart vmware-imagebuilder
Successfully restarted service imagebuilder
root@v0-vcsa-01 [ ~ ]# service-control --restart vmware-rbd-watchdog
Successfully restarted service rbd
root@v0-vcsa-01 [ ~ ]#
cacheSize_GB=6
にすることでSerivceの警告がなくなり、EXPORTもできるようになりました。

おわりに #
カスタムイメージの作成はpowerCLIを使うしかありませんでしたが、Image BuilderはvCenterに最初から付属 + GUIで使いやすくだいぶハードルが下がりました。
とは言っても運用やカスタムイメージを作った経緯が複雑になってしまうのでなるべく避けたいですが、どうしても必要な時にはImage Builderは非常に良い選択肢になったと思います。