我试图对容器技术有一个很好的了解,但有些困惑。似乎某些技术重叠了堆栈的不同部分,并且可以在DevOps团队认为合适的情况下使用不同技术的不同部分(例如,可以使用Docker容器,而不必使用Docker引擎,可以使用云提供商的引擎代替)。我的困惑在于了解“容器堆栈”的每一层提供什么以及每种解决方案的关键提供者是谁。
这是我的外行的理解;希望对我的理解有任何更正和反馈
最佳答案
这可能会有点长,并且存在一些过分简化的问题,但应该足以使您理解。
物理机器
前一段时间,部署简单应用程序的最佳方法是简单地购买一个新的Web服务器,在其上安装您喜欢的操作系统,然后在其中运行应用程序。
该模型的缺点是:
受物理机器规格直接影响的应用程序可能需要进行特定的调整,重新编译等,这意味着集群管理员需要将它们视为单个机器级别的实例。因此,这种方法无法扩展。这些特性使得它对于部署现代生产应用程序而言是不可取的。
虚拟机
虚拟机解决了上述一些问题:
但是他们引入了一些自己的问题:
(这可能仅对于某些类型的应用程序是一个问题)
(这不是该方法的缺点,而是现有的虚拟化工具的缺点。)
货柜
然后,沿着这条线的某个地方,将cgroups (control groups)添加到了Linux内核中。通过此功能,我们可以将组中的进程隔离开来,确定它们可以看到哪些其他进程和文件系统,并在组级别执行资源统计。
随之而来的是各种容器运行时和引擎,这使得在OS中创建“容器”,环境(如 namespace ,可见性,资源等有限)的过程非常容易。这些的常见示例包括docker,rkt,runC,LXC等。
例如,Docker包括一个守护程序,该守护程序提供诸如创建“图像”之类的交互,该可重用实体可以立即启动到容器中,而可重复使用实体。它还使人们能够以一种直观的方式管理各个容器。
容器的优点:
也有一些缺点:
容器编排
在生产环境中运行应用程序时,随着复杂性的增加,它倾向于具有许多不同的组件,其中某些组件会根据需要进行放大/缩小,或者可能需要进行缩放。容器本身并不能解决我们所有的问题。我们需要一个能够解决与大型应用程序相关的问题的系统,例如:
当我们要管理容器集群时,我们使用容器编排引擎。这些示例包括Kubernetes,Mesos,Docker Swarm等。除了上面列出的功能之外,它们还提供了许多功能,目标是减少开发人员的工作量。
GKE(Google容器引擎)托管在Google Cloud Platform上的Kubernetes。它使用户可以简单地指定他们需要一个n节点kubernetes集群,并将该集群本身公开为托管实例。 Kubernetes is open source,如果愿意的话,还可以在Google Compute Engine,其他云提供商或他们自己的数据中心内的计算机上进行设置。
ECS是由Amazon构建和运营的专有容器管理/编排系统,可作为AWS套件的一部分使用。
关于docker - 容器技术: docker, rkt, orchestration, kubernetes, GKE and AWS Container Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40164597/