4個用于在云原生環(huán)境中運行虛擬機的開源工具

轉(zhuǎn)換遺留工作負載以滿足云原生標準可能是必須的。雖然理論上你會有時間和工程資源來重構(gòu)遺留工作負載,以便它們可以在云原生環(huán)境中本機運行,但這在現(xiàn)實世界中并不總是可能的。

本文來自開源云中文社區(qū)。

遺留工作負載是否阻止你走向云原生?這里有四種解決方案,可以在云原生環(huán)境中運行虛擬機。

許多IT專業(yè)人士想走向原生云。但是,你有傳統(tǒng)的工作負載,比如單體,它只能在虛擬機上運行。

你可以為云原生工作負載和遺留工作負載維護單獨的環(huán)境。但是,如果你能找到一種方法將虛擬機集成到你的云原生設置中,這樣你就可以無縫地管理它們,不是更好嗎?

幸運的是,有這樣的方法。本文介紹了在云原生環(huán)境中運行虛擬機的四種開源解決方案,只需很少的重新配置或調(diào)整。

為什么在云原生環(huán)境中運行虛擬機?

在研究這些工具之前,讓我們先看看為什么能夠在由容器化、松散耦合、云原生工作負載組成的環(huán)境中運行虛擬機很重要。

主要原因很簡單:承載遺留工作負載的虛擬機不會消失,但維護單獨的托管環(huán)境以運行它們是一種負擔。

同時,轉(zhuǎn)換遺留工作負載以滿足云原生標準可能是必須的。雖然理論上你會有時間和工程資源來重構(gòu)遺留工作負載,以便它們可以在云原生環(huán)境中本機運行,但這在現(xiàn)實世界中并不總是可能的。

因此,你需要工具,比如下面描述的四種開源解決方案之一,讓遺留虛擬機工作負載與云原生工作負載和平共處。

1.使用KubeVirt運行虛擬機

在云原生環(huán)境中部署虛擬機的最流行解決方案可能是KubeVirt。

KubeVirt的工作原理是在Kubernetes pod內(nèi)運行虛擬機。如果你想在容器旁邊運行虛擬機,那么只需將KubeVirt安裝到現(xiàn)有的Kubernetes集群中,其中包含:

export RELEASE=v0.35.0

#Deploy the KubeVirt operator

kubectl apply-f https://github.com/kubevirt/kubevirt/releases/download/$/kubevirt-operator.yaml

#Create the KubeVirt CR(instance deployment request)which triggers the actual installation

kubectl apply-f https://github.com/kubevirt/kubevirt/releases/download/$/kubevirt-cr.yaml

#wait until all KubeVirt components are up

kubectl-n kubevirt wait kv kubevirt--for condition=Available

然后,創(chuàng)建并應用一個YAML文件,該文件描述了要運行的每個虛擬機。KubeVirt在一個容器中執(zhí)行每臺機器,因此從Kubernetes的角度來看,VM只是一個常規(guī)的pod(有一些限制,將在下一節(jié)中討論)。然而,你仍然可以獲得虛擬機鏡像、持久存儲以及固定的CPU和內(nèi)存分配,就像使用傳統(tǒng)虛擬機一樣。

這意味著KubeVirt基本上不需要更改虛擬機。你所要做的就是安裝KubeVirt并為虛擬機創(chuàng)建部署,使其作為pod運行。

2.Virtlet方法

如果你想真正致力于將虛擬機視為pod,你可能會喜歡Mirantis的開源工具Virtlet。

Virtlet與KubeVirt相似,因為Virtlet還允許你在Kubernetes pod內(nèi)運行虛擬機。這兩種工具之間的關(guān)鍵區(qū)別在于,Virtlet將虛擬機更深入地集成到Kubernetes pod規(guī)范中。這意味著你可以使用Virtlet進行操作,例如將虛擬機作為守護程序集或復制集的一部分進行管理,而這是使用原生KubeVirt無法完成的(KubeVirt具有相同的功能,但它們是附加組件,而不是Kubernetes的原生部分)。

Mirantis還說,Virtlet通常比KubeVirt提供更好的網(wǎng)絡性能,不過這很難確切知道,因為網(wǎng)絡配置中涉及到太多變量。

3.ISIO對虛擬機的支持

如果你不想將虛擬機當作容器來管理,該怎么辦?如果你想把它們像虛擬機一樣對待,同時仍然允許它們與微服務輕松集成,該怎么辦?

最好的解決方案可能是將你的虛擬機連接到Istio,即開源服務網(wǎng)格。在這種方法下,你可以使用標準虛擬機工具部署和管理虛擬機,同時仍然可以通過Istio管理網(wǎng)絡、均衡負載等。

不幸的是,將虛擬機連接到Istio的過程相對繁瑣,目前很難實現(xiàn)自動化。它歸結(jié)為在每個要連接的虛擬機上安裝Istio,為它們配置命名空間,然后將每個虛擬機連接到Istio。

4.容器和虛擬機與OpenStack并排

到目前為止,我們所研究的技術(shù)包括采用Kubernetes或Istio等云原生平臺,并向其添加虛擬機支持。

另一種方法是采用非云原生平臺,運行虛擬機,然后將云原生工具移植到該平臺上。

如果在OpenStack上同時運行VM和容器,就會得到這樣的結(jié)果。OpenStack最初設計用于部署虛擬機(以及其他類型的資源)以構(gòu)建私有云。但是OpenStack現(xiàn)在也可以托管Kubernetes。

因此,你可以使用OpenStack部署和管理虛擬機,同時通過Kubernetes在OpenStack上運行云原生容器化工作負載。最終會有兩個編排層——底層OpenStack安裝和Kubernetes環(huán)境——因此從管理角度來看,這種方法更為復雜。

然而,它的主要好處是,你可以使虛擬機和容器彼此相對獨立,因為虛擬機不是Kubernetes的一部分。你也不會局限于使用Kubernetes工具來管理虛擬機。您可以將虛擬機視為標準虛擬機,將容器視為標準容器。

結(jié)論

開源生態(tài)系統(tǒng)提供了許多方法來幫助虛擬機與云原生工作負載共存。對你來說,最佳解決方案取決于你是想采取以Kubernetes為中心的方法(在這種情況下,KubeVirt或Virtlet是最好的選擇),還是想允許虛擬機與容器共存,而不與容器緊密集成(在這種情況下,OpenStack最有意義)。如果你只想在網(wǎng)絡級別而不是編排級別進行集成,請考慮將虛擬機連接到Istio服務網(wǎng)格。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論