Rudder:简化集群中容器的网络配置

阅读数:1249 2014 年 9 月 3 日

话题:DevOps语言 & 开发架构Kubernetes

与 Docker 相关的开源软件越来越多,Docker 的生态圈也越来越成熟。近日,CoreOS 团队又发布了一款重量级工具Rudder,Rudder 是基于 etcd 的覆盖网络 (overlay network),它能为每个使用容器调度服务 (Kubernetes) 的主机提供一个子网。Rudder 简化了集群中 Docker 容器的网络配置,更可以大幅度减少端口映射方面的工作。

网络桥接(bridge)是 Docker 容器默认的网络模式。当 Docker 启动时,它会在宿主机器上创建一个名为 docker0 的虚拟网络接口,并随机选择一个 IP 地址和子网掩码。通过 docker0,容器即可与主机进行通信。基本的网络配置 Docker 可以自动完成,但是一些其它的配置比如端口映射就需要手动指定了。如果在一个集群中每个 Docker 容器都需要配置端口映射,那将会是一个复杂而又庞大的工作。

如何在管理集群中 Docker 容器的网络一直是个难点,谷歌的 Kubernetes 解决了容器的集群管理问题,现在 CoreOS 发布了 Rudder,它可以为集群中的每个主机都创建一个覆盖 Mesh 网络并指定一个子网,也就是说 Kubernetes 集群中的每个主机都有一个完整的子网,例如机器 A 和 B 可以有 10.0.1.0/24 和 10.0.2.0/24 子网。

Rudder 基于 CoreOS 的分布式键值存储系统 etcd 构建,并使用 UDP 通信。etcd 用于存储配置数据以及子网分配信息。一旦 Rudder 启动,Rudder 的守护进程会检索配置信息以及正在使用的子网列表,Rudder 会随机选择一个可用的子网并在 etcd 中注册。如果注册成功,Rudder 会在接下来的 24 小时内使用它。如果注册失败,这证明其它的主机已经注册成功,失败的主机需要重新选取并注册。在子网地址失效之前,如果主机仍需要使用此地址,它会通过一个更新操作来延长使用期。

CoreOS 已经在其内部环境中对 Rudder 进行了测试,尽管 Rudder 会带来一丁点的网络延迟,但是吞吐量基本没有影响。下面是官方在 AWS m3.medium VM 上使用qperf 工具进行测试的测试结果:

目前 Rudder 只支持 GCE,官方也承诺后续会支持其它的云平台。CoreOS 的生态圈(Docker+CoreOS+Kubernetes+Rudder)里又加一员猛将,Hacker News上也有很多的讨论,读者可以自行阅读。