在《虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比》这篇文章中,我们从架构和特性的角度,对比了在虚拟化和裸金属环境部署 Kubernetes 的优劣势,并在文末列举了两者更适合的应用场景。本文,我们将聚焦以虚拟化环境支持 K8s 的适用场景,并针对其中 3 个典型场景展开深入讨论。
重点内容:
为了应对不断变化的市场需求和技术挑战,云原生应用已经成为了许多企业用户的首选解决方案。云原生是一种构建和运行应用的方法,它充分利用云计算的优势,提供高度可扩展、弹性和自动化的应用部署;而容器作为云原生的核心组件,为应用的打包、运行和管理提供了轻量级、高效的解决方案。云原生应用首选应通过容器化技术进行改造,并运行在容器中。
对于正迈向云原生的企业用户,他们的容器化应用最适合运行在哪种类型的 IT 基础设施上呢?得益于容器化技术实现了应用程序与底层硬件解耦,这些应用能够在多种环境中进行部署。Gartner 在 2023 年 5 月更新的《服务器虚拟化市场指导》中,总结了各类应用负载在服务器上的承载形态,包括:直接运行在物理服务器的 Host OS 上、运行在虚拟化服务器中的 Guest OS 上、运行在物理服务器的容器中、运行在虚拟化服务器的容器中,以及虚拟化和容器化的混合运行环境。
其中,虚拟化环境或虚拟化-容器化混合环境成为最多数用户的选择。Gartner 在《市场指导》里指出:”……容器在虚拟机内部运行。到目前为止,这种模式在企业内部环境中已经成为容器部署的最常见模式。”虽然在私有云中的容器化部署呈增长趋势,但是 Gartner 分析师认为虚拟化与容器化将在较长时期内共存:“尽管(向公有)云迁移的趋势和容器采用率不断提高,2027 年仍有 70% 的数据中心 x86 工作负载将继续使用基于 Hypervisor 的虚拟化(2020 年约 80%)”。
注:实际上,公有云上的 Kubernetes 服务绝大多数是部署在公有云的虚拟机(云主机)上。
下面,我们将结合具体场景,解读虚拟化,以及基于虚拟化的超融合架构,在资源效率、弹性扩展和安全隔离方面,为 Kubernetes 带来的价值。
1. 需要快速部署和灵活伸缩 Kubernetes 集群
在需要快速构建的 Kubernetes 集群时,虚拟化(包括传统虚拟化和超融合)作为基础设施是非常适用的方式。众所周知,虚拟机的创建和变更速度远远快过物理服务器。在以下这些场景中,“敏捷地构建 Kubernetes 集群”是最重要的需求:
1)在企业内部,出于试用、演示、测试目的,用户可能频繁地(以“周”或“月”为周期)创建和删除 Kubernetes 集群;
2)在集群使用过程中,可能频繁地(以“周”或“月”为周期)需要根据业务量的增长快速增加集群资源,在业务量降低时释放 Kubernetes 集群的资源以支持其他应用;
3)故障和灾难发生时,如果原有 Kubernetes 集群无法快速恢复,需要快速地(以“分钟”或“小时”为单位)搭建临时替代的集群,并在原有基础设施恢复后删除临时的集群。
难点
通常在物理服务器上部署 Kubernetes 集群所需的时间以“周”为单位;长期运维物理服务器上 Kubernetes 集群的熟练工程师,借助自动化工具,可以将这个时间单位缩短为“天”。尽管这对前两种场景来说尚可接受,但仍无法满足第三个场景的需求。此外,由于操作环节繁多且重复性高,有必要通过自动化和标准化提高操作效率和准确性,从而解放 IT 运维人员,使他们能够更专注于系统整体优化,实现更高质量的服务和交付。
在实际的企业 IT 环境中,不同品牌和型号的物理服务器在硬件配置、固件和 BIOS、远程管理工具、驱动程序和操作系统支持、网络和存储配置、硬件兼容性和供应商支持等方面存在差异。这可能导致自动化流程中需针对这些差异进行特定配置,从而削弱流程的自动化和标准化,延长物理服务器达到生产就绪状态所需的时间。
在物理服务器上启用基于 Type-1 Hypervisor 的虚拟化过程中,也需要针对这些差异进行特殊配置。然而,在 Hypervisor 部署完成后,虚拟服务器的创建、删除和变更就不再涉及这些因素,通常可以在数分钟内完成虚拟机的生命周期管理。因此,基于虚拟机快速创建、删除和变更 Kubernetes 集群,可以实现分钟级的敏捷性。
对于以上场景 2)和场景 3),也有可供选择的其他方法:预先置备一些基于物理服务器的 Kubernetes 节点/集群,作为生产系统的热备份或冷备份;当有扩容需求或发生故障、灾难时,利用容器的可迁移特性,将业务迁移到预先准备好的备用节点/集群上——这确实是一部分用户在采用的方案。与基于虚拟机的动态Kubernetes 集群扩缩容和灾备方案相比,基于物理服务器的扩缩容和灾备方式将要求更高的成本,这是因为:备用 Kubernetes 节点/集群的主要配置(Kubernetes 版本、网络插件、存储插件、负载均衡插件、Ingress Controller 等)必须和主用集群一致,因此一组备用节点/集群资源只能专属于某一个特定的主用集群,这种特点在以下场景中会成为企业 IT 的负担:
备用 Kubernetes 节点/集群资源在正常情况下只能闲置,不能用作其他业务的物理服务器或虚拟化服务器。
虚拟化环境的价值
以上三个不足,如果使用虚拟机作为 Kubernetes 的运行基础,就能很好地解决:
动态资源分配和资源共享:在没有承担临时扩容或灾备工作负载的情况下,多个备用虚拟化 Kubernetes 集群均可以保持较低的资源占用水平,此时有较多资源可以为其他虚拟化、容器化应用提供运行环境;可以随时对备用集群规模进行快速扩展以临时承载业务,并在业务回切到主用集群后对备用集群进行快速缩减,从而提高资源利用效率、减少闲置资源的浪费。
2. 需要为“多租户”提供各自的 Kubernetes 运行环境
“多租户”就是指在一套基础架构资源池上,允许多个用户或者团队(我们统称之为“租户”)共享资源,但又互不干扰。
支持“多租户”为何如此重要?在企业内部,各个业务项目和部门可能采用不同的技术栈和应用架构,这要求 IT 基础架构管理员为他们提供定制化的 Kubernetes 集群。通过部署多个集群,可以针对各业务线的资源、性能、安全性和可用性需求提供合适的解决方案。例如:
难点
在多租户场景下,要提供不同的 Kubernetes 集群并在它们之间实现隔离,以确保业务安全,不同使用者可能非常关注从内核层面和网络层面对 Kubernetes 集群上的应用进行隔离的方式和效果:
内核层面
Kubernetes 所管理的容器,是轻量级的虚拟化技术,它使用操作系统的内核功能(如 Linux 的 Cgroups 和 Namespaces)来为应用程序提供隔离。容器之间共享同一个内核,但每个容器都有自己的文件系统、网络栈和进程空间。这种隔离方式相对较弱,这使得潜在的安全风险更高。如果容器内的应用程序被攻击者成功入侵,攻击者可能更容易突破容器的隔离层,并影响其他容器或宿主系统。当然,通过配置安全策略和使用增强型隔离技术(如 SELinux 和 AppArmor),可以降低这种风险。这些容器安全技术和方法还在不断改进中,还不能消除使用者的种种顾虑;而且, 部署更多新型容器安全技术,也就随之增加了容器运行环境和应用系统的复杂度。
与共享操作系统内核的容器化技术相比,虚拟机提供成熟的硬件级别的隔离,通过模拟硬件资源来为每个虚拟机实例提供完整的操作系统环境。这种严格的隔离有助于确保:一个虚拟机上容器出现的问题不会影响到其他虚拟机,一个 Kubernetes 集群上出现的问题,也不会扩散到其他 Kubernetes 集群。
网络层面
同一个 Kubernetes 集群中的所有容器通常使用同样的网络方案和地址空间,很难实现差异化配置。Kubernetes 原生的网络隔离方法只有网络策略(NetworkPolicy),这些策略的编写和维护的工作量非常大。如果采用为 Pod 配置多网卡并且混合使用多种 CNI 的方式,可能导致复杂性急剧增加,网络配置很容易出现问题或冲突,通常不推荐。
虚拟化集群上的虚拟网络技术可以使不同 Kubernetes 集群的网络完全隔离,并提供基于虚拟网络的路由、负载均衡和安全功能。对于网络和安全有差异化需求的不同应用, 可以由构建在不同的虚拟网络上的不同 Kubernetes 集群进行承载,不会在同一个 Kubernetes 集群内部引入非常复杂的网络、服务和安全插件及相应配置。
虚拟化环境的价值
为满足这些安全隔离的需求,构建并维护多个基于虚拟机的 Kubernetes 集群成为一种非常合适的方法。将单一大型 Kubernetes 集群拆分成多个小型集群,除了可以满足上述内核层面和网络层面的隔离需求外,还具备以下优点和价值:
更便于运维管理:通过部署多个 Kubernetes 集群,IT 基础架构管理员可以更好地监控和管理每个集群的运行状况。这有助于及时发现潜在问题,确保应用的正常运行,并降低故障恢复时间。
由此可见,对于有“多租户”类型需求的企业用户来说,如果单个“租户”对资源的要求没有超出总体硬件资源的 50%,所有“租户”的资源需求峰值没有超出硬件资源的总和,那么基于虚拟化技术在同一组硬件设备上构建多个不同的 Kubernetes 集群就是一种更加可行、更加高效的方式。
有一种情况是例外:某些行业和应用场景可能需要遵循非常强力的合规要求,例如数据主权、数据保护等。在这种情况下,多种应用、多个部门之间即便通过虚拟机层面的隔离,也不符合行业特定的数据隔离和保护的要求,只有为每种应用创建基于独立硬件的运行环境,才能符合相应的合规要求。
3. 需要在有限资源内同时支持虚拟化和容器化应用
由于各种现实条件的制约, 很多企业用户必须在同一套硬件资源上同时支持虚拟化和容器化应用。比如:
由于最终使用者所处地理位置分散,需要将硬件分布在不同站点(下图)。
难点
在这些场景中,可能不满足为虚拟化应用和容器化应用单独组建集群的硬件条件;或者由于分支/边缘站点上的虚拟化和容器化应用可能对资源总量需求并不高,单独分配硬件资源反而进一步加剧了资源闲置和管理复杂度的问题。
虚拟化环境的价值
在成熟的虚拟化平台上建设 Kubernetes 集群,实现虚拟化与容器化应用的混合部署,是应对以上场景的一种最佳方式。这种方式的优势和价值在于:
当谈论在虚拟化环境中运行容器化应用时,我们必然会面临与虚拟化管理相关的开销问题。许多用户选择在物理服务器上运行 Kubernetes 和容器化应用,主要原因在于:基于 Hypervisor 的虚拟化方式在物理服务器上增加了一层额外的处理开销,他们担心这会降低容器的运行性能。
这种担忧并非完全没有依据,但具体的性能差异受多种因素影响,如虚拟化技术、资源分配策略以及应用程序类型。在实际应用场景中,我们需要根据具体需求和性能指标来权衡虚拟化带来的安全性、效率提升和性能损失。就像赛车与轿车的区别:F1 赛车只需要考虑在专业赛道内的速度和操控性,而家用 MPV 需要考虑舒适性、安全性、成本等因素,而将部分“性能”让步给“综合体验”;同时,实际的道路环境会出现交通管制和拥堵,这时赛车和轿车在实际到达时间上可能不会有很大差别。由于 MPV 可以同时搭载多个乘客和多种货物,其综合运输效率也会高于 F1 赛车。
因此,“高性能”容器化应用需要什么样的运行环境,应当放到特定的应用需求场景中进行讨论。如果应用具备以下特点,它就比较适合在专属的物理环境下运行:
在常见的应用中,以下这些应用通常会消耗大量资源:
我们列举并分析了三种在虚拟化环境中运行 Kubernetes 的场景,每个场景都可以同时获益于虚拟化技术带来的资源效率、弹性扩缩和安全隔离能力。
为了帮助更多用户在虚拟化环境中构建安全、可靠、高性能的 Kubernetes 集群,SmartX 也正式发布了生产级 Kubernetes 构建与管理服务产品 SKS。通过预集成 Kubernetes 常用软件,并整合业界领先的 SmartX 超融合产品组件(虚拟化、分布式存储、网络与安全等),SKS 可帮助企业 IT 运维团队轻松部署和管理生产级 Kubernetes 集群,构建可同时承载虚拟化和容器应用的完整企业云基础架构。
欲了解方案详情,请阅读:SmartX 发布 SKS 1.0 ,一站式构建生产级 K8s 集群,或扫描下方二维码或点击链接,一键获取《SMTX Kubernetes 服务技术白皮书》。
参考文章:
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论