中国移动Kubernetes多集群统一管理实践

bYgolkert 8年前
   <h2>背景</h2>    <p>中国移动一级业务支撑系统是整个中国移动的集中管理和一点对外的门户,包括网状网、BBOSS、一级营销、内容计费、一级客服、VGOP、电渠等多个业务支撑系统,各系统呈烟囱化建设。在小型机时代由于主机集成度高、性能稳定因此数量较少,多项目集群建设、运维尚能保持平稳。但随着系统X86化逐步推进,多项目集群中分别管理的主机、网络、存储等资源数量成几何级数增长,对项目建设、运维开发等各个流程都带来颠覆性挑战,现分析各类挑战如下。</p>    <p>在资源层面,各个项目的资源分散散布在各个数据中心和私有云里,不能统一管理,每个项目都有独立的资源,分布在不同的机房,特别是网状网和内容计费分布在31个省,对跨数据中心的资源和系统统一管理难度较大。</p>    <p>在网络层面,每个项目都跨多个网络域,如核心域、DMZ域和互联网域,之间有多层防火墙隔离,不同系统的安全等级要求不同,不同域的数据访问对安全控制的要求也各不相同。</p>    <p>在技术层面,缺乏统一的技术和平台实现业务能力的快速扩展,尤其是无法满足互联网业务发展带来的剧烈业务波动业务快速上线和弹性伸缩能力差。各项目采用的技术和框架各异。有的适合容器化,有的适合直接在小机上运行。底层无法直接进行技术复用和共享,需要针对具体情况进行分析和提出解决方案。</p>    <p>鉴于在以上多种复杂环境下,业务支撑中心要实现对多系统、多资源、多网络、多数据中心、多技术架构的统一管理,必须构建中国移动业务支撑云平台来进行进一步的能力提升,实现对多项目下多集群的统一管理。</p>    <h2>多集群管理整体技术方案</h2>    <p>多集群统一管理是基于中国移动业务支撑云平台的基础上构建的,以Docker、Kubernetes、Mesos、Ansible为核心支撑技术框架来实现,中国移动业务支撑云平台整体架构视图如下所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/0942012ee75e7eedb72d68c2604e3780.jpg"></p>    <p>该架构方案既满足了适用于容器化应用的服务统一管理、又满足了不适于容器化的Hadoop等服务和基于小机类的应用服务的统一访问和统一管理,是根据当前中国移业务支撑系统现状量身定制,既适合当前业务支撑系统发展的实际需求,又具有支撑未来业务高速发展的技术先进性。</p>    <p>在中国移动业务支撑云平台多集群管理的实践中,我们一直在思考怎样的多集群管理模式最适合移动总部的系统,是大一统的集中PaaS集群管理平台还是采用松耦合的联邦式集群管理模式。移动总部一级业务支撑系统都是大型项目,每个项目业务特点和技术构架都不一样,都有大量主机,分布在业支机房和资源池,每个系统均跨多个网络域包含多个集群,像网状网和内容计费项目集群还跨31个省。既能保持各个项目的灵活性,构架不受冲击,又能实现集中式的资源和应用管理是PaaS多集群管理平台的设计原则。</p>    <p>因此我们最终采用了Cluster Federation(集群联盟)的模式对各项目的多集群进行统一管理。采用此方式对各个项目的影响最小,系统不用做任何改动,同时可以实现资源集中管理和统一服务调度,集中的管理包含镜像管理、应用管理、配置管理、资源管理、监控管理等。多集群统一管理架构设计如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/ee4ce7059bf47b87c3e7060af88cd7d1.jpg"></p>    <p>结合Kubernetes容器集群管理的优秀技术,通过自主研发的多集群管理软件。实现了Mesos+Kubernetes多集群的统一管理,涵盖以下典型应用场景。</p>    <h3>在同一数据中心的多个项目共享资源统一管理</h3>    <p>在kubernetets集群管理平台中为每个项目建立独立的租户,安全隔离不同租户的资源和访问权限。通过分区和分集群的方式即保持各项目的独立性又保持资源的共享。为大的项目建立独立的集群,小的项目通过分区实现安全隔离。共享资源统一管理多个项目如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/d17e3857d6b07673cae10725917f1bfa.jpg"></p>    <h3>在同一数据中心对含有多个网络域项目的统一管理</h3>    <p>对于DMZ域和互联网域部署的一般都是Web类应用和Proxy应用,比较轻量但弹性扩展需求强,适合部署Kubernetets+Docker。</p>    <p>对于核心域包含大量的计算类、服务类、分析类应用,适合部署Mesos+Kubernetes+Docker。</p>    <p>跨多网络域项目的多集群统一管理如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/e5f8d9c388c15647fbccfbd4375da3f2.jpg"></p>    <h3>跨IP承载网的多数据中心统一管理</h3>    <p>中国移动业务支撑系统跨多个数据中心,可以对多数据中心实现统一的应用镜像管理、统一的应用部署和服务的调度,以及应用的快速容灾调度。跨IP承载网的多数据中心统一管理如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/1ca0a543cb142f21f983eaa06e15333f.jpg"></p>    <h2>多集群管理中的重点和难点</h2>    <p>对于一个多集群的PaaS管理平台,我们从以下方面进行了详细的方案分析和设计实现。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/46d6808fc40dba52b18cdb0758082051.jpg"></p>    <p>主要包含安全集中控制、资源统一管理、镜像统一管理、应用统一管理、配置统一管理和统一的监控管理。在多集群的模式下,每一个功能都会变得非常复杂。下面就每个功能实现做详细的描述。</p>    <h3>安全集中控制</h3>    <p>联合多集群模式下安全管控是要考虑的一个非常复杂的因素,需要考虑平台管理员,集群管理员,普通用户等多个角色。权限分配也很复杂。</p>    <ul>     <li>怎么定义租户,怎么控制租户和集群资源的关系,怎么映射租户和项目的关系。</li>     <li>每一个租户对于自己的集群资源怎么进一步划分分区,分配权限给开发,部署和运维人员。</li>     <li>每个用户怎么管理自己的应用和监控应用的健康情况。</li>    </ul>    <p>考虑以上问题,我们在多集群PaaS管理平台中,通过租户、集群、用户三级安全管理,实现统一PaaS平台多集群管理的安全集中管控,如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/5e2aa3ab0e4214977e2091ffd0a6ccb7.jpg"></p>    <ul>     <li>首先要控制对集群的安全访问,每个集群都采用安全模式启动,采用证书方式访问,没有证书不允许访问任何一个集群。</li>     <li>在多集群管理中,租户为一个虚拟的单位概念,每个项目可定义为一个租户,如网状网项目即为一个租户,每个租户下可建立多个集群,租户拥有一个或者多个集群的访问证书,租户实现对自己名下的资源的管理和分配。</li>     <li>租户再通过用户组绑定不同集群和分区资源,用户属于该用户组就可以获得对资源的访问权限。</li>     <li>用户本身只能部署和监控自己的应用,用户并不能查看互相的应用,保证应用的独立性和安全性。</li>    </ul>    <h3>资源统一纳管</h3>    <p>对于统一PaaS平台来说,最主要的功能就是对资源的统一的管控,包含有多少个集群,每个集群多少台机器,都分布在哪个机房,机器配置情况如何,目前的可用率怎么样,怎么去集群间调配资源。因此,统一PaaS资源管理平台实现了以下的资源统一管理功能。</p>    <ul>     <li>经过证书认证之后,通过Kubernetes API Server对集群进行托管,把集群的节点数量、配置等信息导入,同时补充机房、机架等信息。</li>     <li>将纳入集群和租户进行绑定,把集群分配给指定租户。</li>     <li>租户可以继续对集群资源进行分区,比如分成Web区、DB区等,便于部署不同的应用,并且可以实现不同配置的主机的共存。</li>    </ul>    <p>设计方案和系统实现如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/efb9e73a363bfd74b6a89b79aa34e09a.jpg"></p>    <h3>镜像统一管理</h3>    <p>镜像的统一管理是多集群模式下的一个非常重要的功能。统一PaaS平台需要对镜像做集中的管控,但是又要考虑镜像部署的效率。因此,在统一PaaS平台中采用了两级镜像的构架。</p>    <ul>     <li>在总部实现镜像的统一生命周期的管理,镜像的入库,出库和版本更新都在总部统一镜像库集中管理。这样未来可以和DevOps整合在一起,进行统一的开发,运营管理。</li>     <li>每个集群都有一个子库或者几个集群共享一个子库。子库可以设定同步规则,只同步一部分镜像到子库,并实现镜像的跨地域、跨IP承载网同步和更新,支持全量同步和增量同步。这样每个项目可以只同步自己的镜像到自己的集群中,提高集群应用部署的效率。</li>    </ul>    <p>设计方案和系统实现如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/9d859bbb3c108df359452556fd6f440b.jpg"></p>    <h3>应用统一部署</h3>    <p>多集群情况下的应用部署需要考虑的情况会比较复杂。</p>    <ul>     <li>应用需要能支持跨广域网,跨集群统一部署。</li>     <li>应用需要能支持部署到不同集群的不同的分区上。</li>     <li>应用需要能支持跨集群灰度发布和滚动升级。</li>    </ul>    <p>针对这些要求,统一PaaS平台对应用部署功能进行了改进。</p>    <p>用户定义完应用之后,点击部署,这时候会出现一个用户具有权限的集群和分区的列表,用户可以选择在哪个集群的哪个分区上部署应用。这样用户就能一键式的把应用同步部署到多个集群上。</p>    <p>对于应用的在线灰度发布和升级是企业应用必备的功能。大型的应用都会部署在多个集群或者分区,提高应用的高可用性,并且在升级的时候用户可以选择按集群和分区进行滚动升级。保证上线业务系统不中断,提高用户满意度。</p>    <p>设计方案和系统实现如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/1ba1b95a20b71289fb4bdeab6f4fea98.jpg"></p>    <h3>配置统一管理</h3>    <p>对于支撑多系统多应用共存的PaaS平台。必须实现配置和应用程序分离,因为每个应用的配置数据格式和需求都不一样,但是如果要求应用只是因为配置问题就修改程序结构,那么PaaS平台适应性太差,无法满足大规模的应用的部署。</p>    <p>Kubernetes ConfigMap的功能正好能满足多应用的复杂的环境下的配置管理,在统一PaaS管理平台中,我们进行了配置管理的封装。</p>    <ul>     <li>用户可以事先上传或者直接拷贝多个任意格式的配置文件(XML、PROPERTIES、TXT等)到不同的集群中创建配置库,形成一个绑定在不同的集群中的统一名字的配置库。</li>     <li>用户在应用部署的时候,选择该名字的配置库,就可以实现应用在不同集群部署的时候,自动绑定自己集群的配置数据,实现不同环境,不同集群的统一的应用和配置数据的绑定。</li>    </ul>    <p>设计方案和系统实现如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/b7fafc00406b07f6c83b587f49c4754b.jpg"></p>    <h3>统一监控</h3>    <p>在多集群多租户模式下,每个租户会关心自己的资源和服务的运行情况。因此统一PaaS平台通过统一监控管理实现对所有租户、集群、资源、应用的集中数据采集和展示,又能分租户展示不同的集群和服务的运行情况。并能在发生故障时及时获取告警信息,快速进行故障恢复和隔离。</p>    <p>设计方案和系统实现如下图所示。</p>    <p>(点击放大图像)</p>    <p><img src="https://simg.open-open.com/show/147c8be26118ba84f9f05adffcda8f3b.jpg"></p>    <h2>应用效果</h2>    <p>通过Kubernetes多集群统一管理,实现了对一级业务支撑系统中多项目集群、跨多个网络域、跨多个数据中心的复杂集群环境下进行集中资源管理,应用和配置数据的多集群统一部署和管理,提高了业务支撑中心对各分散系统的管理和监控力度。</p>    <p>目前试点的三个项目,共有35个集群,约5000个容器分布在全国多个机房。提供了针对多个集群的资源统一管理和调度、镜像集中管理、应用集中部署、配置统一管理和容器统一监控,同时可以定义在每个集群部署服务的容器实例的比例。</p>    <p>在未采用多集群管理之前,如:网状网系统上线一个新的版本,包含总部集群、容灾集群和31个省集群,需要至少5个人部署一天;使用Kubenetes多集群统一管理平台之后,通过多集群统一部署,只需要一个人10分钟即可完成33个集群的版本升级。</p>    <p>通过使用Kubernetes多集群统一管理中的“克隆”功能、能够非常快速地实现服务的发布。极大提高大规模应用快速部署的灵活性和系统快捷的水平扩展能力。</p>    <p>通过使用Kubernetes多集群统一管理,可以方便灵活地从业务视图、集群视图、租户视图等全方位监控各集群的资源整体利用率,实现动态监控和动态快速调整业务的容器数量。</p>    <h2>下一步计划</h2>    <p>统一PaaS平台经过三个系统的集群的试点,目前运行稳定,逐步积累了很多的运维和管理经验,在此基础上计划做进一步的研究和推广。</p>    <ul>     <li>推广到更多的项目,形成容器话应用的开发设计规范,镜像打包规范,PaaS平台运维规范等多个规范性文件,为未来的推广提供标准化和规范化支持。</li>     <li>与Mesos的集成。目前已经实现了Kubernetes和Mesos的深度集成,Kubernetes可以作为一个Framework运行在Mesos之上。下一步准备迁移Hadoop/Spark到Mesos,并且实现Kubernetes和Hadoop/Spark应用的资源共享。</li>     <li>与DevOps工具集的集成。目前我们正在实现针对PaaS平台的DevOps理念的实现。包含工具,流程和监控。未来实现整个从开发->代码质量分析->打包镜像->测试->部署的自动化支撑,并且通面板展现每个项目,每个微服务的所有环节的状态,从而提高移动对于整个开发测试过程的管理力度。</li>    </ul>    <h2>作者简介</h2>    <p>中国移动业务支撑系统部业务支撑中心 谢军 初瑞 夏敬侃</p>    <p><a href="/misc/goto?guid=4959675111983314557">阅读原文</a></p>    <p> </p>