是的,你可以使用 KubeVirt 在 Kubernetes 上运行虚拟机

KubeVirt 允许你在 Kubernetes 平台上与容器一起运行虚拟机。
88 位读者喜欢这篇文章。
How Kubernetes became the solution for migrating legacy applications

Opensource.com

容器和 Kubernetes 是很棒的技术,它们使应用程序无需笨重的操作系统 (OS) 即可运行,而使用虚拟机 (VM) 则需要操作系统。容器优先、云原生应用程序 是未来趋势,但并非每个应用程序都适合云原生。

云原生应用立足于四大支柱:容器、DevOps、持续集成/持续交付 (CI/CD) 和微服务。将传统的单体应用程序迁移到云原生通常需要大量的重构工作。有时虚拟机比容器更好,例如,对于 LDAP/Active Directory 应用程序、令牌化应用程序以及需要密集型 GPU 工作负载的应用程序。

但是,当您在 Kubernetes 平台上运行一些云原生应用程序,而在非 Kubernetes 平台上运行其他应用程序时,情况可能会变得复杂。如果可以在 Kubernetes 平台上同时运行容器和虚拟机呢?世界岂不是更美好?

欢迎使用 KubeVirt,这是一个在 Apache 2.0 许可证下分发的开源项目。它由 Red Hat 工程师创建,旨在使 Kubernetes 能够与容器资源一起配置、管理和控制虚拟机。KubeVirt 可以使企业更容易地从基于虚拟机的基础设施迁移到基于 Kubernetes 和容器的堆栈,一次迁移一个应用程序。

在本文中,我将展示如何通过本地可运行的开源 Kubernetes 平台 Minikube 来使用 KubeVirt。如果您愿意,可以观看此视频,其中解释了 KubeVirt 的用例、如何安装 Minikube 以及本教程的其余部分。

先决条件

在开始之前,您需要一个部署在云环境、裸机实例或本地计算机上的 Kubernetes 平台。在生产环境中,最好将 Kubernetes 部署在裸机实例上。但是,在本演示中,我将使用 Minikube,这是一个开源平台,在本地计算机上运行 Kubernetes。如果您还没有安装,请下载并安装 Minikube

在启动 Minikube 之前,最好将其内存提升到 4GB

minikube config -p kubevirt set memory 4096

然后启动 Minikube

minikube start

步骤 1:下载并安装 KubeVirt Operator

记下 GitHub 仓库中最新的 KubeVirt 发布版本。您无需立即下载任何内容,只需获取版本号,然后在命令行界面 (CLI) 中设置环境变量

export KUBEVIRT_VERSION="v0.32.0"

将上面的 v0.32.0 替换为最新的发布版本(在上面的链接中找到)。

KubeVirt 使用 Operator 来管理应用程序的生命周期,以便任何配置或服务更改都将更新该特定组件,而无需新的部署。您可以使用 wget 下载 KubeVirt Operator 定义

wget https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml

下载文件后,最好探索其文件结构以了解其作用,因此请随时立即执行此操作。

接下来,将 KubeVirt Operator 应用于正在运行的 Minikube

kubectl apply -f kubevirt-operator.yaml

步骤 2:启用软件模拟

如果您使用的是 裸机 实例,则此步骤不是必需的,但您需要为本教程启用软件模拟。这很容易做到,只需创建一个 ConfigMap,并将 debug.useEmulation 属性设置为 true

kubectl create configmap kubevirt-config -n kubevirt --from-literal debug-useEmulation=true

步骤 3:下载并安装 KubeVirt

下一步是使用其自定义资源定义 (CRD) 文件安装 KubeVirt。下载文件

wget https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml

打开文件并探索其内容后,应用定义文件

kubectl apply -f kubevirt-cr.yaml

这会将 KubeVirt 安装在名为 kubevirt 的项目/命名空间中。

稍等片刻,检查所有 Pod 是否都已启动并正在运行

kubectl get pods -n kubevirt

步骤 4:下载并设置 virtctl

在尝试虚拟机之前,您需要 virtctl,这是一个与虚拟机交互的 CLI。要下载 virtctl,请转到 KubeVirt 仓库,然后单击页面右侧的 Releases

这将打开一个包含 KubeVirt 所有发布版本的页面。单击最新版本底部的 Assets;这将展开以显示您可以下载的文件。找到适合您操作系统的 virtctl 版本并下载。

您如何安装 virtctl 将因您的操作系统而异。对于 Linux 或 macOS 环境,将路径添加到您的 .bashrc 文件。使用 Vim 编辑 .bashrc 文件,命令如下:

vim ~/.bashrc

并添加以下行

export VIRTCTL_PATH=DOWNLOADED-PATH-TO-YOUR-VIRTCTL

其中 DOWNLOADED-PATH-TO-YOUR-VIRTCTL 是您下载 virtctl 的目录路径。

导出 PATH

export PATH="$PATH:$VIRTCTL_PATH"

保存文件并退出。然后输入

source ~/.bashrc

这使 virtctl 路径成为您环境的一部分。在命令行中输入 virtctl 以验证安装是否成功。

步骤 5:下载示例 VM 定义并探索 YAML 文件

接下来,下载示例 VM 定义并尝试运行它。我将在本教程中使用的 VM 是一个名为 Cirros 的轻量级 Linux 发行版。使用 wget 下载它

wget https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml

再次打开文件并探索其结构。

步骤 6:部署 VM 并进行测试

最后,使用您刚下载的文件配置 VM。输入以下命令来部署 VM

kubectl apply -f vm.yaml

接下来,查看已部署的 VM 资源

kubectl get vm

您看到的这个 VM 尚未运行。要启动它,请利用 virtctl

virtctl start NAME-VM

其中 NAME-VM 是通过键入 kubectl get vm 命令显示的 VM 名称。查看正在运行的 VM 实例

kubectl get vmi

使用以下命令连接到 VM

virtctl console NAME-VM

连接后,登录并使用您部署的 VM 进行试用。

就这样!希望这能帮助您了解如何使用 KubeVirt 在 Kubernetes 平台上与容器一起运行 VM。请务必查看 Opensource.com 上关于 Kubernetes、容器和其他有趣主题的其他文章。欢迎在下方留言分享您的想法和意见。

接下来阅读
标签
User profile image.
Bryant Jimin Son 是一位 Octocat,虽然这不是正式头衔,但他喜欢这样称呼自己。他在 GitHub 工作,这是一家以托管世界上大多数开源项目而闻名的公司。在工作中,他探索不同的 git 技术、GitHub Actions、GitHub 安全等。此前,他曾在 Red Hat 担任高级顾问,Red Hat 是一家以其 Linux 服务器和开源贡献而闻名的技术公司。

1 条评论

与其使用 k8s,不如使用 Nomad 更容易 https://www.nomadproject.io/
您可以大规模、跨多数据中心运行容器和非容器化应用程序,如 VM、隔离的 fork/exec...

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.