近日,由InfoQ主办的Qcon全球软件开发大会在上海宝华万豪酒店举办,QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上工作经验的技术团队负责人、架构师、工程总监、开发人员分享技术创新和实践。在本次大会中,网易云容器编排负责人娄超分享了网易云容器平台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并与网易云基础设施结合,才能紧跟社区,支撑客户业务多样化的需求。
免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。