1. 程式人生 > >在K8S上使用RancherVM,以容器的方式跑虛機

在K8S上使用RancherVM,以容器的方式跑虛機

Rancher RancherVM

RancherVM是一個開源的、輕量化的虛擬機管理工具,讓用戶能夠和運行Docker容器一樣,打包和運行虛擬機。

RancherVM項目自幾年前推出以來,得到了大量用戶的積極反饋。用戶也在過去幾年時間裏為Rancher Labs工程團隊提出了不少極有價值的意見與建議,尤其是對節點集群上的虛擬機的管理這一方面的需求。

如今,用戶可以在Kubernetes上使用RancherVM了! 現在的RancherVM中添加了資源調度、基於瀏覽器的VNC客戶端、IP地址發現、基於密鑰的身份驗證以及新版本的用戶界面。本文將帶你一探究竟!


RancherVM設計思路


RancherVM在深層次上大量使用了Docker容器化以及容器鏡像倉庫。虛擬機基礎鏡像被打包成Docker鏡像發布到任意Docker鏡像倉庫中。RancherVM還自帶了很多存儲在Docker Hub中的、大受歡迎的操作系統鏡像。用戶可以在各種公有和私有鏡像倉庫中進行自由選擇,甚至可以運行自己的私有鏡像倉庫: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,以容器的方式跑虛機