目次
自宅の第 8 世代の NUC(NUC8i5BEK)で動いている ESXi 7.0b を、出たばかりの 7.0 update 1 にアップグレードしようとしたら、ドライバまわりで死んだので、最終的にどうにかするまでを含めて作業内容を書いておきます。
まとめると、
- NUC 8 では、ESXi 7.0 U1 から、組み込みのドライバではオンボード NIC を認識できなくなった
- 7.0 U1 のベースイメージを使いはするが、NIC のドライバ
ne1000
だけは 7.0b のドライバのままにする必要がある
な感じです。
今回は、vLCM のイメージ管理を使っていた環境だったので、
- イメージ管理からベースライン管理に戻して
- Image Builder を使ってカスタムイメージプロファイルを作って
- 作ったイメージプロファイルをベースライン化して適用した
ことでアップグレードを行いました。
なお、vCenter Server は ESXi の前に 7.0 update 1 にしていますが、VAMI からすんなりできて特別なこともなかったので、特に触れていません。
ダメだった例: vLCM のイメージ管理を使う
経緯
これまで、自宅の vSphere 7 環境の ESXi のバージョン管理には、vSphere 7 らしく vSphere Lifecycle Manager (vLCM) の イメージ管理 を使っていました(vLCM のイメージ管理を使って ESXi を 6.7 から 7.0 化してその後に 7.0b 化する様子は、別のエントリでも紹介 しています)。
そんなわけで、今回も、vSphere 7 らしく世界最速でスマートにアップグレードすべく、vLCM から 7.0 update 1 が見えるようになった直後に更新を(ひとまず一台だけ)走らせたんですが、再起動を開始したあとに上がってこなくなりました。
ダメになっている様子
コンソールを見ると、見たくなかった No compatible network adapter が出て死んでいます。
NUC8i5BEK に積んでいる NIC は Intel の Ethernet Connection (6) I219-V
という(デバイス ID が 15BE
の)ヤツで、これ自体は HCL にも 7.0 U1 でのサポートが載っています。対応するドライバは ne1000
で、死んでいる中を見ると入っているようにも見えますが、うまく使えていません。
実は、第 10 世代の NUC では ESXi 7.x が NIC をうまく認識せず、ワークアラウンドとして 6.7 の頃のドライバを入れなおす必要があるのはよく知られた話でした。第 8 世代では 7.0b までは問題なく動いていたものの、つまり、7.0 U1 になって同種の問題が顕在化したことになります。というわけで、回避するには、
- 7.0 U1 にアップグレードするが
- NIC のドライバ
ne1000
だけは 7.0b のものを使う必要がある
ということです。
根本的に、NUC そのものは HCL に載っておらず、サポートされていない ので、まあ、何が起きても仕方がないですねという感じではあります。
余談: 復旧まで
アップグレードに失敗してネットワーク疎通が失われると、ネットワーク経由の操作ができなくなるので、DCUI や物理的な電源ボタンを使って再起動する必要があります。
幸い、再起動するとイイ感じにロールバックされて元通りになる…… のですが、きれいに戻り切らず、vLCM 上でのコンプライアンスステータスが不明になってしまいました。
見てみると、tools-light
パッケージだけが最新化されたままロールバックされておらず、何らかの不整合を起こしている模様です。7.0b 時代の同パッケージを手でインストール(ダウングレード)すると元通りになりました。
[root@kuro-esxi02:~] esxcli software vib install -n tools-light:11.1.0.16036546-16321839 -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
Installation Result
Message: Operation finished successfully.
Reboot Required: false
VIBs Installed: VMware_locker_tools-light_11.1.0.16036546-16321839
VIBs Removed: VMware_locker_tools-light_11.1.1.16303738-16850804
VIBs Skipped:
VMware Tools 関連のパッケージは ESXi に同梱されずに別で提供されるようになってきていることもありますので、もしかするとこのコンポーネントだけはロールバックの対象外だとか、なにか事情があるのかもですね。
本題: 7.0 U1 化
作戦
7.0 U1 のベースイメージに 7.0b のドライバを入れればよいとアタリが付きました。が、問題が出てきます。
- vLCM のイメージ管理では、
ne1000
のようにベースイメージに含まれてしまっているコンポーネントの一部だけバージョンを変える、みたいな細かいカスタマイズが難しそう - イメージ管理に設定したクラスタは、ベースライン管理に戻せない
そんなわけで、
- クラスタをいちど解体して作り直し、vLCM での管理手法をベースライン管理に戻す
ne1000
だけバージョンを落としたカスタムイメージを作って、それをベースラインにしてアップグレードする
ことにします。つまり、昔ながらの VUM のやり方でやりましょうということですね。悲しい。
ベースライン管理への復元
vLCM でイメージ管理を構成してしまったホストクラスタは、ベースライン管理には戻せないので、いちどクラスタを解体する必要があります。
vDS を維持したままにしたかったので、ESXi を切断して削除して再登録する雑な方法ではなく、お行儀よく 1 台ずつメンテナンスモードにして逃がし、vMotion なども駆使して、新しいホストクラスタに VM を止めずに再構成しました。
これはそんなに難しくないですね。本番環境だといろいろアレですが、自宅だしアレなのでヨシです。
カスタムイメージプロファイルの作成
ここから、NUC 8 に合わせた 7.0 U1 のイメージを作成していきます。
作成には、vCenter Server に組み込みの Auto Deploy の付帯機能である Image Builder を使います。デフォルトではサービスが停止しているので、まずは Auto Deploy の画面の 設定
タブから、IMAGE BUILDER サービスの有効化
を行います。もしくは、VAMI で Image Builder サービス
を起動させても同じです。
起動させると Image Builder が使えるようになるので、まずは ソフトウェアデポ
タブで、ベースになるイメージを取得するべく、適当な名前で 公式のオンラインソフトウェアデポを追加 します。
Name | VMware online software depot |
URL | https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml |
さらに、適当な名前で空のカスタムソフトウェアデポを作成します。
公式のオンラインデポの中から、ESXi 7.0 U1 のイメージ ESXi-7.0.1-16850804-standard
を選択して クローン作成
し、名前を適当に変えて、複製先の ソフトウェアデポ
として先ほど作成したカスタムソフトウェアデポを選択して進みます。
次の画面で、パッケージの一覧が表示されます。この一覧は、オンラインソフトウェアデポに含まれる全パッケージの全バージョン で、この段階で、ESXi 7.0 U1 のベースイメージを構成する 74 のパッケージが選択済み になっています。
ここで、名前
フィールドを ne1000
でフィルタすると、7.0 U1 に組み込まれたバージョンである 0.8.4-11vmw.701.0.0.16850804
が選択されていることがわかります。
NUC 8 で動くのはこのひとつ前の 0.8.4-10vmw.700.1.0.15843807
なので、ここで、こちらのみが選択された状態に修正します。
その後、画面を進めて 完了
すると、カスタムソフトウェアデポに、カスタマイズ済みのイメージプロファイルができあがっているはずです。
ソフトウェアパッケージの表示
では、ne1000
だけが古い状態になっていることが確認できます。
あとは、このプロファイルを エクスポート
で ISO ファイルとして保存するだけです。作成が終わると、エクスポート
が ダウンロード
に代わるので、ダウンロードするか、リンク先の URL をコピーします。
ベースラインの作成と適用
ISO がダウンロードできた(か、URL がコピーできた)ら、vLCM の画面に移動して、インポートされた ISO
タブの ISO のインポート
から、先ほど作成された ISO ファイルをアップロード(か、コピーしておいた URL を指定)し、インポートさせます。
あとは、この ISO を選択して 新規ベースライン
でベースライン化して、
クラスタに 添付
し、
コンプライアンスの確認
ののちに 修正
するだけです!
またコケたら怖いので DRS ナシで一台ずつやります。
再起動後、懸念だった NIC も正しく認識され、修正処理が完走できました。残りも順次適用して、7.0 U1 化の完了です。
なお、この方法で適用したあとに再度コンプライアンスを確認すると、重要なホストパッチ
のベースラインが添付されている場合は、非準拠扱い になりますが、無視する必要があります。これは、あえてアップグレードしていない ne1000
のパッケージが 7.0 U1 相当に上がっていないことによるものです。これを 修正してしまうと再び NIC が認識されなくなる ので、放置するしか手がありません。
後始末
Image Builder はもう使わないので、VAMI から Image Builder サービス
を選択して停止させます。起動させるときは Auto Deploy の 設定
タブからできましたが、停止はできないようで……。
まとめ
vLCM のイメージ管理は使えなくなりましたが、7.0 U1 化を無事に完了できました。HCL に載っていない非サポートハードウェアだとこういうことがたまにあるので、仕方なしですね。
Image Builder は、7.0 が出たばかりの頃はバグで新しいイメージプロファイルが作れなかったようですが、無事に使えるようで一安心です。
また、Image Builder とオンラインソフトウェアデポを使った今回の手順は、My VMware から自分で何かをダウンロードしなくてよい ところにもあります。というのも、VMUG Advantage だと、まだ 7.0 U1 がダウンロードできないからです。
今回は NUC 8 の例でしたが、今後の別の NUC で同等のことが発生した場合には、同等の手法で解決できる可能性があります。