没有合适的资源?快使用搜索试试~ 我知道了~
Kubernetes、Mesos和Swarm:Rancher编排引擎的比较
10 下载量 42 浏览量
2021-02-25
19:03:46
上传
评论
收藏 242KB PDF 举报
温馨提示
试读
12页
【编者的话】Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、扩展机制等功能。Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm一起发布的Docker管理工具还有Machine以及Compose。我们来看下Rancher对它们有什么评价。Rancher最新的版本在原有官方标准编排工具Cattle的基础上,新增支持其他几种常用的编排引擎。新增支持的编排引擎包括Swar
资源推荐
资源详情
资源评论
Kubernetes、、Mesos和和Swarm::Rancher编排引擎的比较编排引擎的比较
【编者的话】Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能。Mesos是
Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的
AMPLab开发的,后在Twitter得到广泛使用。Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm
一起发布的Docker管理工具还有Machine以及Compose。我们来看下Rancher对它们有什么评价。
Rancher最新的版本在原有官方标准编排工具Cattle的基础上,新增支持其他几种常用的编排引擎。新增支持的编排引
擎包括Swarm(Docker未来本地编排引擎)、Kubernetes和Mesos,它们都是Docker社区中最广泛使用的编排系统,
满足用户不同梯度的使用性和特性。尽管Docker是既定事实上的行业容器标准,但是在容器编排上还没有绝对的赢
家。这篇文章中我们我们主要介绍三种编排工具的特性,以及适应的场景。
目前Docker原生编排还处于初期阶段,但是新的特性在快速迭代增加中。由于原生的编排工具是官方系统的一部分,
因此它成为众多开发者的默认首选编排工具,顺理成章地最有可能成为最受社区欢迎支持的工具。Kubernetes是谷歌
支持的容器编排工具,它在众多容器编排工具中用的最广泛的一个。最近,Mesos和Mesosphere(Marathon的开源
版)把更多的精力放在服务管理,将更多的功能留给可插拔插件和应用程序管理。这样的话,就使得应用最终容易容
易定制部署,因为单个的程序更容易被更新,定制化。然而,这也意味着我们必须要修改一些设置来适配。
Kubernetes更关注的是如何构建集群和在常见场景中用例的通用系统集成。
Docker Native Orchestration
基础架构
Docker 1.12引擎中附带了原生的编排工具,对独立的Docker Swarm来说是一种替代。Docker本地集群(Swarm)包
涵一系列节点(Docker进程/守护进程),他们同时管理集群及提供工作服务。你可以在容器中启动工作进程也可以启
动管理进程维护集群的状态。多管理模式保证了系统的高可用性,但是不推荐超过7个以上管理员用户。内部通过
RAFT算法实现主从的一致性。与所有一致性的算法是一样的,多管理中心达到一致性的实现。实际上保持内部管理的
一致也意味着Docker本地的编排不依赖外部资源,这样也是集群的管理变得更加容易。
可用性
Docker本机使用单节点Docker的概念,并将它们扩展到Swarm。如果你使用最新的Docker版本,那么学习曲线还是相
当平缓的。一旦你想添加已经在多节点运行的Docker到Swarm中,Swarm的设置是很简单的:你只需在其中一个节点
上调用docker swarm init,然后在任何其他你想添加的节点上调用docker swarm join即可。您也可以使用相同的
Docker Compose模板和相同的Docker CLI命令集设计单一的Docker。
功能集
Docker本地可以使用与Docker Engine和Docker Compose相同的语法提供编排支持。你仍然可以链接到服务,创建
卷,定义开放的端口号。所有的这些操作都适用于单个的节点,除了这些新增了两个新的概念:服务和网络。
Docker服务是您的节点上启动的一组容器,并且保持这些批量的容器运行。如果其中一个容器停止,它将被自动替换
掉。其中服务分类两类:复制和全局。复制服务在集群中维护指定数量的容器,因为全局服务在每个集群节点上运行
一个实例。要创建复制服务,请使用下面的命令:
docker service create \
–name frontend \
–replicas 5 \
-network my-network \
-p 80:80/tcp nginx:latest.
现在可以使用docker network create –driver overlay NETWORK_NAME创建命名为overlay的网络。使用overlay网络
我们可以创建一个孤立、扁平、加密的虚拟网络环境用来启动容器。你可以使用约束和标签来做一些非常基本的容器
调度。使用约束可以向服务添加关联,并且它将尝试仅启动具有特殊标签的容器。
docker service create \
–name frontend \
–replicas 5 \
-network my-network \
--constraint engine.labels.cloud==aws \
--constraint node.role==manager \
-p 80:80/tcp nginx:latest.
此外,你可以使用保留的CPU和保留的内存空间标志来定义服务的每个容器使用的资源,以便在swarm上启动多个服
务时,容器可以处理最小的资源竞争。
你可以使用以下命令进行初步的部署。这样将会更新容器的镜像,但是两个容器之间有10s的间隔来更新两个容器。然
而,health-checks和自动回滚都不支持。
docker service update \
–name frontend \
–replicas 5 \
-network my-network \
--update-delay 10s \
--update-parallelism 2 \
-p 80:80/tcp nginx:other-version.
Docker使用卷驱动程序支持外部卷持久化,并且使用mount服务命令扩展器使用。执行以下代码段将会将NFS装入到
您的容器中。请注意,这需要在Docker外部的底层主机上设置NFS。在没有主机支持的情况下,其他对Amazon EBS
卷或Google容器引擎卷驱动程序也能够工作。此外,这个功能还没有完善的文档,可能需要需要在github的docker项
目上创建issues得到交流回复。
--mount type=volume,src=/path/on/host,volume-driver=local,\
dst=/path/in/container,volume-opt=type=nfs,\
volume-opt=device=192.168.1.1:/your/nfs/path
基础架构
从概念上讲,Kubernetes有点类似于Swarm,它使用一个带有RAFT的管理器(主)节点来达成一致。然而,相似的
地方也只有这么多了。Kubernetes使用外部etcd集群为此目的。此外,你将需要Kubernetes外部的网络层,这样
overlay 网络就行编织法兰绒外衣一样。使用这些外部工具,您可以启动Kubernetes主组件; API服务器,控制器管理器
和调度程序。这些通常作为主节点上的Kubernetes pod运行。除了这些,你还需要在每个节点上运行kubelet和
kubeproxy。如果需要的话,工作节点只运行Kubelet和Kubeproxy以及像一个包装一样作为网络层提供者。
在这个设置中,kubelet将控制给定节点上的容器(或者pod)与主控制器上的控制器管理器。主节点上的调度器负责
资源分配和平衡,并且将帮助在具有最多可用资源的工作节点上放置容器。 API控制器是您的本地kubectl CLI将向集
群发出命令的地方。最后,kubeproxy用于为Kubernetes中定义的服务提供负载平衡和高可用性。
可用性
从头开始设置Kubernetes是一个不平凡的努力,因为它需要设置etcd,网络插件,DNS服务器和证书颁发机构。从头
开始设置Kubernetes的详细信息可以在这里,但幸运的是Rancher为我们完成所有这些设置。我们在前面的文章中介
绍了如何设置Kubernetes集群。
除了初始设置,Kubernetes仍然有一些陡峭的学习曲线,因为它使用自己的术语和概念。 Kubernetes使用资源类型,
如Pods,部署,复制控制器,服务,守护进程集等来定义部署。这些概念不是Docker专门词汇的一部分,因此您需要
在开始创建第一个部署之前熟悉它们。此外,一些命名与Docker冲突。例如,Kubernetes服务不是Docker服务,也是
概念上不同的(Docker服务更贴近地映射到Kubernetes世界中的Deployments)。此外,您使用kubectl而不是docker
CLI与集群交互,并且必须使用Kubernetes配置文件而不是docker compose文件。
Kubernetes有这样一套详细的概念独立于core Docker,这本身不是一件坏事。 Kubernetes提供比core Docker更丰富
的功能集。然而,Docker将添加更多的功能来与Kubernetes竞争,具有不同的实现和不同或冲突的概念。这将几乎肯
定重复CoreOS / rkt情况,大部分社区在类似但竞争的解决方案。今天,Docker Swarm和Kubernetes定位于不同的使
用场景(Kubernetes更适合于使用专用集群管理团队的面向服务的架构的大型生产部署),但是随着Docker 本地编排
的成熟,它将迁移到这个空间。
功能集
Kubernetes的完整功能集太大,这篇文章不能涵盖完整,但我们将介绍一些基本概念和一些有趣的区分。首
先,Kubernetes使用Pods的概念作为基本单位,而不是单个容器。每个pod是一组容器(集合大小可以是一个),它
们总是在同一节点上启动,共享相同的卷并分配一个虚拟IP(VIP),以便可以在集群中寻址。单个pod的Kubernetes
规范文件可能如下所示:
kind: Pod
metadata:
name: mywebservice
spec:
containers:
- name: web-1-10
image: nginx:1.10
ports:
- containerPort: 80
接下来是你的部署。这些松散地映射具体到什么服务是在Docker本地编排。您可以像Docker Native中的服务一样扩展
部署,部署将确保正在运行的请求数量的容器。重要的是注意部署仅类似于Docker本地中的复制服务,如Kubernetes
使用守护程序集概念来支持其等效的全局调度服务。部署还支持使用HTTP或TCP可达性或自定义exec命令来确定容
器/ pod是否正常的运行状况检查。部署还支持使用运行状况检查的自动回滚滚动部署,以确定每个pod部署是否成
功。
剩余11页未读,继续阅读
资源评论
weixin_38667408
- 粉丝: 8
- 资源: 896
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功