在不少的交流中,我常常被问起一个问题:“你们的 SDN 云网络怎么支持 Docker?”近几年 Docker 的轻量化,快速部署的优势,得到了很多企业用户的青睐。甚至有不少人,会拿容器技术与传统的虚拟化进行多维度的 PK,当然这样的 PK 是没有结果的。技术活干久了,很明白一个道理,没有一个技术能解决所有的问题。Docker 的发展对云计算确实带来不少冲击,前不久的时速云,Daocloud,蜂巢云等存容器技术云更是火红一时。但是 Docker 自身的底层架构未完善,导致发展存在很多瓶颈。我们一直以来的观点是不应该把虚拟化与容器放在对立面看待。云计算 IaaS 层有足够的能力给 Docker 提供很好的支撑,Docker 应该更多地考虑如何发挥自身的轻和快的优势,底层网络问题应该交给云平台处理。这是我们面对 Docker 技术或容器技术该有的态度:“拥抱取暖,整合创新”。

我们需要给 Docker 一个位置,在云计算这样一个层次化非常清晰的架构体系中,Docker 或容器应该放在什么位置?

如下图所示:

图中,橙色部分就是容器在云中的位置。我们先看第一个,容器和虚拟化兼容平衡,容器和虚拟机一样可以使用云平台提供的计算,存储,网络资源。这样的方案在很多项目中,被用户广泛接受。实际项目中,用户考虑的情况绝对不是单一需求的。比方说用户的大数据业务需要高性能资源,同时需要一些轻量级的应用服务等。容器化的性能基本接近物理机性能,我们认为大数据的业务,可以放在容器中运行。此外一些轻量级的应用服务,他们的刚性需求是高可用,灵活迁移,性能需求低。这样的业务放在 kvm 虚拟化中运行更为合适。SDN 云网络负责支撑两者的网络业务。这样的方案,完全发挥的虚拟化与容器技术的优点。

说到这里,应该很多人会说 Docker 呢?Docker in VM 是一个大课题。Docker 集群运行在 VMs 上,Docker 就需要自管网络。Docker 的网络难题也由此而生。前段时间,我们在腾讯黑石云平台上部署我们自己云,那一段时间,我深深明白 Docker 网络的痛苦。云平台的网络是存在很多限制了,如 Port-mac 绑定,mac-ip 绑定,ARP 代理等。目前纵观所有的 Docker 的网络解决方案中,只有 Overlay 类型的网络能在云上正常使用。Overlay 的性能消耗是不可忽视的,此外 Overlay 的传输数据是无法被云平台的安全设备监控的。这样确实带来不少问题。但不可否认的是,即使存在潜在问题,Docker in VM 依然受到广泛的关注与认同。云平台提供的 ECS 服务占了很大一部分功劳。ECS 服务让 Docker 的集群生命周期管理变得非常简单。ECR 弹性容器镜像仓库实现不同租户有不同的镜像库使用权限,在私有云场景中,非常适合。

我先来总结一下 Docker in VM 的存在的问题:

1.Docker 集群的 Overlay 网络消耗大,路由的网络云网络限制。

2.Docker 集群的 Overlay 网络通讯安全设备难以识别。

3.Docker 集群的网络缺乏监控手段。

4.Docker in VM 经过一层虚拟化之后,丧失了 Docker 本身高效的特性。

我们一步一步来,先看网络问题。我们做一个大胆的假设,如果 SDN 云网络能管理 Docker in VM 网络那就是基本可以摆脱 Overlay 的问题。SDN 需要把手伸进 Docker in VM。这时候的想法很清晰了,我们 SDN 云网络提供弹性虚拟化网卡的能力,一台 VM 可以绑定多个 vNIC。我们把 vNic 直接塞给 Docker in VM。如下图:

看到这个图,我相信大家一定很兴奋,包括我自己。这就是 Docker in VM 结合云网络的方式。Docker 可以使用云网络提供的安全组,VPC,Gateway、Route、ACL、Vpcpeering 等网络功能,并且是 Underlay 网络,安全设备可以监控 Docker in VM 的流量。可以使用与 VM 不同的 VPC,实现业务管理分离。Docker in VM 无需自管网络了。云平台可以单独针对 Docker in VM 做流量监控。很庆幸的是,品高云最新版本已经支持 vNic passthrough for Docker in VM。

还有最后一个问题,Docker in VM 的性能损耗。经过一层虚拟化之后,Docker in VM 的发挥不出 Docker 高效的特性。我们回想一下 Docker 为什么要 in VM?因为 ECS 服务,通过 VM 创建 Docker 集群。在上文中我们提到过在品高云中,容器与 VM 是平等关系。最初设计的架构,其实我们已经支持 Docker in CM。结合 vNic passthrough for Docker in CM 的能力,ECS 服务的性能问题能够得到很好的解决。

云计算应该持有足够开放的态度,还是那句话“拥抱取暖,整合创新”。Docker 绝对不是颠覆云计算的技术。我们也不应该把 Docker 放在我们的对比面。大家可以看到,品高云提供的 VM/CM 平等化、vNic passthrough for Docker 以及 Docker in CM 的功能,他们本身的设计是与本身云计算的架构没有任何冲突性,都是沿用 IaaS 层基础能力。将能力开放出去,这是云计算多年来最擅长的技能。

  • 本文由品高云云架构产品部工程师林冬艺编写。林冬艺从 SDN 概念诞生以来一直关注和研究,目前在 Bingo Cloud SDN 云团队主要负责云网络、云网络安全、NFV、高性能云网络等的架构与设计。