KubeVirt 实现:谁需要它,为什么?

云原生架构和容器化的采用正在改变我们开发、部署和管理应用程序的方式。容器提供了速度、灵活性和可扩展性,推动了IT战略的重大转变。然而,对于许多组织来说,虚拟机(VM)仍然扮演着关键角色,特别是在遗留或有状态应用程序方面。甚至像高盛这样的领先金融机构也认识到 虚拟机与容器化工作负载的价值,并正在探索有效管理它们的方法。

这造成了潜在的分歧:一方面是容器化的好处,另一方面是对虚拟机的持续需求。KubeVirt通过将Kubernetes的强大功能扩展到虚拟机管理,弥合了这一差距,使您能够统一基础设施,同时实现向云原生技术的平稳过渡。

在本文中,我们探讨了为什么KubeVirt是希望简化IT操作并在混合基础设施环境中获得灵活性的组织的一个引人注目的解决方案。

什么是KubeVirt?

KubeVirt是一个开源项目,将Kubernetes转变为一个强大的平台,能够管理容器和虚拟机。简单来说,KubeVirt将Kubernetes变成您整个基础设施的单一控制平面。

它的工作原理如下:

  • KubeVirt作为扩展: KubeVirt向Kubernetes添加了自定义资源定义(CRD),引入了一种表示虚拟机的新对象类型。
  • 虚拟机作为“容器”: 使用KubeVirt,每个虚拟机在一个专用的容器中运行,紧密集成了虚拟机与Kubernetes生态系统。
  • 与Kubernetes简化虚拟机管理: 现在您可以利用相同的Kubernetes工具(kubectl和Kubernetes API)及最佳实践来创建、启动、停止、迁移和监控虚拟机,与您的容器化工作负载一起进行管理。

可以将KubeVirt视为让Kubernetes能够使用虚拟化语言,从而为您的基础设施管理打开了可能性的大门。

KubeVirt的商业影响

KubeVirt提供了超越技术优雅的切实好处。通过采用KubeVirt,您的组织将获得以下收益:

  • 无缝工作负载管理: 打破虚拟机应用与容器化工作负载之间的壁垒。使用相同的工具和流程从一个平台管理所有内容,显著简化操作并减少复杂性。
  • 增强资源效率: KubeVirt使您能够在相同的底层集群硬件上运行传统虚拟机和容器。优化资源利用,提高基础设施密度,并可能实现显著的成本节约。
  • 加速现代化:与虚拟机绑定的传统应用程序不必成为创新的障碍。KubeVirt为您提供了一条逐步实现应用程序现代化的路径。您可以逐步将组件进行容器化和迁移,全部在同一个Kubernetes环境中进行,最大程度减少中断。
  • 未来可靠的基础设施:通过投资KubeVirt,您将符合云原生原则,并将Kubernetes定位为技术堆栈的支柱。这促进了灵活性和敏捷性,使您能够迅速适应不断发展的业务需求。

为什么您的组织应该关注?

KubeVirt提供了令人信服的价值,特别是在以下领域:

  • IT团队和DevOps:KubeVirt通过为所有工作负载提供统一的控制平台来简化操作。它让您优化工作流程,减少工具开销,并提高团队整体效率。
  • 高管:获得操作灵活性,实现成本降低,以及朝着基础设施现代化的简化路径。KubeVirt将技术投资与长期业务成功保持一致。
  • 混合工作负载:如果您同时管理传统基于VM的应用程序和现代容器化部署,则KubeVirt至关重要。它让您避免供应商锁定,最小化复杂性,并保持对基础设施选择的完全控制。

以下是KubeVirt解决的一些具体痛点:

  • 对于管理VM和容器的分开环境感到沮丧?KubeVirt将它们整合在一起,使管理变得更加容易。
  • 寻求灵活性而不影响现有投资?KubeVirt 让您在现代化的同时利用您的虚拟机基础设施。
  • 想要提高成本效率和资源使用?KubeVirt 帮助整合工作负载以实现更好的利用率。
  • 在迁移遗留应用时感到困难?使用 KubeVirt 逐步现代化,并掌控您的进度。

入门:部署和实施

部署 KubeVirt 需要一个准备充分的 Kubernetes 环境。本节提供详细指南,帮助您在基础设施中设置和实施 KubeVirt。

先决条件

在开始之前,请确保满足以下要求:

1. Kubernetes 集群

您需要一个基于 KubeVirt 发布时可用的最新三个 Kubernetes 版本之一的 Kubernetes 集群(或衍生版本,如 OpenShift)。

2. Kubernetes API 服务器配置

Kubernetes API 服务器必须配置为 --allow-privileged=true,以运行 KubeVirt 的特权 DaemonSet。

3. Kubectl 工具

确保您已安装并配置 kubectl 客户端工具,以与您的集群进行交互。

4. 容器运行时支持

KubeVirt 支持以下容器运行时:

  • Containerd
  • crio(与 runv

其他容器运行时也应该可以正常工作,但上述运行时是主要目标。

5. 硬件虚拟化

建议使用支持虚拟化的硬件。您可以使用 virt-host-validate 来确保您的主机能够运行虚拟化工作负载:

YAML

 

网络和安全考虑

  1. 网络配置:规划您的虚拟机将如何连接和与外部网络以及您的 Kubernetes 环境的其余部分进行交互。

  2. AppArmor 集成:在启用了 AppArmor 的系统上,您可能需要修改 AppArmor 配置文件以允许运行 KubeVirt 特权容器。例如:

YAML

 

KubeVirt 安装

要安装 KubeVirt,请按照以下步骤进行:

1. 安装 KubeVirt Operator

KubeVirt Operator 简化了 KubeVirt 组件的安装和管理。运行以下命令部署最新的 KubeVirt 发行版:

YAML

 

2. 针对非硬件虚拟化的配置

如果硬件虚拟化不可用,可以通过在 KubeVirt CR 中将 useEmulation 设置为 true 来启用软件仿真:

YAML

 

实施最佳实践

要充分利用 KubeVirt,请遵循以下最佳实践:

1. 进行工作负载评估

优先考虑适合容器化的虚拟机。从不太关键的应用程序开始,以获取实际经验。

2. 评估网络和存储

计划如何将虚拟机网络与现有的 Kubernetes 网络相桥接,并使用 容器存储接口(CSI)插件集成持久数据的存储解决方案。

3. 强调监控和管理

使用 Kubernetes 监控工具或探索 KubeVirt 特定的解决方案,以便查看虚拟机性能与容器性能。

4. 实时迁移

启用和配置实时迁移,将运行中的虚拟机移动到其他计算节点而无需停机。这涉及设置功能门和在 KubeVirt CR 中配置迁移特定参数:

YAML

 

在 OpenShift(OKD)上的示例安装

如果您使用 OKD,额外的步骤包括配置安全上下文约束(SCC):

YAML

 

在 k3OS 上的示例安装

对于 k3OS,请确保在部署 KubeVirt 之前在所有节点上加载所需的模块:

YAML

 

使用此配置重新启动节点,然后按上述方式部署 KubeVirt。

每日开发人员构建的安装

要获取最新的开发人员构建,请运行:

YAML

 

源代码部署

通过遵循这些步骤和最佳实践,您可以确保顺利和成功地实施 KubeVirt,提供一个统一的基础设施管理解决方案,充分利用虚拟机和容器。

实施最佳实践

遵循以下最佳实践,以充分利用 KubeVirt:

  • 进行工作负载评估:并非所有应用程序立即适合于 KubeVirt。优先考虑具有良好容器化潜力的虚拟机。较不关键的应用程序可以是获取实践经验并最小化风险的好方法。
  • 评估网络和存储:认真考虑如何将虚拟机网络与现有的 Kubernetes 网络桥接。计划使用诸如容器存储接口(CSI)插件等解决方案进行持久数据的存储集成。
  • 强调监控和管理:调整您现有的 Kubernetes 监控工具或探索 KubeVirt 特定的解决方案,以获取对虚拟机性能的可见性,同时与您的容器并存。

结论

KubeVirt 为寻求获取云原生技术优势并最大化现有虚拟机投资价值的组织提供了一个引人注目的途径。它提升了运营效率,促进了灵活性,并加速了您的现代化之旅。

Source:
https://dzone.com/articles/kubevirt-implementation-who-needs-it-and-why