![](/img/trans.png)
[英]Openshift PaaS/Kubernetes Docker Container Monitoring and Orchestration
[英]Container technologies: docker, rkt, orchestration, kubernetes, GKE and AWS Container Service
我正在努力了解容器技术,但有点困惑。 看起来某些技术会重叠堆栈的不同部分,并且可以使用不同技术的不同部分,因为DevOps团队认为合适(例如,可以使用Docker容器但不必使用Docker引擎,可以使用来自云提供商的引擎)代替)。 我的困惑在于理解“容器堆栈”的每一层提供的内容以及每个解决方案的关键提供者。
这是我的外行人的理解; 我会理解在理解中对漏洞的任何更正和反馈
这可能有点长,并且有些过于简单,但应该足以让我们了解这个想法。
前一段时间,部署简单应用程序的最佳方法是简单地购买新的Web服务器,在其上安装您喜欢的操作系统,然后在那里运行您的应用程序。
该模型的缺点是:
这些进程可能会相互干扰(因为它们共享CPU和文件系统资源),并且可能会影响其他进程的性能。
上/下扩展此系统也很困难,需要花费大量精力和时间来设置新的物理机器。
硬件规格,OS /内核版本和物理机的软件包版本可能存在差异,这使得难以以硬件无关的方式管理这些应用程序实例。
直接受物理机器规范影响的应用程序可能需要特定的调整,重新编译等,这意味着集群管理员需要将它们视为单个机器级别的实例。 因此,这种方法不能扩展。 这些属性使其不适合部署现代生产应用程序。
虚拟机解决了上述一些问题:
但是他们引入了一些自己的问题:
即使使用硬件辅助虚拟化,应用程序实例也可能会在直接在主机上运行的应用程序中显着降低性能。 (这可能仅适用于某些类型的应用程序)
打包和分发VM映像并不是那么简单。 (这不是该方法的缺点,因为它是现有的虚拟化工具。)
然后,沿着这条线的某个地方, cgroups(控制组)被添加到linux内核中。 此功能允许我们隔离组中的进程,确定他们可以看到的其他进程和文件系统,并在组级别执行资源记帐。
各种容器运行时和引擎的出现使得创建“容器”的过程,操作系统中的环境,如具有有限可见性,资源等的命名空间,非常容易。 这些常见的例子包括docker,rkt,runC,LXC等。
例如,Docker包括一个守护进程,它提供了诸如创建“图像”之类的交互,这是一个可以立即启动到容器中的可重用实体。 它还允许以直观的方式管理单个容器。
容器的优点:
还有一些缺点:
在生产中运行应用程序时,随着复杂性的增加,它往往会有许多不同的组件,其中一些组件会根据需要进行扩展/缩小,或者可能需要进行扩展。 容器本身并不能解决我们所有的问题。 我们需要一个能够解决与真实大规模应用相关的问题的系统,例如:
当我们想要管理容器集群时,我们使用容器编排引擎。 这些例子包括Kubernetes,Mesos,Docker Swarm等。除了上面列出的功能外,它们还提供了许多功能,目标是减少开发人员的工作量。
GKE(Google容器引擎)在Google Cloud Platform上托管了Kubernetes。 它允许用户简单地指定他们需要一个n节点kubernetes集群,并将集群本身公开为托管实例。 Kubernetes是开源的 ,如果有人愿意,也可以在Google Compute Engine,不同的云提供商或他们自己的数据中心的机器上进行设置。
ECS是由亚马逊构建和运营的专有容器管理/编排系统,可作为AWS套件的一部分提供。
要具体回答你的问题:
Docker引擎:一种管理docker容器和docker镜像生命周期的工具。 创建,重新启动,删除docker容器。 创建,重命名,删除泊坞窗图像。
rkt:类似于docker引擎,但实现方式不同
Kubernetes:一组管理使用容器的分布式应用程序生命周期的工具。 包含用于管理容器,容器组,容器配置,编排容器,在实际实例上安排工具,工具以帮助开发人员编写和维护其他服务/工具来处理容器的工具。
谷歌容器引擎:不是获取虚拟机,而是在它们上面安装“docker-engine”,在它们上面安装kubernetes并将它们全部用于基础设施的正确权限之类的事情等等。想象一下如果这一切都汇集在一起以便你可以选择具有所有这些功能的机器类型和集群大小正常工作。 从项目特定的docker存储库(谷歌容器注册表)中提取图像或声明持久性卷或配置负载平衡器等工作只需要工作而不必担心服务帐户和权限。
ECS:类似于GKE(4),但没有Kubernetes。
为了解决你的理解中的要点:你对事物的看法是正确的(我认为容器引擎除外)。 重要的是要理解,唯一需要理解的是容器是什么。 其余部分只是营销/产品名称。 同样重要的是要理解今天对容器的理解是由Docker容器以及Docker和Docker工具强制执行的许多意见所引起的。 容器已存在很长时间了。
因此,一旦你理解了(docker)容器是什么,容器引擎只是一个管理它们的工具,容器集群只是一组容器,orchestrator只是一个管理容器基于某些参数运行的工具。 恕我直言,一旦你理解并建立一个围绕容器的坚实心智模型,你真的不需要太担心其余的工具是什么。 其余的将自动适应。
理解这一切的最好方法是什么? 使用Docker构建和部署一个相当复杂的应用程序(持久化数据/在您的应用程序中使用数据库),一切都会有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.