Docker Swarm是Docker自己的Docker容器本地集群解决方案,具有与Docker生态系统紧密集成并使用自己的API的优势。它监视跨服务器群集的容器数量,是在没有其他硬件的情况下创建群集docker应用程序的最便捷方式。它为Dockerized应用程序提供了一个小规模但有用的编排系统。
- 以更快的速度运行:
当您使用虚拟环境时,您可能已经意识到它需要很长时间,并且包括启动和启动您要运行的应用程序的繁琐程序。使用Docker Swarm,这不再是一个问题。Docker Swarm消除了启动完整虚拟机的需要,使应用程序能够快速在虚拟和软件定义的环境中运行,并有助于DevOps实施。
- 文档提供了所有信息:
Docker团队在文档方面脱颖而出!Docker正在迅速发展,并为整个平台赢得了热烈的掌声。当版本在很短的时间间隔内发布时,某些平台不会维护文档。但是Docker Swarm从未与它妥协。如果该信息仅适用于Docker Swarm的某些版本,则文档会确保更新所有信息。 提供简单快速的配置: Docker Swarm的一个主要优点是它简化了问题。Docker Swarm使用户可以自己配置,将其放入代码中并轻松部署。由于Docker Swarm可以在各种环境中使用,因此需求不受应用程序环境的约束。
- 确保应用程序是孤立的:
Docker Swarm注意每个容器与其他容器隔离并拥有自己的资源。可以部署各种容器以在不同堆栈中运行单独的应用程序。除此之外,当每个应用程序在自己的容器上运行时,Docker Swarm会清除应用程序删除。如果不再需要该应用程序,则可以删除其容器。它不会在您的主机操作系统上留下任何临时或配置文件。
- 版本控制和组件重用:
使用Docker Swarm,您可以跟踪容器的连续版本,检查差异或回滚到先前版本。容器重复使用前面层中的组件,这使得它们显着轻量级。
- Docker依赖于平台:
Docker Swarm是一个Linux激动人心的平台。虽然Docker支持Windows和Mac OS X,但它利用虚拟机在非Linux平台上运行。设计为在Windows上的Docker容器中运行的应用程序无法在Linux上运行,反之亦然。
- 不提供存储选项:
Docker Swarm不提供将容器连接到存储的无障碍方式,这是主要缺点之一。其数据量需要在主机和手动配置上进行大量即兴创作。如果您期望Docker Swarm解决存储问题,可能会以高效且用户友好的方式完成。
- 监控不良:
Docker Swarm提供有关容器的基本信息,如果您正在寻找基本的监控解决方案,那么Stats命令就足够了。如果您正在寻找高级监控,那么Docker Swarm永远不是一个选择。虽然有像CAdvisor这样的第三方工具可以提供更多监控,但使用Docker本身实时收集有关容器的更多数据是不可行的。
自动化容器部署,扩展和管理平台
当在多台机器上的多个容器中使用不同组件开发应用程序时,需要该工具来管理和协调容器。这只有在Kubernetes的帮助下才可行。
Kubernetes是一个用于管理集群环境中的容器化应用程序的开源系统。以正确的方式使用Kubernetes可帮助DevOps即服务团队自动扩展应用程序并以零停机时间进行更新。
- 它的速度很快:
在不停机的情况下持续部署新功能时,Kubernetes是一个完美的选择。Kubernetes的目标是以恒定的正常运行时间更新应用程序。它的速度通过您每小时可以运送的许多功能来衡量,同时保持可用的服务。 遵循不可变基础架构的原则:以传统方式,如果多个更新出现任何问题,您就没有任何记录显示您部署了多少更新以及发生了哪个错误。在不可变基础结构中,如果您希望更新任何应用程序,则需要使用新标记构建容器映像并进行部署,从而使用旧映像版本终止旧容器。通过这种方式,您将获得一份记录,并了解您所做的事情以及是否有任何错误; 您可以轻松回滚到上一个图像。 提供声明性配置:用户可以知道系统应该处于什么状态以避免错误。作为传统工具的源代码控制,单元测试等不能与命令式配置一起使用,但可以与声明性配置一起使用。
- 大规模部署和更新软件:
由于Kubernetes具有不可变的声明性,因此扩展很容易。Kubernetes提供了一些用于扩展目的的有用功能:
- 水平基础架构缩放:
在单个服务器级别执行操作以应用水平缩放。可以毫不费力地添加或分离atest服务器。
- 自动扩展:
根据CPU资源或其他应用程序指标的使用情况,您可以更改正在运行的容器数
- 手动缩放:
您可以通过命令或界面手动缩放正在运行的容器的数量
- 复制控制器:
复制控制器确保群集在运行条件下具有指定数量的等效窗格。如果存在太多pod,则复制控制器可以删除额外的pod,反之亦然。
- 处理应用程序的可用性:
Kubernetes检查节点和容器的运行状况,并在由于错误导致的盒中崩溃时提供自我修复和自动替换。此外,它在多个pod之间分配负载,以便在意外流量期间快速平衡资源。
- 存储卷:
在Kubernetes中,数据在容器之间共享,但如果pod被杀死,则会自动删除卷。此外,数据是远程存储的,因此如果将pod移动到另一个节点,数据将保留,直到用户删除为止。
- 初始过程需要时间:
创建新进程时,您必须等待应用程序开始,然后才能供用户使用。如果要迁移到Kubernetes,则需要对代码库进行修改,以使启动过程更有效,这样用户就不会有糟糕的体验。
- 迁移到无状态需要付出很多努力:
如果您的应用程序是群集或无状态的,则不会配置额外的pod,并且必须在应用程序中重新配置。
- 安装过程繁琐:
如果您不使用Azure,Google或Amazon等任何云提供商,则很难在群集上设置Kubernetes。
Docker Swarm | Kubernetes | |
---|---|---|
由开发 | Docker公司 | 谷歌 |
发布年份 | 2013 | 2014 |
公司使用 | Bugsnag,Bluestem Brands,Hammerhead,Code Picnic,Dial once等。 | Asana,Buffer,CircleCI,Evernote,Harvest,Intel,Starbucks,Shopify等 |
调节器 | Manager | Master |
存储 | Volumes | Persistent and Ephermal |
公共云服务提供商 | Google,Azure,AWS,OTC | Azure |
兼容性 | 不那么广泛和可定制 | 更广泛和高度可定制 |
安装 | 易于设置 | 需要时间安装 |
容差率 | 低容错性 | 高容错性 |
大集群 | 速度被认为是强群集状态 | 即使在大型集群中也提供容器部署和扩展,而不考虑速度 |
负载均衡 | 当容器中的pod定义为服务时提供负载平衡 | 通过群集中的任何节点提供自动内部负载平衡 |
部署单位 | 任务 | 荚 |
端口 | 发布的端口 | 端点 |
网络 | 覆盖 | 平面网络空间 |
社区 | 活跃的用户群,定期更新各种应用程序的图像 | 获得开源社区和谷歌,亚马逊,微软和IBM等大公司的大力支持 |
弱点 | 没有供应商的认证计划。大多数组织需要商业认证版本 | 倾向于开发人员而不是中央IT |
优势 | 主要由可以决定产品方向的单一供应商控制 | 明确的市场领导者 最大的采用和兴趣 |
奴隶 | 工人 | 节点 |
容器设置 | 功能由Docker API提供并受其限制 | 客户端API和YAML在Kubernetes中是唯一的 |
可扩展性 | 即使在大型容器中也可以快速部署容器 | 以牺牲速度为代价为群集状态提供强有力的保证 |
- 您正在寻找成熟的部署和监控选项
- 您正在寻找快速可靠的响应时间
- 您正在寻求开发复杂的应用程序,并且需要高资源计算而不受限制
- 你有一个非常大的集群
- 您希望在不花费太多时间进行配置和安装的情况下启动工具;
- 您正在寻找开发一个基本和标准的应用程序,它足够使用默认的docker镜像;
- 在不同的操作系统上测试和运行相同的应用程序对您来说不是问题;
- 您需要zdocker API经验和兼容性。
无论您选择Kubernetes还是Docker,两者都被认为是最好的并且具有相当大的差异。决定两者之间的最佳方法可能是考虑哪一个你已经知道更好,哪一个适合你现有的软件堆栈。如果您需要开发复杂的应用程序,请使用Kubernetes,如果您希望开发小型应用程序,请使用Docker Swarm。此外,选择合适的任务是一项非常全面的任务,完全取决于您的项目要求和目标受众。
Kubernetes使用Docker作为主要的容器引擎解决方案,Docker最近宣布它可以支持Kubernetes作为其企业版的编排层。除此之外,Docker还批准了经过认证的Kubernetes程序,该程序可确保所有Kubernetes API按预期运行。Kubernetes使用Docker Enterprise的功能,如安全映像管理,其中Docker EE提供图像扫描,以确保容器中使用的映像是否存在问题。另一个是安全自动化,其中组织可以消除低效率,例如扫描图像是否存在漏洞。