作者 | Gilson Melo
译者 | 天道酬勤 责编 | 徐威龙
封图| CSDN下载于视觉中国
随着微服务的出现,人们通常会问:“是否有可能通过Kubernetes上的微服务在基于内核的虚拟机(KVM)或VMware 中运行我的旧虚拟机,还是需要将它们迁移到容器上?” 这个问题的一个可能的答案是:KubeVirt。
KubeVirt项目将Kubernetes变成用于应用程序容器和虚拟机工作负载的编排引擎。它解决了已经采用或想要采用Kubernetes的开发团队的需求,但是它们具有现有的基于虚拟机的工作负载,因此无法轻松地放入容器中。该技术提供了一个统一的开发平台,开发人员可以在其中构建、修改和部署驻留在公共共享环境中的应用程序容器和虚拟机中的应用程序。
注意:KubeVirt可以在外部云提供商(例如Oracle云基础架构)上进行测试,但是此设置尚不适合生产!
开始
适用于Kubernetes的Oracle云基础架构容器引擎(有时称为OKE)提供了可靠且可扩展的集成工作流平台,用于在云中构建、测试、部署和监视代码。用于Kubernetes的容器引擎可帮助你在云中部署、管理和扩展Kubernetes集群。借助它,你可以通过将Kubernetes与在Oracle 云基础架构上运行的服务相结合来构建动态的容器化应用程序。
KubeVirt可以部署在容器引擎上,用于具有裸机或虚拟机形状的Kubernetes工作者节点。如果你的群集工作器节点配备有虚拟机形状,则KubeVirt以嵌套模式运行你的旧KVM或VMware VM。
要求
必须安装和配置Oracle云基础架构命令行界面(CLI)和Kubernetes的容器引擎kubectl CLI。有关更多信息,请参见用于Kubernetes的Container Engine文档:https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm。你还可以使用Cloud Shell,这是一个可从Oracle云基础架构控制台访问的基于浏览器的终端。 CLI已预先安装并在Cloud Shell中配置。
部署
请按照以下步骤为Kubernetes的容器引擎部署KubeVirt。
步骤一:部署KubeVirt管理员
1. 运行用于Kubernetes集群和NodePool节点的容器引擎。
2. 设置要在命令上使用的版本环境变量:
export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases | grep tag_name | grep -v -- - | sort -V | tail -1 | awk -F':' '{print $2}' | sed 's/,//' | xargs)
echo $KUBEVIRT_VERSION
3. 使用kubectl工具,部署KubeVirt运算符:
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
4. 确保KubeVirt管理员正在运行:
[root@kvmvbox ~]# kubectl get pods -n kubevirt
virt-operator-6b5455546b-56dvx 1/1 Running 0 39h
virt-operator-6b5455546b-5pwdj 1/1 Running 0 39h
5.检查虚拟化扩展。当你将Oracle Cloud Infrastructure VM形状与Oracle Linux映像一起使用时,这些形状应默认情况下启用嵌套虚拟化,并且cpuinfo文件应具有VMX标志。使用egrep命令进行检查。
egrep 'svm|vmx' /proc/cpuinfo
步骤二:部署KubeVirt
1.通过创建专用的自定义资源来部署KubeVirt:
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
2.检查部署:
另一个二进制文件可快速访问虚拟机的串行和图形端口,并处理启动和停止操作。该工具称为virtctl,你可以从KubeVirt的发行页面中检索它:
curl -L -o virtctl \
https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
chmod +x virtctl
步骤四:测试KubeVirt
现在是时候测试KubeVirt和Kubernetes的容器引擎了,测试方法是运行遗留的KVM或VMware VM以及容器。KubeVirt提供了一些实验室,让你在尝试遗留的KVM或VMware VM之前对其进行测试。
第一个实验是使用 KubeVirt,它引导你完成在Kubernetes上创建VM实例的过程,然后向你展示如何使用virtctl与其控制台进行交互。
第二个实验是使用容器化数据导入器(CDI)进行实验,向你展示如何使用CDI将VM映像导入到持久卷声明(PVC)中,然后如何定义VM以使用PVC。
在容器引擎中运行KVM和VMware VM
如果你打算划在Kubernetes的容器引擎中运行KVM或VMware VM,则必须首先将磁盘转换为原始格式。有两个免费的实用程序可以帮助你做到这一点:Oracle VirtualBox VBoxManage和QEMU磁盘映像实用程序。
VBoxManage是Oracle VM VirtualBox的CLI。你可以使用它从主机OS的命令行控制Oracle VM VirtualBox。 VBoxManage提供了虚拟化引擎的所有功能,它使你可以将磁盘转换为不同的格式。
在CLI中使用以下命令将VM磁盘转换为原始格式:
VBoxManage clonehd --format RAW kvm_qcow2_OR_VMware_vmdk_disk disk-name.img
QEMU磁盘映像实用程序,称为QEMU-img,还可以将磁盘转换为其他格式。例如,要在运行Oracle Linux的计算机上安装它,请运行以下命令:
sudo yum install qemu-img
然后,运行以下命令以将VM磁盘转换为原始格式:
qemu-img convert kvm_qcow2_OR_VMware_vmdk_disk -O raw disk-name.img
转换磁盘后,你可以使它们可供在用于Kubernetes的容器引擎中使用。你有以下几种选择:
将磁盘上载到工作程序节点,并使用hostpath运行它。
创建原始磁盘的Docker映像,并将其上传到Oracle Cloud Infrastructure Registry之类的公共注册表中。
克隆磁盘并使用它创建持久卷声明。
所有这些选项都在KubeVirt GitHub存储库和KubeVirt文档中进行了说明。
演示案例
下面是KubeVirt与用于Kubernetes的容器引擎一起使用的快速示例。在此演示中,我们使用Microsoft Windows 2012 KVM VM映像,该映像已转换为原始格式并上传到工作节点。
现在,它可以与同一pod子网CIDR中的其他本机Nginx容器一起运行。 Windows操作系统现在可以使用内部负载平衡器IP地址访问Nginx网页。
因此,Windows KVM VM的行为类似于Kubernetes窗格,这使其可以与其他用于Kubernetes服务的容器引擎进行本地交互。
如果有不清楚的地方或其他意见,欢迎评论告诉我们。
原文:https://dzone.com/articles/kvm-vmware-vms-in-container-engine-for-kubernetes
同时,欢迎所有开发者扫描下方二维码填写《开发者与AI大调研》,只需2分钟,便可收获价值299元的「AI开发者万人大会」在线直播门票!
推荐阅读:在容器上构建持续部署及最佳实践初探在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!全球呼吸机告急!医疗科技巨头美敦力“开源”设计图和源代码互联网之父确诊新冠,一代传奇:任谷歌副总裁、NASA 访问科学家微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!2020年,这20个大家都认识的加密交易所过得怎么样?真香,朕在看了