您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

2023,容器还是虚拟机?

时间:2023-05-29 13:12:38  来源:51CTO  作者:


作者 | Heather Joslyn & Lawrence E Hecht

策划  | 云昭

几年前,不少技术文章都会输出这样一种观点:linux容器和虚拟机是数据中心中两个截然相反的组件。诚然,尤其当一项新技术被采用时,这种现象就会很明显:在新技术的炒作周期中,新事物往往会被推向行业的每一个角落,并且寻找战胜旧软件、硬件组合的新的宣传点。

你可能还记得JAVAScript何时将接管服务器端,或者虚拟现实何时将彻底改变教育。事实上,这些技术最终只是找到了“舒适的”使用领域,而不是取代其他。然而,事实上,很难判断某项技术最终会在哪里最有用,以及在哪里会被更好的选择所取代。

现在,Linux容器和虚拟机不再是全新的,它们已经成为通用软件开发人员为各种场景考虑的工具。现在,我们想提供一个指南,指导每种技术在当今的混合云环境中何时何地适用。

1、容器?太大的用不了!

也许,最简单的决策方法是根据应用程序的大小和复杂性。容器是一种应用程序打包技术。容器可以在没有Kube.NETes的情况下直接部署到操作系统中,而且通常有非常好和有效的理由来使用它们。这也是我们与Red Hat Enterprise Linux和Ansible的优势战略的一部分:容器是一种简单、可复制的部署软件的方式,同时最大限度地减少迁移部件。

不少其他类似的或是竞对的技术,具有许多相同的功能,如unikernel、Wasm等。因此,虽然容器可能是当今部署应用程序的正确方式,但随着该模型的优化和采用新类型的部署模型,未来可能会有一些变化。

简单地说,有些应用程序太大、太复杂,无法按原样放入容器中。我们通俗地称它们为单体。需要注意的是,这里没有技术限制:没有CPU/内存阈值,你会放弃容器。相反,这是基于代价的考量。

例如,一个安装程序将数据库加中间件加$thing1和$thing2等部署到一个服务器上,按原样进行容器化可能会很困难。可能需要对应用程序进行“现代化”,以解耦组件和/或采用对容器化更友好的应用程序框架和/或运行时。其中一个例子是将Java应用程序从SpringBoot移动到Quarkus。

2、不是所有的容器都要上K8s

开发者和管理者,无论他们是否采用了新兴起的云原生架构或DevSecOps方法,相信都会采纳容器,原因有很多。应用程序容器化的好处包括速度、安全性、可移植性和简单性。然而,这并不意味着将虚拟机彻底抛弃。

真正的问题在于,“我想把容器化应用程序部署到Kubernetes,还是直接部署到(虚拟化的)操作系统?”这里有很多因素需要考虑。

首先需要注意是应用程序的要求。应用程序是否需要作为一个单独的节点持续运行而不中断?Kubernetes不会在节点之间无中断地迁移应用程序组件。它们被终止并重新启动。如果你的应用程序不能容忍这种行为,那么Kubernetes就不适合了。

其次,考虑应用程序的各种组件的状态也很重要。如果有问题的应用程序依赖于第三方组件,那么这些组件可能会限制容器的使用。许多第三方供应商,尤其是在以虚拟机为中心的行业,在创建Kubernetes就绪/兼容版本的软件方面进展缓慢。这意味着你既可以部署虚拟机,也可以自己承担在Kubernetes中支持其软件的责任。

甚至在评估这些选项之前,认真审视一下组织内部可用的技能也是很重要的。你的团队是否具备处理Linux容器的技能和能力?你是否拥有或愿意为Kubernetes构建和获取必要的专业知识?这扩展到API驱动的消费和配置。你的应用程序和开发团队是否需要/想要使用API消费和配置平台的能力?

这在不管是私有云,还是公共云和Kubernetes中都是可能的,但通常更复杂、更难预处理,需要专业自动化团队的大量协作。当涉及到公共云时,团队需要在其使用的每个公共云中拥有特定的专业知识,从而增加了另一层需要管理的复杂性。这是一个Kubernetes可以同质化并进一步实现可移植性的领域。

3、基础设施效率

在大多数情况下,一个拥有数万到数千个实例的规模的应用程序在Kubernetes集群上运行的效率要比在虚拟机中运行的效率高得多。这是因为容器化组件被打包到可用资源中,并且需要管理和维护的操作系统实例更少。

此外,Kubernetes可以更无缝、更轻松地扩展和缩小应用程序。虽然可以创建新的虚拟机来扩展应用程序组件或服务的新实例,但这通常比Kubernetes慢得多,也更难。Kubernetes专注于在应用层实现自动化,而不是在虚拟化层,尽管KubeVirtualt也可以实现自动化。

基础设施效率也意味着成本影响。这对每个组织来说都是不同的,但对一些组织来说,减少虚拟机的数量将影响他们向操作系统供应商、系统管理程序供应商和硬件供应商支付的许可费。然而,这可能会也可能不会被Kubernetes的成本和管理它所需的人才所抵消。

在安全方面还有其他考虑因素。Kubernetes是一个共享的内核模型,其中许多容器表示许多应用程序在同一节点上运行。这并不是说它们不安全——Red Hat OpenShift和部署到Red Hat操作系统的容器利用了SELinux和其他安全功能。

然而,有时这还不足以满足安全需求和合规性需求。这留下了几个进一步隔离的选项:部署许多Kubernetes集群(很多人都这样做)、使用Kata容器等专门技术或使用完整的虚拟机。

4、写在最后:别轻易更改

无论你的组织有什么要求,也不管你为应用程序选择容器还是虚拟机,在企业软件世界中始终有一条基本规则在发挥作用:变革是困难的。有时,如果某个东西正在运行,就没有理由移动、更新或迁移它。如果你的应用程序在虚拟机上可靠地运行,并且公司没有推动将其迁移到其他地方,那么只要它能得到可靠的支持,也许它就可以在原地运行。

有时,组织内部变革的最佳场所并不在遗留应用程序的堆栈中,而是在新想法不断增长的绿地之中。但即使是那些绿色的田野,也必须以某种方式与旧谷仓相连。

然而,实际使用的技术并不一定会在这些绿地中有所建树。这样,找到一种在环境中同时支持容器和虚拟机的方法是很重要的,因为你可能犯的唯一真正错误是:完全忽略其中一种技术。

原文链接:https://thenewstack.io/contAIner-or-vm-how-to-choose-the-right-option-in-2023/



Tags:容器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22  Search: 容器  点击:(11)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  Search: 容器  点击:(13)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  Search: 容器  点击:(47)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  Search: 容器  点击:(78)  评论:(0)  加入收藏
Go微服务入门到容器化实践
Go微服务入门到容器化实践Go 是一门高效、现代化、快速增长的编程语言,非常适合构建 Web 应用程序。而 Docker 是一种轻量级的容器化技术,能够使得您的应用程序在任何地方运行...【详细内容】
2024-01-01  Search: 容器  点击:(63)  评论:(0)  加入收藏
容器的“边缘”
译者 | 布加迪审校 | 重楼近年来边缘计算和容器越来越受欢迎,为我们日常生活中与数据处理相关的各种挑战提供了创新的解决方案。这些技术现在已经渗入到各种设备中,包括我们的...【详细内容】
2023-12-25  Search: 容器  点击:(167)  评论:(0)  加入收藏
Docker容器如何打包应用程序的代码和依赖项?
Docker容器通过将应用程序的代码和所有依赖项打包到一个独立的软件包中,实现了应用程序的快速部署和移植。下面是Docker容器实现这一目标的步骤:打包应用程序:使用Docker工具将...【详细内容】
2023-12-20  Search: 容器  点击:(130)  评论:(0)  加入收藏
理解Go、容器以及Linux调度器
Go开发的应用程序通常部署在容器中。在容器中运行时,重要的一点是要设置CPU限制以确保容器不会耗光主机上的所有CPU。但Go运行时不知道容器上设置的CPU限制,因此有可能会把所...【详细内容】
2023-12-18  Search: 容器  点击:(122)  评论:(0)  加入收藏
Docker容器编排技术解析
一、容器编排介绍容器编排是现代云原生应用管理的核心,它涉及在大规模的环境中自动化部署、管理、扩展和网络配置容器。随着微服务架构的兴起和应用的复杂性增加,容器编排成为...【详细内容】
2023-12-15  Search: 容器  点击:(248)  评论:(0)  加入收藏
在Linux系统中实现容器化的大规模数据分析平台:Hadoop和Spark
在Linux系统中实现容器化的大规模数据分析平台,我们可以利用Hadoop和Spark这两个强大的开源工具。Hadoop是一个分布式计算框架,适用于处理大规模数据集。它提供了分布式文件系...【详细内容】
2023-12-15  Search: 容器  点击:(155)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(11)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(23)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(159)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(66)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(78)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(116)  评论:(0)  加入收藏
站内最新
站内热门
站内头条