[EWS系列分享]容器集群管理系统模型杂谈

前记

    在开始动手设计EWS(即TAE3.0)之时, 我们参考了诸如swarm, kubernetes, mesos, yarn等众多与容器集群管理相关的系统或者设计思路, 当然最为**惊艳**的莫过于kubernetes了.考虑到历史数据及公司特有的网络, 运维环境, EWS不可能完全抛弃原有的数据模型而使用全新的设计或者说直接建立在诸如kubernetes上(感谢上帝我做了一个非常明确的决定!)。

    时至今日, kubernetes也刚刚发布了1.2版本, 一大波特性袭来. 在简单了解了一番之后, 回头再看看EWS在这段时间内的变化, 觉得还是应该记录一下, 也分享一下我对于TAE模型设计方面的理解.

TAE

    EWS的模型设计是由PaaS时代变迁过来的. 当时比较流程的解决方案有heroku, gae, sae等等。比较常见的组件就是一个7层负载接入层, 一个逻辑路由层以及用于运行用户App的主机(Grid)。

     在TAE1.0时期, 我们使用过基于JavaWeb的运行环境, 后期使用了基于lxc的轻量级linux隔离环境, 在TAE2.0时期我们开始使用docker作为容器虚拟化环境。下表是TAE2.0时期的主要应用模型, 命名上, 当时更多的是参考了阿里的运维系统。

EWS支持多分区

    与最新的kubernetes版本支持的多分区不同, EWS从一开始就支持了多分区的容器集群管理能力。下边两幅图分别简单描述了EWS与kubernetes在部署结构上的不同。

   通过上两图的对比, EWS将用户运行的环境认为是受控区, 而每个受控区会对应一个管控区, 而中心管控节点(ControllerCenter)与各个管控区通信, 负责指令的下发与管理. 对于Kubernetes而言, 其所有的Node都是直接与Master进行交互的(目前Ubernetes实现多分区的思路是基于label机制, 在构架本质上并没有发生明显的变化)。

EWS模型

总结一下EWS目前的核心设计(与kubernetes对比)

EWS系统模型

    目前主要支持的是商家事业部的聚石塔业务-EWS。对于商家, 对于ISV开发者来说, 我们把管控单元, 主机分区等等包装成了Region, Zone, App等概念, 明确了运维和开发两种不同的关注点。

EWS与kukernetes功能对比:

  • EWS在调度层面,Container为主,Node为辅
  • 将模型分为运维段和开发段,引入Region,Zone,App概念,匹配现有业务模型
  • EWS 不强调块存储,但强调存有状态业务服务化,即使用RDS,OSS,OCS等服务化存储

Kubernetes

     在起初看到Pod, Replication Controller, Label等等概念时, 我就暗自心想不愧是打着谷歌光环的容器集群管理系统. 下表记录了一些我认为Kubernetes较为核心的模型概念.

在1.2版本中, Kubernetes开始支持多分区集群,这与EWS的多分区支持还是有本质上不同的.。

Node,Pod,Container

    Pod由Container组成并且运行在Node之上。

Pod的关键特性是其内的容器共享一组资源:

  • PID命名空间: Pod中的不同应用程序可以看到其他应用程序的进程ID.
  • 网络命名空间: Pod中的多个容器能够访问同一个IP和端口范围.
  • IPC命名空间: Pod中的多个容器能够使用SystemV IPC或者POSIX消息队列进行通信.
  • UTS命名空间: Pod中的多个容器共享一个主机名
  • Volumes: Pod中的各个容器可以访问在Pod级别定义的Volumes.

    Pod是Kubernetes中一个很重要也特有的模型概念, TAE中存在叫做节点的概念与之对应, 但是不具备容器共享一组资源的能力.

   从TAE2.0时期开始, 当时我们使用docker运行诸如wordpress的做法是将Apache2, PHP, Mysql运行在一个容器中. 而如果按照Kubernetes的做法, 是应该将Apache2, PHP, Mysql都运行在独立的容器中, 一起封装成一个Pod.

Why not just run multiple programs in a single (Docker) container?1 Transparency. Making the containers within the pod visible to the infrastructure enables the infrastructure to provide services to those containers, such as process management and resource monitoring. This facilitates a number of conveniences for users.2 Decoupling software dependencies. The individual containers may be versioned, rebuilt and redeployed independently. Kubernetes may even support live updates of individual containers someday.3 Ease of use. Users don’t need to run their own process managers, worry about signal and exit-code propagation, etc.4 Efficiency. Because the infrastructure takes on more responsibility, containers can be lighter weight.

    以上是Kubernetes官方对于为何不要在一个容器中运行多个进程的理由.另外, 值得一提的是如果Pod内的容器异常退出时, Kubernetes将会如何处理?

在Pod的配置文件中有restartPolicy这个参数, 可选值是Always|Never|OnFailure.如果设置为OnFailure, Kubernetes将会在发现容器出现问题时, 尝试重启.

    在我看来, Pod更多的体现的是一种思想及规范; 而为了实现这个规范, 容器集群管理系统, 包括docker本身则需要付出较大的代价.

RC

    在我看来, Kubernetes使用Replication Controller(RC)概念, 向用户统一抽象了关于调度的几个重要问题:

  • 调度的单位: Pod.
  • 调度的结果: 最终集群中运行多少个Pod副本.
  • 调度模式: 重新调度, 弹性伸缩, 滚动更新.
  • 调度算法: 通过AlgorithmProvider来提供.

Label

Label是我认为Kubernetes中最为精彩的模型, 功能设计. Kubernetes中所有的模型几乎都是通过label来相互关联.通过对Pod, Node打上标签, 即可以通过类似SQL语句来进行筛选或过滤.

    在EWS中, 也使用了Label机制来进行对主机, 镜像, 容器等等进行划分和挑选.

Service

    在Kubernetes中, Service是用于解决Pod访问问题的. 目前Kubernetes提供了NodePort和LoadBalancer两种方式.

Namespace

    在Kubernetes中, Namespace可以用于对Pod, Rc, Service等等进行逻辑划分. 默认情况下, 这些对象都是被分配到"default"分组中的.

    在EWS中, 由于提供了用户及主机分组的概念, 所以并没有提供Namespace概念.

后记

    EWS的模型不是一蹴而就的, 在经历了TAE1.0, TAE2.0并参考了众多优秀的框架,系统设计, 目前从完整性, 功能性, 扩展性上来看已经不落后于任何已有的系统.

    后续, EWS会在动态调度, 弹性缩容, 灾备恢复等场景能力上继续发力.

时间: 2024-11-17 07:10:38

[EWS系列分享]容器集群管理系统模型杂谈的相关文章

开源容器集群管理系统Kubernetes架构及组件介绍

Together we will ensure that Kubernetes is a strong and open container management framework for any application and in any environment, whether in a private, public or hybrid cloud. --Urs Hölzle, Google Kubernetes 作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的

史无前例开放!阿里内部集群管理系统Sigma混布数据

互联网普及的20年来,尤其是近10年移动互联网.互联网+的浪潮,使互联网技术渗透到各行各业,渗透到人们生活的方方面面,这带来了互联网服务规模和数据规模的大幅增长.日益增长的服务规模和数据规模带来数据中心的急剧膨胀.在大规模的数据中心中,传统的运维方式已经不能满足规模化的需求,于是基于自动化调度的集群管理系统纷纷涌现. 这些系统往往有一个共同的目标,就是提高数据中心的机器利用率.在庞大的数据中心服务器规模下,平均利用率每提高一点,就会带来非常可观的成本节约.这一点我们可以通过一个简单的计算来感受一

从0到15万,回望京东容器集群的3年建设之路

  1 从0诞生  2013年初,京东商城研发布局虚拟化技术方向.那时的我们从0起步.从几人小团队开始起航.   在物理机时代,应用上线等待分配物理机时间平均在一周.应用混部要看脸看颜值的,没有隔离的应用混部如履薄冰,所以在物理机时代混部的比例平均每台物理机低于9个不同应用的tomcat实例.   从痛点入手可以极大提升新项目的落地实践机会.即刻我们着手规划京东虚拟化平台项目.从痛点以及当时2013-2014年的技术氛围可以容易想到,京东是从Openstack开始,那个时代Openstack研发

容器集群部署 选好编排工具是关键

本文讲的是容器集群部署 选好编排工具是关键[IT168 评论]容器技术提供了组件化的环境,可以帮助业务应用在云之间轻松迁移而无需显著的返工.随着容器在企业持续获得发展,厂商将增加新的功能让用户可以创建可扩展的基于容器的环境.然而,大范围控制容器部署也会有一些并发症.容器肯定是跟资源相匹配的.这些挑战会导致集群管理和编排的并发需求. 集群管理工具是一个通过图形界面或者通过命令行来帮助你管理一组集群的软件程序.有了这个工具,你就可以监控集群里的节点,配置services,管理整个集群服务器.集群管理

京东大规模容器集群之 kubernetes 实践

01 容器时代已经到来 当前,容器的占有率可能比想象中还要快地增长,这个是使用 Docker 镜像的受欢迎的程度,可以看到几个排在前面的.然后平均一个公司有多少容器在跑,只有 7 个.但是在 06 年的时候,5 个都不到,其实增长还蛮快. 我觉得这个图挺有意思的,讲的是一个容器的平均生命周期,比较的是容器和未来的生命周期,容器的平均生命周期是 2.5 天,VM 是 23 天,这 2.5 天里面分了两部分,一部分是用了编排,一部分没有用编排.如果用户没有用 K8S 工具,平均的容器生命周期是一天,

Easystack发布新容器集群产品 成为中国首个OpenStack+K8S专业开源企业

3月29日,EasyStack(北京易捷思达科技发展有限公司)在德国柏林举行的CloudNativeCon+KubeCon容器大会上,正式发布基于Kubernetes技术的容器集群产品ESContainer.此举使得EasyStack同红帽.Mirantis一道成为全球三大同时具备OpenStack和Kubernetes(K8S)产品的专业开源企业,也是中国首个OpenStack+Kubernetes专业开源企业.   CloudNativeCon+KubeCon现场 2016年,是容器技术全面

PaaS容器集群优化之路

本文讲的是PaaS容器集群优化之路[编者的话]本文探讨了在一个复杂的PaaS系统中,如何系统化.科学化的进行全系统的性能优化工作. [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述.架构.日志和监控,部署.自动驾驶.服务发现.网络方案等核心机制分析,进阶篇--Kubernetes调度工作原理.资源管理及源码分析等. 1. 性能优化面对的挑战 以下是整个PaaS平台的架构 其中主要包括这些子系统: 微服务治理框架:为应用提供自动注册.发现.治理.隔离.调用分析

《实施Cisco统一通信管理器(CIPT1)》一2.5 跨越IP WAN的集群部署模型

2.5 跨越IP WAN的集群部署模型 实施Cisco统一通信管理器(CIPT1)Cisco支持跨越WAN部署CUCM集群.这种模型拥有以下特点. 同一集群的应用和CUCM服务器通过IP WAN分布在各个站点中.I- P WAN负责承载集群内部服务器之间的通信与信令. 站点的数量存在以下限制. 若部署的是本地故障倒换(Failover),则只能部署2-4个站点(每个站点部署2台CUCM服务器). 若通过IP WAN实现远程故障倒换(Failover),则最多部署8个站点(每个站点部署1台CUCM

《实施Cisco统一通信管理器(CIPT1)》——2.5 跨越IP WAN的集群部署模型

2.5 跨越IP WAN的集群部署模型 实施Cisco统一通信管理器(CIPT1)Cisco支持跨越WAN部署CUCM集群.这种模型拥有以下特点. 同一集群的应用和CUCM服务器通过IP WAN分布在各个站点中.IP WAN负责承载集群内部服务器之间的通信与信令.站点的数量存在以下限制.若部署的是本地故障倒换(Failover),则只能部署2-4个站点(每个站点部署2台CUCM服务器).若通过IP WAN实现远程故障倒换(Failover),则最多部署8个站点(每个站点部署1台CUCM服务器).