刘超 Q & A | 看 Kubernetes 如何支撑网易云的高并发应用
技术
作者:刘超
译者:
2017-10-27 11:52

 刘超 /网易云解决方案总架构师
背景回顾:8 月 23 日 20:00,K8sMeetup 中国社区线上课堂,邀请刘超老师以直播的方式进行了一场以《为支撑高并发应用的 Kubernetes 的性能优化》为题的线上讲解,反响热烈。
为更好地为学员整合问答,K8sMeetup 中国社区特别精选了网友提问,感谢刘超老师百忙之中进行校对。



Kubernetes 相关
Q  -  w:一个 VM 里只有一个 pod 么?VM 什么时候创建销毁呢?VM 启动慢会不会影响用户体验?

  一个 VM 里面的 pod 数目是动态变化的,有一个策略公式。当某个租户一开始创建少量的 pod 的时候,为防止浪费空间,不会创建很大的 VM,随着 pod 的数目增多,VM 也会越来越大,这样创建一个新的 Pod 就不需要重新创建一个虚拟机,加快容器的创建速度。当一个 VM 里面所有的 pod 都销毁的时候,VM 也会被销毁。网易云对 IaaS 层的 VM 经过优化和裁剪,因为容器所在的 VM 不会让用户登录,因而不需要灵活定制化,不需要添加很多的组件,全部裁剪之后,启动速度在 10 几秒,几乎不会拖慢容器的启动速度。
Q  -  杨鸣:一个 master 处理那个多的客户,会不会瓶颈在 master 或者 etcd?
  会的,网易云当前支撑的节点数目为 3 万节点,这样 master 压力会很大,需要做很多方面的优化,有一篇专门的文章讲这个《支撑大规模公有云的 Kubernetes 改进与优化》。
服务发现相关Q  - 牛海朋:网易云的服务发现是啥? 董明心:iptables 规则达到什么量级,性能会明显发生下降呢? 高章飞:不是可以通过 hash iptables 么?
 Kubernetes 中可以使用 DNS 将服务名映射为 VIP,然后通过 kube-proxy 组件配置内核的 iptables 规则,实现内部的负载均衡,从而实现服务发现。然而经过测试,当 iptables 数目比较多的时候,性能会下降,尤其是当集群规模大,部署的应用数目非常多的时候,iptables 规则会非常多。网易云采取的策略为不同的租户不共享虚拟机,而且对于每一个虚拟机上的 iptables 规则,仅仅设置本租户的就可以了。然而对于高并发的应用,一个租户内的服务的数目已经非常多了,通过 hash iptables 也无法实现精准的熔断降级流控等,所以一般业务层还是会使用 Dubbo 和 SpringCloud。
比如我需要访问注册在外部 eureka 的一个服务,Kubernetes 内的应用访问外部的服务发现怎么做?
Kubernetes 访问外部服务是非常好的一个功能,可以通过 HeadlessService 的 External Name 可以做。通过这个功能,将外部的一个服务,如数据库,缓存等映射为一个服务名。本来应该在应用中配置 IP 地址的,当外部服务的地址改变,例如数据库迁移,则应用需要重新配置,是比较麻烦的,使用外部服务名可以很好的解决这个问题。
网络相关
风云:网易云网络 CNI 用的是什么?为啥不用 Calico?你们选择的 CNI 有啥优点?
  网易云的 CNI 是自己开发的,通过将容器层和 IaaS 进行联动,使得容器内的网络也能够被物理机上的 OVS 进行管理。由于虚拟机之间的互联是通过 OVS,通过 VXLAN 协议进行的。容器之间的互联也是使用 OVS,基于 VXLAN 的。因为 VXLAN 是标准的协议,而 Calico 作为容器平台没有问题,但是和虚拟机,物理机,物理设备打通的时候,会有不便。而且虚拟机之间的互联已经有一层网络虚拟化,如果里面再来一层网络虚拟化,性能也会有所下降。
斯科特:两层 Overlay 不太明白,有点晕。
  虚拟机和虚拟机之间的连接多通过 VXLAN,会形成一层 Overlay 网络,而跨虚拟机的容器的连接也通过 VXLAN,则称为两层 Overlay。这种情况下,会有两个 vxlan,UDP 的包头,从而使得网络的性能降低。而且如果是容器有自己的网络,则虚拟机访问容器的时候,需要通过外部负载均衡器或者 NAT 进行,这种方式不但会降低性能,而且会对应用层有所侵入,如果客户一部分应用基于虚拟机,一部分应用基于容器,则非常不方便。但是如果使用了网易云用 OVS 统一管理容器和虚拟机网络,一方面只有一层 Overlay,性能有了保障,一方面,当一部分应用基于虚拟机,一部分应用迁移到容器的时候,对于网络来讲是一致的,是可以平滑迁移,对应用无侵入的。
存储相关
-  AmyHuang:网易云后端存储采用的是什么存储? -  琳峰:数据库的存储是怎么解决的?
  网易云的后端存储是云硬盘,云硬盘主要有两类,一种是基于 Ceph 的块存储设备,一种是网易云自研的高性能的块存储 NBS。
对于 Ceph 来讲,需要做很多的优化才能良好的支撑线上业务,例如当某个 osd 出问题的时候,不同 Ceph 节点的横向同步会使得修复期间的性能严重下降,而网易云通过更细粒度的保存和执行修复过程,使得横向同步拷贝数据的量大大减少,性能得到保证。
对于例如数据库,MongoDB 此类对于存储性能要求非常高的 PaaS 服务,会基于网易云自研的基于 iSCSI 协议的块存储服务 NBS,很快在公有云开放。
 w:pod 重启会换虚拟机么?那 pod 的存储会自动挂过去么?
  在网易云中,容器有两种,一种是无状态容器,这种容器是不能挂载云硬盘的,所以不存在存储迁移的问题,容器重启默认不切换虚拟机,除非虚拟机出错,或者资源不足。另一种是有状态容器,对于有状态容器,网易云有自己的实现,不但数据盘会随着容器的迁移而迁移,系统盘也会随着容器的迁移而迁移,当然容器默认也是不迁移的。
 

836 comCount 0