delta_lt_0

delta_lt_0

人生苦短 及时行乐

KubeVirt 的一些後門

如果不修改 KubeVirt 源碼的話有些需求很難實現,因為 KubeVirt 暴露出來的能力有限。但 KubeVirt 面向開發者提供了一些後門,可以用於一些深度定制需求。

1. libvirt log 設置修改#

有時候我們想要查看 libvirtd 日誌,但如果我們進入 virt-launcher Pod 去修改 libvirtd 的日誌並重啟 libvirtd 進程,在 virt-launcher-monitor 看來 libvirtd 進程死了就意味著該虛擬機已經死亡。

KubeVirt 提供了 2 種方式讓我們修改 libvirtd log 設置:

  1. 在 KubeVirt CR 中給 virtLauncher 設定 >=5 的 logVerbosity ,就可以在 virt-launcher Pod 的 log 中看到 libvirt 的 log。 如下:
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

修改後無需重啟任何 component pod,這部分配置是熱載的。 當然 virt-launcher Pod 無法動態修改

  1. 給 VMI 添加一個 kubevirt.io/libvirt-log-filters 的 annotation。 可以直接指定 libvirt 的 log filter,詳細設置規則可見:debug logs

2. libvirt domain xml 修改#

KubeVirt VMI Spec 中開放的屬性能滿足大部分使用需求,但也有不少不支持的。 例如 clockoffset 屬性就不支持設置為 localtime。

但 KubeVirt 提供了 hooksidecar 機制。在 virt-launcher 內根據 VMI Spec render 出 domain xml 後,會調用我們註冊的 hook 讓我們的 hook 有一次修改 domain xml 的機會。 此時我們就可以任意修改 domain xml 了。

如果我們要自己開發一個 hooksidecar,那麼可以在 KubeVirt 倉庫的 cmd/example-*-hook-sidecar 中找到例子。

hooksidecar 會以 sidecar container 的方式運行在 virt-launcher Pod 內,通過 gRPC unix 與 virt-launcher 進行交互。

3. 持續更新中#

...

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。