2018 Qcon上海站:网易云详解容器平台Kubernetes的持续升级实践

2019-09-12 07:05 采集侠

近日,由InfoQ主办的Qcon全球软件开发大会在上海宝华万豪酒店举办,QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上工作经验的技术团队负责人、架构师、工程总监、开发人员分享技术创新和实践。在本次大会中,网易云容器编排负责人娄超分享了网易云容器平台Kubernetes的持续升级实践经验。

2018 Qcon上海站:网易云详解容器平台Kubernetes的持续升级实践

据娄超介绍,网易云容器服务的前身是蜂巢,上线于2015年,也是国内第一个基于Kubernetes提供多租户的微服务容器平台。Kubernetes多用于私有云,并没有租户的概念,网易云在Kubernetes基础上扩展了多租户的能力,与IaaS做了无缝融合,支持集群虚拟机、物理机和GPU混布的异构计算;同时网易云提供的容器服务是无服务架构的,用户只需关心镜像和对计算资源的需求情况,底层可自动扩展和销毁资源。

目前,网易云容器服务已经在线上持续运行三年多,历经三个阶段:初期,网易云容器服务是为开发者打造的容器云平台,基于Kubernetes 1.0,支持多租户,仅提供无状态/有状态两种负载;发展期,网易云容器服务2.0基于Kubernetes 1.3/1.6,支持单用户多Namespace,定制有状态容器,做了全面的性能优化和架构重构;融合期,网易云容器服务3.0符合Kubernetes一致性认证,可以同时支持K8s API和Serverless模式OpenAPI。娄超表示,Kubernetes自开源以来一直有着活跃的社区和用户,版本升级周期已经稳定在三个月,作为基于Kubernetes的容器服务应该选择在何时升级,升到哪个版本都需要全面的考量。

升级面临三大挑战

升级是基于Kubernetes的云平台和用户必然会面临的场景和挑战。根据网易云的经验,娄超总结了三大挑战:首先,社区更新快,版本变化大,升级工具不够成熟;其次,容器形态的不断演进促使网易云要持续发展才能跟上社区节奏;最后,平台在升级的过程中要考虑用户的使用模式和用户业务的稳定性。

如何升级?网易云总结四个经验

那么,网易云容器集群是如何升级的?娄超首先例举了GKE的升级模式,先升级Master,再升级Slave端,Master服务镜像一键升级或自动升级,Nodes用户手动滚动更新或配置自动升级,通过驱赶老Node用户容器升级Nodes。为什么Google会采用这种对用户并不太友好的升级方式呢?Ahmet是GKE的核心开发人员,曾在twitter上总结过业务零停服的Kubernetes升级建议,包括充分利用Kubernetes多副本,健康探测,信号处理,设置最长等待时间等特性。实际上,需要平台供应商严格按照最佳实践方式去用,才能保证业务的稳定性。

回看网易云容器服务的Kubernetes的升级,主要经历了三次升级过程。据娄超透露,网易云容器初期1.0线上用户中,个人小用户占了大多数,有状态单体容器占大部分,用法也比较随意。在1.0升级到2.0的过程中,网易云主要要考虑了Kubernetes 1.3和1.0版本的差异,以及容器服务本身功能的变化。限于Kubernetes版本和Docker版本的兼容性并不好,这次升级主要做了三方面的探索:通过负载均衡帮用户将流量平滑地迁移过去;保证K8s集群底层虚拟网络互通,用户可以通过自己的服务注册服务发现服务实现迁移;对于将容器当做虚拟机来用的用户,通过docker commit替换本地镜像,帮用户升级Node。

随着容器技术的普及,网易云容器服务升级到2.0后,用户对容器的使用也逐步趋于规范。娄超分享了在这次升级中对业务影响最小的热升级方案:为了做到对所有容器无感知的升级,要做到不迁移Node,不重启容器。据娄超介绍,为了达到这种Node In-Place升级,网易云主要通过kubelet v1.3可以无缝接管v1.0老容器,实现了容器的不重启,通过容器网络方案兼容实现了网络的不中断。

在升级的过程中,还会遇到Master与Node不兼容的问题。为了解决这个问题,娄超给出的解决方案是,先新建一个新版本的Master,在升级Node的时候,同时把API的地址改到新版本中去,保证升级时所有版本都是兼容的。此外,对于K8s多租户的集群,升级的风险是很大的,网易云采用了灰度升级的方式。

最后,娄超总结了网易云容器平台在持续升级实践中的经验教训。首先,快速有效地对集群进行在线升级的前提是要做好开源选型,这是非常重要的基础,比如Kubernetes就是容器编排领域的最佳选择;第二,自己造特性需要谨慎,最好不要改开源系统本身的代码,而要通过API去做功能的扩展;第三,要考虑是开源还是自研;第四,要保障版本的快速跟进。只有不断改造原生K8s并与网易云基础设施结合,才能紧跟社区,支撑客户业务多样化的需求。