架构设计
1.1 Kubernetes
Google 设计 Kubernetes 基于两个非常重要的经验:一是 Google 多年来运行大型分布式系统的经验,二是支撑快速更新、敏捷迭代的云原生应用的经验。前者保证了 Kubernetes 平台本身的稳定性和扩展性,后者保证了 Kubernetes 平台对其使用者(运维人员/开发人员)的有效性。
Kubernetes 在内部组件结构上分为:
Pod
o 一组包括一个或多个的容器组
o 共享网络全名空间
o 调度的最小单元
Service
o 为一组 Pod 的逻辑抽象
o 将应用服务解耦
Kube Proxy
o 宿主机上运行一个简单的网络代理及负载均衡器为 Services 提供负载均衡
o 为外部请求负载到具体的 Pod 上, 具体实现为
• Kube Proxy 为 Service IP 生成 Lptables 规则
• 将请求转发到本地的 Kubeproxy
• Kube Proxy 进行 NAT 转换,最后将请求交到后台具体 Pod 上
• Kubelet
o 宿主机上管理 Pod 及其容器、镜像、存储等等
Etcd
o 分布式键值对存储方案
o 用于持久化 Master 的状态数据
o 支持 Watch 操作来完成组件内部的服务协作
API Server
o Kubernetes Master 的组件之一
o 用于响应内部组件或外部插件的 Kubernetes API 的调用
o 主要是处理 REST 请求
• 对请求进行身份较验,并更新到分布式存储中(ETCD)
Scheduler
o Kubernetes Master 的组件之一
o 通过/Binding API,将未被调度的 Pod 绑定到某一节点上
o 支持可插拔
Controller Manager
o 支持节点的发现与监控
o 支持 Endpoints 的创建与更新
o 控制 Pod 的伸缩
1.2 Docker Swarm
Docker Swarm 基于 Docker 提供的原生集群能力,将一组 Docker 引擎变成一个虚拟的 Docker 引擎。Swarm 使用标准的 Docker API, 使用正常的 Docker 命令来运行 Docker 容器,也会选择一个适合的节点来运行容器
Docker Swarm 在内部组件结构上分为:
Swarm Manager
o Swarm 集群的 Master
o 负责编排调度 Docker 容器
o 服务发现
Swarm Agent
o 接收 Swarm Manager 指令并运行 Docker 容器
服务协调工具
o 可以是 Consul、Etcd 或 Zookeeper
1.3 Apache Mesos
Apache Mesos 是一个大规模集群的开源管理平台,集群量级可以从几百台到几千台,Mesos 能支持不同类型的任务框架,比如计划任务、长时间运行的任务等等,即 Mesos 的架构设计是解决高可用和弹性等问题,架构图如下:
Apache Mesos 在内部组件结构上分为:
Mesos Master
o 发送工作任务给 Agent Nodes
o 维护一张资源列表,并提供给具体的 Framework 使用,例如 Hadoop 或 Marathon
o Mesos 根据当前的资源分配策略决定分配多少资源
Mesos Agent Node
o 执行工作任务
o 向 Master 报告本节点的可用资源列表
Zookeeper
o Mesos Master 实例间竞选谁为真正的 Master
Frameworks
o Mesos 需要与 Framework 协同完成具体任务的分发
• 调度器向 Master 注册,根据当前可用资源列表选择使用某一资源
• 执行进程运行在 Agent 上,并监控任务的执行情况
Mesos 可有多个 Framework 同时运行在同一个 Mesos 管理的资源上,用户提交任务其实是与 Framework 交互并不是 Mesos,从上面的架构图中可以看出,Mesos 需要与 Marathon 一同实现容器编排工具的功能,Marathon 做为 Scheduler,通过向 Zookeeper 获取到真实 Mesos Master 信息,并向 Mesos Master 提交任务,当 Marathon 与 Mesos Master 同是 Ready 的状态,才能开始编排容器。
Marathon 被设计用于启动、监控长时运行的应用,包括云原生应用,客户端通过 Marathon Rest API 与 Marathon 交互。
2. 功能列表
结论
Kubernetes 与 Mesos+Maratho 和 Docker Swarm 三类开源项目在容器编排需要的功能点上看,Mesos+Marathon 与 Docker Swarm 在很多功能支持程度不如 Kubernetes,需用户做出妥协。
本文转载自才云 Caicloud 公众号。
原文链接:https://mp.weixin.qq.com/s/-axBm-VxALTuYd2O_Ia3VA
评论