KubeVirt:使用CRD擴展Kubernetes來運行虛擬化工作負載
- 2019 年 12 月 5 日
- 筆記

KubeVirt:使用CRD擴展Kubernetes來運行虛擬化工作負載
作者:David Vossel(紅帽)
KubeVirt是什麼?
KubeVirt是一個Kubernetes插件,為用戶提供了與容器工作負載並排安排傳統虛擬機工作負載的能力。通過使用自定義資源定義(CRD)和其它Kubernetes功能,KubeVirt可以無縫擴展現有的Kubernetes集群,提供一組可用於管理虛擬機的虛擬化API。
為什麼使用CRD而不是聚合API伺服器?
早在2017年中期,我們在KubeVirt工作的人就處於十字路口。我們必須決定擴展Kubernetes是否使用聚合API伺服器或使用新的自定義資源定義(CRD)功能。
當時,CRD缺乏我們提供功能集所需的大部分功能。創建我們自己的聚合API伺服器的能力為我們提供了所需的所有靈活性,但它有一個主要缺陷。聚合API伺服器顯著地增加了安裝和運行KubeVirt所涉及的複雜性。
問題的關鍵在於聚合API伺服器需要訪問etcd以獲得對象持久性。這意味著集群管理員必須接受KubeVirt需要單獨的etcd部署,這會增加複雜性,或者為KubeVirt提供對Kubernetes etcd的共享訪問,這會引入風險。
我們並不接受這種權衡。我們的目標不僅僅是擴展Kubernetes來運行虛擬化工作負載,而是以最無縫和最輕鬆的方式實現。我們認為聚合API伺服器所增加了複雜性,犧牲了KubeVirt涉及安裝和運行的用戶體驗。
最終,我們選擇CRD並相信Kubernetes生態系統將與我們共同發展以滿足我們的用例需求。我們的賭注很好。現在對於滿足需求,已經有解決方案或正在討論的解決方案,解決了我們在2017年評估CRD與聚合API伺服器時所遇到的每個功能差距。