先日書いた Anthos for 逸般の誤家庭: ~Anthos VM Runtimeで遊ぶ~ の続きです。
VMのライブマイグレーションができなかったのですが、できるようになったのでその顛末。
何がまずかったのか
こんなオチでしたよ・・・
そのせいで
internal error: Attempt to migrate guest to the same host 03000200-0400-0500-0006-000700080009
というエラーが出て virt-launcher
が落ちていました。はじめは、同じホストにマイグレートしようとしている?なに言ってんだこいつ?ぐらいに思っていたのですが・・・
というわけでどうにかしなければならない
通常物理ホストでlibvirtdを起動する際は、ホストのUUIDをどこから拾ってくるかは /etc/libvirt/libvirtd.conf
で指定できます。以下のように親切な説明書きもあります。
###################################################################
# UUID of the host:
# Host UUID is read from one of the sources specified in host_uuid_source.
#
# - 'smbios': fetch the UUID from 'dmidecode -s system-uuid'
# - 'machine-id': fetch the UUID from /etc/machine-id
#
# The host_uuid_source default is 'smbios'. If 'dmidecode' does not provide
# a valid UUID a temporary UUID will be generated.
#
# Another option is to specify host UUID in host_uuid.
#
# Keep the format of the example UUID below. UUID must not have all digits
# be the same.
# NB This default all-zeros UUID will not work. Replace
# it with the output of the 'uuidgen' command and then
# uncomment this entry
#host_uuid = "00000000-0000-0000-0000-000000000000"
#host_uuid_source = "smbios"
ですがKubeVirtのvirt-launcher
のコンテナにはそういう選択肢はなく、dmidecode -s system-uuid
の出力が使用されるようです。したがって
- DMIを書き換える
- コンテナを改造する
の2択となります。いや正しくは UUIDが重複しているようなあやしい製品を使うな という話なんですが。
なにをしたか
いろいろ紆余曲折を経て、最終的にはAMI(このPCのBIOS)のDMIを書き換えるEFIツールを入手して、UUIDの書き換えに成功しました。ライセンス的に微妙かもしれないので詳しくは書きませんが、成功したツールは AMIDEFIx64.EFI
というものです。これをUSBに入れてEFIシェルに入り
AMIDEFIx64.EFI /SU "AUTO"
でライブマイグレーション
VM自体は前の記事でライブマイグレーションできるように作っていたので、
kubectl virt migrate <VM名>
とやるだけです。すんなり動きました。SSH接続も切れません。
ちなみにWindowsの仮想マシンも作ってみました。
で、負荷がかかった状態でもライブマイグレーションは動作するのかを確かめるべく、リモートデスクトップ接続したVM上のChromeでヒカキンのYouTubeを見ている状態でライブマイグレーションを発動させるというアホなことをやってみたのですが、さすがにこれは多少時間がかかり、RDP接続も切れました。切れてから再接続できるまで1分ぐらいかな。再接続したらChromeのプロセスも終了していました。
結論
- ライブマイグレーションは動作する
- どこまで「ライブ」かは状況による
良いお年を。