发布于 2015-12-05 11:11:58 | 557 次阅读 | 评论: 0 | 来源: 网络整理
网络在数据中心基础设施中起着关键的作用,它–现在–超出了Mesos的范围去强调网络的安装问题、拓扑结构和性能。然而,Mesos可以轻松地与现有的网络解决方案集成,使诸如每个容器都有IP、任务颗粒的任务隔离和服务发现等功能生效。更经常的是,提供一个放之四海而皆准的网络解决方案是具有挑战性的。只有云计算的、本地部署的和混合的部署方案之间的要求和可选方案是不尽相同的。 Mesos对网络的支持的主要目标之一是为用户提供一个可插拔的机制,当用户需要的时候,他们可以定制网络方案。因此,从0.25.0版本开始,Mesos组件添加了几个扩展以提供网络支持。并且,所有的扩展是可选的,以保证更旧的没有网络支持的框架和应用可以与新的共存。 本文档的其它部分描述了所有涉及的组件的总体框架、每个容器都有IP的配置步骤、所需的框架改变。 如何运作? 一个关键的观察是,网络支持通过使用Mesos模块启用的,因此Mesos master和代理对它是完全不知情的。它完全由Mesos网络模块提供所需的支持。下一步,IP请求提供了哦一个最佳努力的方式提供。因此,该框架应愿意处理忽略(如模块不存在的情形)或拒绝(由于各种原因不能分配IP时)的请求。 为了最大程度地与现有的框架向后兼容,调度程序必须对每个容器的网络隔离是可选的。调度程序使用TaskInfo信息中的新数据结构实现网络隔离。 术语 • IP Address Management (IPAM)服务器 o 根据需要分配IPs o IPs 一被释放就回收 o (可选地使用给定的字符串/id对 IPs打标签 • IPAM客户端 o 与一个特定的 IPAM服务器紧耦合 o 在 “Network Isolator Module” 和IPAM 服务器之间充当桥梁 o 与服务器通信以请求/释放IPs • Network Isolator Module (NIM): o 代理实现Isolator 接口的Mesos模块 o 查看TaskInfos 以发现任务的 IP需求 o 与IPAM客户端通信以请求/释放IPs o 与外部网络虚拟器/隔离器通信,以启用网络隔离功能 • Cleanup模块: o 在代理丢失事件发生时负责清理工作(例如释放IPs),其它时候休眠 框架为容器请求IP地址
Cleanup模块与IPAM客户端通信以释放所有与丢失代理有关的IP地址。 IPAM在回收IP地址之前,可能会有一个宽限期。 配置 网络隔离模块不是标准的Mesos分部的一部分。然而,在https://github.com/mesosphere/net-modules有一个实现样例。 一旦网络隔离模块被嵌入到一个共享的动态库中,我们可以把它加载到Mesos Agent (/documentation/latest/ 在[modules documentation,http://mesos.apache.org/documentation/latest/modules/]中查阅关于搭建和加载一个模块的说明)。 使框架具备每个容器一个IP的能力 NetworkInfo 一个新的NetworkInfo message被引入了: message NetworkInfo { enum Protocol { IPv4 = 0, IPv6 = 1 }
optional Protocol protocol = 1;
optional string ip_address = 2;
repeated string groups = 3;
optional Labels labels = 4; }; 从IPAM中请求IP地址的时候,需要将protocol域设置为IPv4 or IPv6。如果 NIM支持的话,将 ip_address设置成一个有效的IP地址可以让框架为每个容器指定一个静态的IP 地址。当一个任务哪怕是在被杀死然后在另外一个不同的节点重启的时候,它也必须绑定一个特定的IP地址的时候,这是很有用的。 指定网络要求的例子 想为每个容器提供IP的框架,需要在TaskInfo中提供NetworkInfo信息。以下是一些例子:
message TaskStatus { ... optional ContainerStatus container; ... }; 进一步地,容器IP地址也是通过Master的状态端点暴露的。Master的状态端点JSON输出包含了一个任务状态列表。如果一个任务容器以它自己的IP地址开始,那么被分配的IP地址将会作为TASK_RUNNING状态的部分内容暴露。 注意:由于框架对每个容器具有地址是严格可选的,如果没有一开始就设置好NetworkInfo,框架可能会忽略StatusUpdate提供的IP地址。 写一个自定义的网络隔离模块 网络隔离器模块实现Mesos提供的Isolator接口。该模块作为一个动态共享库加载到Mesos代理中,并被挂在容器启动序列中。为了满足框架的需求,网络隔离器可能要与外部IPAM和网络虚拟器进行通信。 就Isolator API而言,一个网络隔离器需要实现三个关键的回调: