もし KubeVirt のソースコードを変更しない場合、いくつかの要件を実現するのは難しいかもしれません。なぜなら、KubeVirt が公開している機能は限られているからです。しかし、KubeVirt は開発者向けにいくつかのバックドアを提供しており、深いカスタマイズ要件に使用することができます。
1. libvirt ログの設定変更#
時々、libvirtd のログを確認したい場合がありますが、virt-launcher Pod に入って libvirtd のログを変更して libvirtd プロセスを再起動すると、virt-launcher-monitor にとって libvirtd プロセスが停止したということは仮想マシンが停止したことを意味します。
KubeVirt は libvirtd ログの設定を変更するための 2 つの方法を提供しています:
- KubeVirt CR で virtLauncher に対して
logVerbosity
を 5 以上に設定すると、virt-launcher Pod のログに libvirt のログが表示されます。以下のように設定します:
apiVersion: kubevirt.io/v1
kind: KubeVirt
metadata:
name: kubevirt
namespace: kubevirt
spec:
configuration:
developerConfiguration:
logVerbosity:
virtLauncher: 2
virtHandler: 3
virtController: 4
virtAPI: 5
virtOperator: 6
変更後、コンポーネントの Pod を再起動する必要はありません。この設定はホットリロードされます。ただし、virt-launcher Pod は動的に変更できません。
- VMI に
kubevirt.io/libvirt-log-filters
というアノテーションを追加します。libvirt のログフィルタを直接指定することができます。詳細な設定ルールについては、debug logsを参照してください。
2. libvirt ドメイン XML の変更#
KubeVirt の VMI 仕様で公開されているプロパティは、ほとんどの使用要件を満たすことができますが、サポートされていないものもあります。たとえば、clock
のoffset
属性を localtime に設定することはサポートされていません。
しかし、KubeVirt は hooksidecar メカニズムを提供しています。virt-launcher 内で VMI 仕様に基づいてドメイン XML をレンダリングした後、登録したフックを呼び出してドメイン XML を任意に変更する機会を与えます。この時点で、ドメイン XML を自由に変更することができます。
もし自分自身で hooksidecar を開発したい場合は、KubeVirt リポジトリのcmd/example-*-hook-sidecar
で例を見つけることができます。
hooksidecar は、sidecar コンテナとして virt-launcher Pod 内で実行され、gRPC unix を介して virt-launcher と対話します。
3. 継続的な更新中#
...