APP下载
报价宝  ›  科技  › 

分享陌陌基于K8s和Docker容器管理平台的架构

报价宝 来源:baojiabao.com 发布时间:2019-11-09 00:03:00 09月11日更新
报价宝综合消息分享陌陌基于K8s和Docker容器管理平台的架构

容器丛集管理系统与容器云平台的选择非常重要,因为容器管理系统是否先进智慧、容器云管理平台是否灵活易用且高效,直接影响企业开发运维的效率与速度、资源利用率的高低。在这个竞争激烈,风云突变的时代,应用的开发效率、稳定性、扩充套件性和安全性,决定了企业的竞争力与市值。

当下,K8s凭借在扩充套件性、管理、大资料分析、网络场景、相容性、负载均衡、灰度升级、失败冗余、容灾恢复、 DevOps 等方面的优势,受到部分企业的青睐。今天跟大家一起分享陌陌在K8s容器方面的一些应用实践。

为什么选择使用K8s?

在使用k8s之前,陌陌在应用释出和执行环境方面遇到的具体问题,如下:

应用释出时间很长,主要是因为释出过程中需要做隔离、恢复等动作,还需要登入检视实际状态、日志。当遇到晚高峰情况这样的突发状况,需要紧急扩容。这时业务方会申请机器,可新机需要进行环境初始化、相关配置,这样导致效率非常低。应用执行环境的软件版本不一致,配置复杂,维护成本比较高。硬件资源利用率不足,总体成本比较高。针对以上遇到的问题,我们决定对架构进行改造,同时制定了一系列架构改进目标,如下:

提高服务可用性,可管理性。可用性是当某一台机器出现宕机,会自动切换到其他机器。可管理性是在应用需要扩容时,自动化去部署执行环境、相关配置。开发不需要再去考虑服务器的问题。提高资源隔离性,实现服务混合部署。应用级别的监控,当机器需要扩容时,自动排查是哪个应用所致。服务平滑迁移。综合这些问题和目标,陌陌选择使用 Kubernetes来管理 Docker 丛集,当 Kubernetes 满足不了需求时,可在部署平台开发相应的功能来满足开发检视日志、监控和报警等需求,尽量避免登入主机和容器。

陌陌容器管理平台的架构演进

陌陌从2015年下半年开始对Docker进行调研和实践,2016年初开始调研k8s,尝试架构方面的改进工作,基于自研发布系统及K8s、OVS和Docker构建容器管理平台。实现了基于Docker丛集的部署系统,便于开发者便捷地部署自己的应用程序。最终达到部署环境干净一致,可重复部署、迅速扩容和回滚。

如下图,是容器管理平台的架构图

容器管理平台主要功能有丛集管理和状态展示、灰度释出和程式码回退、元件模板、应用管理、映象仓库和许可权管理等。它采用前后端分离的架构,前端使用 JS 渲染,后端使用 Python 提供 API。这样开发者可以快速的进行释出和回退操作。

容器管理平台在应用释出流程,丛集排程策略,k8s节点网络架构,阿里云支援,基础监控指标等方面进行了优化改进。

应用释出流程

陌陌之前老版本释出系统是序列的,需要单台进行替换。如下图,是新架构下应用的释出流程:

新的释出系统是使用者提交程式码后,在释出系统选择要部署的commit,点选构建以后,系统会自动编译,打包成映象,推送映象仓库。如果构建成功,使用者点击发布新版本的例项,灰度没有问题,全量,下线老版本的例项。回退时程式码不需要构建,直接释出老版本例项。在某段时间内,新老版本是同时存在的。

丛集排程策略

陌陌的丛集排程策略是为应用配置预设的location(丛集标签),如果是线上应用,应用需要申请location,部署到正式的丛集(机房要求,资源充足)。这里应用都不能独占丛集,均采用的是混合部署的方式。同一个丛集下,分成不同组并组定义标签,应用支援独占机器,同一个组之间的应用例项可以随意漂移。

IDC网络节点

在IDC网络节点构建部分,陌陌使用的是全域性IP地址,容器与容器之间、容器与主机之间都是互通的。这样一来,通讯可以不使用任何封装等技术,相对来说比较高效且对现有网络变动影响小(仅需封装trunk,无其他协议,mtu等变化)。

如下图,是IDC网络节点架构图:

在这样的架构下,网络部署和扩充套件相对简单,因为每台机器的IP地址段是预先静态配置的。这里值得注意的是,服务器双链路上联,trunk上联物理交换机需要合理避免二层环路。这样的方式存在的不足是,当容器较多时,mac地址数量增多,给物理交换机Mac地址表带来压力,广播域扩大就是需要严谨的规划vlan 角色相关资讯。

阿里云支援

当前,陌陌K8s master丛集下节点包含IDC、阿里云及两者混合三种方式,如下图:

阿里云采用的网络模式是Host-gw,陌陌搭建了一条IDC与阿里云的VPC专线和VPC的虚拟路由进行静态配置。无论是IDC节点,还是阿里云节点上的应用都要适应IP动态变化。

基础监控指标

陌陌的监控方案大多是基于Kublet cadvisor metrics界面去做的资料汇总。最初陌陌采用的方式是利用Python指令码,去呼叫界面,在取到一些CPU内存、网络、流量的资料,存入ES,分析之后进行展示。之后的报警系统,是利用Java应用去调取Kublet cadvisor metrics界面,进行资料的收集。

基础监控指标主要有内存(total,rss,cache)、流量(incoming,outgoing)、网络packets(drop,error, total)等。

应用迁移

应用迁移方面,陌陌做了很多适配工作,使得应用不需要太多的改动就可以无缝迁移。具体适配细节如下:

应用适应动态ip变化。自定义构建过程(build.sh)。应用使用不同的服务发现框架(nginx,rpc)(start.sh)。应用销毁过程中做一些额外处理(stop.sh)。在应用迁移过程中,也遇到了一些问题,如Swap、cpu软中断优化、资源利用率、Ip白名单、适用于内网等问题。当前,陌陌的容器业务规模服务器约400台、线上容器6000、应用700+。应用的型别是java+php+node+python+tomcat。

未来展望

希望运维可以实现对应用请求量,执行绪数,流量等指标的监控。基准值部分,达到单例项可承载请求量,执行绪数,流量。伸缩方面,做到最小保留例项数,最大扩容例项数,根据监控反馈和基准值计算需要扩容和缩容的例项数, 按照各个丛集资源余量按比例伸缩。

今日就陌陌关于docker和k8s的架构就简单分享到这里,谢谢大家。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 手机价格 笔记本价格 华为手机价格 耳机价格 降噪耳机价格