【.com原创稿件】容器集群管理系统和容器云平台的选择非常重要,因为容器管理系统是否先进智能,容器是否云管理平台灵活易用和高效,直接影响到企业开发运维的效率和速度,以及资源利用水平。在这个竞争激烈、瞬息万变的时代,应用开发的效率、稳定性、扩展性、安全性决定了企业的竞争力和市场价值。目前,K8s以其在扩展性、管理性、大数据分析、网络场景、兼容性、负载均衡、灰度升级、故障冗余、容灾、DevOps等方面的优势受到部分企业的青睐。近日,在由陌陌主办的以“TechNeo”为主题的第十六期技术沙龙活动中,陌陌科技SRE团队负责人王静雪分享了陌陌在K8s容器中的一些应用实践。为什么选择使用K8s?在使用k8s之前,陌陌在应用发布和运行环境中遇到的具体问题如下:查看实际状态和日志。当遇到晚高峰等突发情况时,需要紧急扩容。这个时候业务方会去申请机器,但是新机器需要初始化配置,导致效率很低。应用运行环境软件版本不一致,配置复杂,维护成本较高。硬件资源利用率不足,综合成本较高。针对以上遇到的问题,我们决定进行架构改造,制定了一系列的架构改进目标,具体如下:提高服务可用性和可管理性。可用性是指当某台机器宕机时,会自动切换到其他机器上。可管理性是在应用需要扩展时自动部署运行环境和相关配置。开发不需要再考虑服务器问题了。完善资源隔离,实现服务混合部署。应用级监控,当机器需要扩展时,会自动检查是哪个应用引起的。平滑的服务迁移。基于这些问题和目标,陌陌选择使用Kubernetes来管理Docker集群。当Kubernetes不能满足需求时,可以在部署平台上开发相应的功能,满足查看日志、监控告警等开发需求,尽量避免登录主机和容器。陌陌容器管理平台架构演进陌陌2015年下半年开始对Docker进行研究和实践,2016年初开始调研k8s,尝试完善架构,基于自研分布式系统构建容器管理,K8s、OVS和Docker平台。实现了基于Docker集群的部署系统,方便开发者便捷的部署自己的应用。最后,部署环境干净一致,可以重复部署、快速扩展和回滚。下图是容器管理平台的架构图:容器管理平台的主要功能包括集群管理和状态展示、灰度发布和代码回滚、组件模板、应用管理、镜像仓库和权限管理等。它采用前后端分离的架构,前端使用JS进行渲染,后端使用Python提供API。通过这种方式,开发者可以快速的进行发布和回滚操作。容器管理平台在应用发布流程、集群调度策略、k8s节点网络架构、阿里云支持、基础监控指标等方面进行了优化和完善。应用发布流程陌陌之前的版本发布系统是串行的,需要更换成单一的。下图是新架构下应用的发布流程:在新的发布系统中,用户提交代码后,在发布系统中选择要部署的commit,点击build,系统会自动编译、打包入镜像,并推入镜像仓库。如果构建成功,用户点击发布新版本实例,灰度没有问题,老版本实例下线。回滚时无需构建代码,直接释放旧版本实例。在一定时期内,新旧版本同时存在。集群调度策略陌陌的集群调度策略是为应用配置默认位置(集群标签)。如果是线上应用,应用需要申请位置,部署到正式的集群上(机房要求,资源充足)。这里没有一个应用可以独占集群,采用混合部署的方式。在同一个集群下,分成不同的组,并为每个组定义标签。应用支持独享机器,同组应用实例可以自由漂移。IDC网络节点在IDC网络节点建设部分,陌陌采用全球IP地址,容器与容器、容器与主机之间均互通。这样通信可以不使用任何封装等技术,效率比较高,对现有网络变化影响小(只需要封装trunk,不需要其他协议,mtu等变化)。下图是IDC网络节点架构图:在这样的架构下,网络的部署和扩展都比较简单,因为每台机器的IP地址段都是预先静态配置的。这里值得注意的是,服务器的双链路上行和中继上行的物理交换机需要合理避免二层环路。这种方式的缺点是当container很多的时候,mac地址的数量会增加,会对物理交换机的mac地址表造成压力。广播域的扩展需要严格规划vlan角色相关信息。阿里云支持目前陌陌K8s主集群下的节点包括IDC、阿里云以及两者的结合,如下图:阿里云采用的网络模型为Host-gw,陌陌在两者之间搭建了VPCIDC和阿里云静态配置专线和VPC虚路由。IDC节点和阿里云节点上的应用程序都必须适应动态IP变化。陌陌大部分基于基础监控指标的监控方案都是基于Kubletcadvisormetrics接口的数据汇总。陌陌最开始使用的方法是用Python脚本调用接口,获取一些CPU内存、网络、流量数据,存储在ES中,解析后展示。后续报警系统使用Java应用调用Kubletcadvisormetrics接口进行数据采集。基础监控指标主要包括内存(total、rss、cache)、流量(incoming、outgoing)、网络包(drop、error、total)等。应用迁移在应用迁移方面,陌陌做了很多适配工作,这样应用程序就可以无缝迁移而无需太多更改。具体适配细节如下:应用适配动态IP变化。自定义构建过程(build.sh)。该应用程序使用不同的服务发现框架(nginx、rpc)(start.sh)。在应用程序销毁期间做一些额外的处理(stop.sh)。在应用迁移过程中,也遇到了一些问题,比如Swap、cpu软中断优化、资源利用、IP白名单、适用于内网等问题。目前陌陌容器业务拥有约400台服务器、6000个在线容器、700+应用。应用类型是java+php+node+python+tomcat。未来展望希望运维能监控应用请求量、线程数、流量等指标。基准值部分,单个实例可以承载的请求数、线程数、流量。在扩容方面,做到最小预留实例数和最大扩容实例数,根据监控反馈和基准值计算需要扩容和缩容的实例数,根据各集群的资源余量进行扩容.【嘉宾介绍】Momo王静雪,现任SRE团队负责人,之前做过运维相关工作,对自动化、虚拟化、docker、k8s非常熟悉。TechNeo科技沙龙|11月25日,九州云/ZStack与大家一起探讨云时代网络边界管理的实践。点击图片立即报名。【原创稿件,合作网站转载请注明原作者和出处为.com】
