网易蜂巢基于万节点kubernetes支撑大规模云应用实践

私有云平台建设

这是私有云平台资源弹性架构图。网易数据中心开始建立起来时就是朝着五星级数据中心建立的,所以硬件层非常好,实现了全万兆互联、全SSD存储。如果在蜂巢平台上订购一个容器,存储都是SSD的,性能非常棒。计算虚拟化、网络虚拟化、存储虚拟化,基本的OpenStack都会做这三层。把KVM作为计算存储化、OpenVswitch作为网络存储化、存储虚拟化方面做了很多改进。基于OpenStack之上是PaaS平台,PaaS平台有数据库、对象存储、负载均衡、缓存服务、CDN、安全服务。这些服务发展的整个历程比云平台还要早,因为像数据库、对象存储、缓存服务是在网易研究院一开始成立时,这方面的技术就已经开始积累了。

再往上是应用层。这是应用层的架构雏形,是一个电商网站。一般一开始应用层构建时都是单机模式的,这不能说架构师一开始设计时没有设计好。其实现在互联网的应用,我们遇到好多的客户最想要的点就是上线速度快。现在有很多应用就是半年过一茬,如果赶不上这个风口,可能就飞不起来,就会被竞争对手落下,这样架构再好也没有用,所以一般不会一开始就把应用层拆得七零八落的。

虚拟机层面部署方式一般会采取通过脚本或者自动化配置的工具来进行应用的部署,这里经常用的是Puppet Chef Ansible。虚拟机能实现的资源层面比较弹性,比如说“双十一”原来有5个节点,卡一下变成10个节点,很快可以部署出来,但是另外5个节点里面是空的,怎么办呢?并不能很好实现应用弹性,所以就需要自动化的工具,除了调IaaS平台把虚拟机创建出来以外,还要进行部署。应用部署上去之后,如果变化比较慢是没有任何问题的,脚本是固定的只需要写一次就可以了,但是现在应用变化非常快,需要不断调整脚本,运维成本还是相对比较大的。

随着业务发展,应用层的架构就会越来越复杂。比如说用户的管理,要不要给用户做一些活动,用户浏览时要不要提供搜索推荐,要不要做积分,商户要不要管理自己的供应商,和客户有矛盾的话要不要有仲裁,支付需不需要对账,商品配送要不要物流管理,包括对接银联、支付宝支付等等,所有的功能都加进来了。如果还是加到同样一个应用里的话,整个架构就太复杂了。这个时候架构就会面临着三个方面的问题:

  • 时间的灵活性。一个新的活动要上线的时候,能否尽快实现它的快速迭代。
  • 空间的灵活性。能否实现非常快的弹性伸缩。
  • 管理的灵活性。比如说有一个服务挂了,怎么样把它尽快接起来,和原来应用进行一定程度的关联。

从虚拟机到容器

接下来是一个从虚拟机过渡到容器的时代。这个时代主要有以下几个方面的不同:

  • 原来以资源为核心,现在以应用为核心。运维人员不能再认为不关心应用,只要虚拟机不挂就没有问题。这个时候开发人员和运维人员已经不再是两个独立的实体,现在流行的概念就是DevOps。
  • 有状态容器。为什么要支持有状态容器?从虚拟机到容器的演化过程,容器其实比较适用于部署一些无状态的东西,最好是挂了以后再起,只有商务逻辑并没有数据。虽然在哪个机器上重启都是可以的,但是我们发现中间还是有很大沟壑的,用习惯虚拟机的用户不适应一旦切换到容器,应用就马上进行无状态,所以我们采取了一定的技术,下面也会分享如何实现有状态的容器。
  • 容器跨主机互联和容器使用云盘存储。它对于计算的隔离比较好,但是对于网络互联、共享云盘,虽然业界有开源的方案,但是这种方案还是有问题的,一个是性能问题,一个是二次虚拟化的问题,一般采取公有云创建虚拟机的时候,虚拟机之间的互联已经有了一个层次的虚拟化,这个时候容器之间的跨主机互联还要再做一次虚拟化,这样一层一层套性能就大幅度降低。云盘存储也是,如果要在IaaS层之外再做一层集群,还是会有二次虚拟化,本来下面就是一个虚拟的存储,创建出云盘,云盘再打出集群,这种二次虚拟化存储基本不可以使用了。