在K8S上使用RancherVM,以容器的方式跑虛機
RancherVM是一個開源的、輕量化的虛擬機器管理工具,讓使用者能夠和執行Docker容器一樣,打包和執行虛擬機器。
RancherVM專案自幾年前推出以來,得到了大量使用者的積極反饋。使用者也在過去幾年時間裡為Rancher Labs工程團隊提出了不少極有價值的意見與建議,尤其是對節點叢集上的虛擬機器的管理這一方面的需求。
如今,使用者可以在Kubernetes上使用RancherVM了! 現在的RancherVM中添加了資源排程、基於瀏覽器的VNC客戶端、IP地址發現、基於金鑰的身份驗證以及新版本的使用者介面。本文將帶你一探究竟!
RancherVM設計思路
RancherVM在深層次上大量使用了Docker容器化以及容器映象倉庫。虛擬機器基礎映象被打包成Docker映象釋出到任意Docker映象倉庫中。RancherVM還自帶了很多儲存在Docker Hub中的、大受歡迎的作業系統映象。使用者可以在各種公有和私有映象倉庫中進行自由選擇,甚至可以執行自己的私有映象倉庫: ofollow,noindex" target="_blank">https://docs.docker.com/registry/deploying/。
現在,每個虛擬機器都執行在Kubernetes pod中,我們稱之為VM pod。Kubernetes控制器負責管理vm pod的生命週期,授予使用者啟動或關閉虛擬機器、修改機器的cpu和記憶體分配的許可權等等。
持久化儲存
RancherVM系統定義了自己的自定義資源定義(Custom Resource Definitions, 簡稱CRD),並將所有狀態儲存在其中。因此,除了執行Kubernetes所需要的持久化資料儲存之外,RancherVM對儲存不再有其他額外的要求。REST伺服器會提供埠,供這些CRD上的 CRUD操作的執行。並且通過全新的UI,REST伺服器已有了更好的使用者體驗。
排程
我們現在利用Kubernetes排程器,將vm pod智慧化地放置在多個節點上。限制CPU和記憶體資源可以確保vm pod可以安全地排程到資源充足的主機上。根據節點的大小,單個主機可以實現100+個vm pods。排程虛擬機器不需要額外的開銷,而擴充套件性的限制應該是由Kubernetes本身決定的。在實踐中,我們已經看到了1000+個節點叢集的案例。
網路
RancherVM使用橋接網路為使用者虛擬機器提供連線。每一個虛擬機器pod為了保留自己的網路身份,會將其分配到的MAC地址儲存到它的虛擬機器CRD中。IP地址管理需要一個外部的DHCP伺服器。當然如果DHCP的租約過期,vm pod關閉了很長時間的話,它的IP地址可能會改變。
控制器會在每個節點上執行,將MAC地址解析成外部DHCP分配的IP地址。通常雲供應商不會這麼做,因為他們是通過實現DHCP伺服器來執行自己的IP地址管理的(IPAM)。這樣我們在橋接網路時就不需要控制DHCP伺服器或者在虛擬機器內部新增instrument。
這種設計也存在著一些固有的擴充套件性限制——你橋接的網路必須具有足夠的大小,能夠向每個VM提供唯一的IP地址。
如何使用RancherVM
RancherVM需要一個執行中的Kubernetes叢集,其中包含了執行基於Debian的作業系統和KVM的節點。
執行下面的命令可以將RancherVM元件部署到你的Kubernetes叢集中。
GUI
部署完成後,你可以通過查詢前端Kubernetes服務找到UI端點:
現在你可以導航到<node_ip>:30874來訪問UI。
如果想要啟動SSH遠端訪問,你還可以新增你的公鑰。在Credentials介面上,單擊Create,新增你的公鑰,起上一個好名字後,然後單擊OK。
建立例項也非常簡單。在Instances介面上單機Create。你會看到一個需要填寫的表格。你需要新增自己的公鑰或者啟用NoVNC網路伺服器。單擊OK就可以了!
過一會你就可以看到虛擬機器執行起來了,並且分配了IP地址。
現在你可以使用自己的私鑰通過SSH連線到機器。使用者名稱是依你所部屬的作業系統而異的。比如Ubuntu使用者的使用者名稱是Ubuntu,CentOS使用者是Centos,Fedora使用者是Fedora等等。
出於安全考慮,在預設情況下,基於密碼的SSH連線是禁用的。如果你選擇放棄將公鑰新增到虛擬機器規範中,你可以使用NoVNC來訪問機器。單擊NoVNC按鈕開啟瀏覽器內的控制檯。如果是Rancher提供的映象,那麼使用者名稱是rancher,密碼是rancher。
Dashboard提供了當前系統中CRDs的概要情況:
CLI
使用kubectl的使用者,可以通過操作CRD從命令列來管理系統。這裡有一些從命令列向系統新增憑證和虛擬機器的示例: https://github.com/rancher/vm/tree/master/hack/example
並不是所有的修改都會立即生效,有時可能需要停止之後再啟動虛擬機器才能響應一些規範的更改,比如CPU/記憶體分配的變更。
RancherVM的下一步開發計劃
在未來的幾周內,RancherVM將增加對實時遷移的支援。使用者可能會遇到這樣的情況,例如現有虛擬機器的資源需求超過了物理主機上可用的資源上限,或者運維人員為了做一些維護工作而需要中斷主機執行,在這些情況下,以一種對終端使用者而言透明的方式將正在執行的虛擬機器遷移到另一臺主機上,是至關重要的。
我們也在考慮將RancherVM與像Longhorn這樣的複製塊儲存系統進行整合。
RancherVM完全開源,任何人都可以免費使用。未來RancherVM還會進一步發展。
本文轉移開源中國- 在K8S上使用RancherVM,以容器的方式跑虛機