为什么选择使用Kubernetes?

在使用Kubernetes之前,陌陌在应用发布和运行环境方面遇到的具体问题,如下:

  • 应用发布时间很长,主要是因为发布过程中需要做隔离、恢复等动作,还需要登录查看实际状态、日志。

  • 当遇到晚高峰情况这样的突发状况,需要紧急扩容。这时业务方会申请机器,可新机需要进行环境初始化、相关配置,这样导致效率非常低。

  • 应用运行环境的软件版本不一致,配置复杂,维护成本比较高。

  • 硬件资源利用率不足,总体成本比较高。

针对以上遇到的问题,我们决定对架构进行改造,同时制定了一系列架构改进目标,如下:

  • 提高服务可用性,可管理性。可用性是当某一台机器出现宕机,会自动切换到其他机器。可管理性是在应用需要扩容时,自动化去部署运行环境、相关配置。开发不需要再去考虑服务器的问题。

  • 提高资源隔离性,实现服务混合部署。

  • 应用级别的监控,当机器需要扩容时,自动排查是哪个应用所致。 服务平滑迁移。

  • 综合这些问题和目标,陌陌选择使用Kubernetes来管理Docker集群,当Kubernetes满足不了需求时,可在部署平台开发相应的功能来满足开发查看日志、监控和报警等需求,尽量避免登录主机和容器。

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

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

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

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

容器管理平台在应用发布流程,集群调度策略,Kubernetes节点网络架构,阿里云支持,基础监控指标等方面进行了优化改进。

应用发布流程

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

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

集群调度策略

陌陌的集群调度策略是为应用配置默认的Location(集群标签),如果是线上应用,应用需要申请Location,部署到正式的集群(机房要求,资源充足)。这里应用都不能独占集群,均采用的是混合部署的方式。

同一个集群下,分成不同组并组定义标签,应用支持独占机器,同一个组之间的应用实例可以随意飘移。

IDC网络节点

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

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

在这样的架构下,网络部署和扩展相对简单,因为每台机器的IP地址段是预先静态配置的。

这里值得注意的是,服务器双链路上联,Trunk上联物理交换机需要合理避免二层环路。

这样的方式存在的不足是,当容器较多时,Mac地址数量增多,给物理交换机Mac地址表带来压力,广播域扩大就是需要严谨的规划vlan角色相关信息。

阿里云支持

当前,陌陌Kubernetes 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。

未来展望

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

原文链接:http://developer.51cto.com/art/201711/558515.htm
基于Kubernetes的DevOps实践培训

本次培训内容包含:Kubernetes架构、安装、深入了解Kubernetes、Kubernetes高阶——设计与实现、Kubernetes落地实践、微服务、Cloud Native等,点击识别下方二维码加微信好友了解具体培训内容

点击阅读原文链接即可报名。

陌陌基于Kubernetes和Docker容器管理平台的架构实践相关推荐

  1. 美团点评Docker容器管理平台

    本文是郑坤根据第14期美团点评技术沙龙"你不知道的美团云"演讲内容整理而成,已发表在<程序员>杂志2017年1月刊. 美团点评容器平台简介 本文介绍美团点评的Docke ...

  2. Docker容器管理平台Humpback进阶-私有仓库

    Docker私有仓库 在 Docker 中,当我们执行 docker pull xxx 的时候,可能会比较好奇,docker 会去哪儿查找并下载镜像呢? 它实际上是从 registry.hub.doc ...

  3. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

  4. 《开源容器云OpenShift:构建基于Kubernetes的企业应用云平台》一2.3 完善OpenShift集群...

    本节书摘来自华章出版社<开源容器云OpenShift:构建基于Kubernetes的企业应用云平台>一书中的第2章,第2.3节,作者 陈耿 ,更多章节内容可以访问云栖社区"华章计 ...

  5. 基于Kubernetes构建企业容器云

    前言 团队成员有DBA.运维.Python开发,由于需要跨部门向公司私有云团队申请虚拟机, 此时我在思考能否在现有已申请的虚拟机之上,再进行更加细粒度的资源隔离和划分,让本团队的成员使用, 也就是在私 ...

  6. 基于Kubernetes、Docker的机器学习微服务系统设计——完整版

     内容提要 1 概述 2 系统介绍 2.1 功能全览 2.2 核心功能 3 系统架构 3.1 云化架构图 3.2 架构说明 4 云化部署 4.1 部署图 4.2 部署说明 4.3 部署实例 5 设计实 ...

  7. Docker容器管理总结

    Docker容器管理总结 一.Docker容器理解 1.Docker的核心概念 2.容器的运行状态 二.Dockerfile理解 三.容器使用及操作 1.进入容器空间内 2.后台运行容器 3.前台运行 ...

  8. docker容器管理及网络管理

    防火墙规则-- INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包 示例:禁止10.180.100.141这个机器访问我本机的web服务 iptables -t filter -A IN ...

  9. 【转】八个基本的 Docker 容器管理命令

    八个基本的 Docker 容器管理命令 https://www.iteblog.com/archives/2382.html?from=like 在本文中,我将介绍八个基本的 Docker 容器命令, ...

最新文章

  1. 几个想法,有兴趣的可以深入下去
  2. 化妆definer是什么意思_我们为什么说隔离霜是个智商税的东东!
  3. UI设计加载动效趋势|可以认真学习临摹的素材模板
  4. [华为机试练习题]37.合唱队
  5. Linux切换slave,热备服务器中,切换master中切换SQL
  6. bad interpreter: No such file or directory
  7. 获取 服务器文件列表,云对象获取服务器的文件列表
  8. 一个包含所有c++的头文件的头文件
  9. (黑科技)超链接记录贴
  10. 手机电子词典_如何把手机变成一款英语学习神器?
  11. 如何在CAD中实现影像与矢量叠加套合(四参数法)
  12. Android单元测试 - 如何开始?
  13. (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”...
  14. 大数据之Redis:Redis之一主二仆模式
  15. 用Python找101-200之间的素数
  16. 【原创纯手打】如何使用Vue写微信朋友圈中的留言回复功能(附源码)
  17. 了解互联网一些基本知识
  18. 计算机标准差的按键是什么,在计算器上用标准差键直接求离均差平方和的方法...
  19. 深圳到武汉四天三夜计划安排
  20. @程序员,不加班就滚吧 | 程序员有话说

热门文章

  1. CoLab删除文件夹
  2. *--p *p-- --*p
  3. 牛客算法周周练17D - 刺客信条(dfs剪枝 | 优先队列 + bfs)
  4. WebGL在线模型浏览器
  5. 从经典动力学理解勒让德变换
  6. c语言坐标打印佛祖,你需要知道关于C语言指针的一切
  7. SCU-4396 麦野沉利与御坂美琴的战斗
  8. Nginx 配置Godaddy下载的没有.key 文件的SSL证书
  9. COLORREF结构
  10. php微信静默授权获取头像,【微信】未关注公众号授权获取基本信息(头像昵称等)...