容器和 Kubernetes 是很棒的技术,它们使应用程序无需笨重的操作系统 (OS) 即可运行,而使用虚拟机 (VM) 则需要操作系统。容器优先、云原生应用程序 是未来趋势,但并非每个应用程序都适合云原生。
云原生应用立足于四大支柱:容器、DevOps、持续集成/持续交付 (CI/CD) 和微服务。将传统的单体应用程序迁移到云原生通常需要大量的重构工作。有时虚拟机比容器更好,例如,对于 LDAP/Active Directory 应用程序、令牌化应用程序以及需要密集型 GPU 工作负载的应用程序。
但是,当您在 Kubernetes 平台上运行一些云原生应用程序,而在非 Kubernetes 平台上运行其他应用程序时,情况可能会变得复杂。如果可以在 Kubernetes 平台上同时运行容器和虚拟机呢?世界岂不是更美好?
欢迎使用 KubeVirt,这是一个在 Apache 2.0 许可证下分发的开源项目。它由 Red Hat 工程师创建,旨在使 Kubernetes 能够与容器资源一起配置、管理和控制虚拟机。KubeVirt 可以使企业更容易地从基于虚拟机的基础设施迁移到基于 Kubernetes 和容器的堆栈,一次迁移一个应用程序。

(Bryant Son, CC BY-SA 4.0)
在本文中,我将展示如何通过本地可运行的开源 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。

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

(Bryant Son, CC BY-SA 4.0)
您如何安装 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、容器和其他有趣主题的其他文章。欢迎在下方留言分享您的想法和意见。
1 条评论