转载

联通大数据能力开放平台容器化实践

中国联通大数据能力开放平台为支撑公司内部数据运营和外部数据合作提供了丰富的框架资源、数据资源、多样化的组件和工具以及应用部署环境。

平台为每个入驻租户都提供了独享和隔离的计算框架和数据库服务,包括关系型、离线分析型、流数据类、KV类型等;提供的数据服务包括抽取联通脱敏后的用户标签数据;提供的数据加工、分析类组件种类就更多了,包括元数据、数据质量、地图服务、分布式服务框架、分布式ETL、工作流引擎等二十多种。

随着容器技术的普及,一些租户也提出了希望开放平台能够提供一个友好的容器开发和运行环境,开放平台团队经过三个月的选型和研发,近期发布了自己的容器云平台,利用容器资源隔离、分布式部署、水平动态扩展、负载均衡、高可用等核心技术为公共、专业、创新等各类应用的快速部署提供快速支撑。

容器云实践

联通大数据能力开放平台容器云,是基于Kubernetes和Docker生态圈相关技术,结合联通大数据能力开放的特定业务场景,自主研发的一套完整容器云集群部署和管理平台,实现快速部署、秒级停启各类应用,支持多种服务的集群部署、负载均衡、灾难恢复和弹性伸缩。

关于Docker、Kubernetes的功能和技术特性,就不在本文做具体的介绍了,感兴趣的可以很容易找到各种技术资料,本文重点介绍支撑数据中心能力开放具体业务应用场景,有针对性的优化和改进。

1. 服务发现和路由

传统基于虚拟机、物理机部署应用时,首先要确定该业务是通过互联网访问还是通过内部生产网访问,通常我们的运维人员都需要在互联网访问区或用户访问区的代理设备上人工配置Nginx或者Apache等代理网关,才能保证服务被正确可控访问。

这种人工配置的方式显然不适合容器化部署的需要,更不适合多租户场景下的自动运维需要。为此我们对Kubernetes的代理访问功能进行优化,自主研发了kubernetesNG组件,该组件一方面能够快速发现和注册服务,实时监控服务信息变化并自动完成代理访问接入控制,另一方面对请求被跨节点转发做了针对性的优化,下面是对使用kubernetesNG和没有使用kubernetesNG时的对比:

联通大数据能力开放平台容器化实践

使用KubernetesNG前服务发现和路由

这是使用kubernetesNG前的服务访问方式,集群内部署了3个应用A、B、C,每个应用有2个docker实例,外部访问请求由Kubernetes负责调度到随机的一个Node节点上,一般情况下还要由这个node节点上的Kube-proxy再次转发到真正有服务的node节点上,客观上在物理节点间形成了转发。

每次发布新的应用都由Kubernetes分配一个对应端口NodePort,通常管理员需要手动的把NodePort配置到互联网区或者用户访问区内的Nginx负载均衡器上。

下面再来看看使用了kubernetesNG后的情况。

联通大数据能力开放平台容器化实践

使用kubernetesNG后的服务发现和路由

kubernetesNG与负载均衡器安装在同一台机器上,kubernetesNG会实时监控服务的变化,包括服务暴露区域(公网访问区或者内网访问区),并且根据变化更新负载均衡器配置,然后调用负载均衡器的重新加载配置命令,实时生效,从而完成服务对外发布动作。

由于kubernetesNG可以实时的发现应用部署的真正节点位置,所以通过配置负载均衡器,直接把请求分发到应用所在的机器上,比如访问应用A,就会直接把请求分发到机器1和2上的kube-proxy,由kube-proxy把请求直接发给本机的应用上(开源的kube-proxy会分发到其它机器上的,这里需要修改源码)。通过对比我们发现,新服务发布不再需要管理员手动配置负载均衡器了;原来请求需要经过两次负载均衡才能到达应用,现在实际上只需要一次负载均衡就可以到达应用了(第二次转发由于在同一节点内部完成,效率大大提高可以忽略不计了)。

2. 服务可视化调试

在租户自助进行应用容器化的部署和调试过程中,我们发现用户问的最多的是怎么调试,能不能ssh登陆上去,能不能替换容器内的配置文件。一般在容器中修改和调试脚本首选需要将sshd进程启动起来, 再ssh登录上去,然后修改容器内的文件,但如果这时容器重启了,Kubernetes会从自动仓库重新拉取原来的镜像,用户所做的修改全都丢失,如何解决这个问题?

我们增加了调试模式功能,在用户选择调试模式启动容器时,就会自动启动容器内的sshd,通过webssh进入容器内进行调试,调试完成以后,通过一键保存为容器镜像功能,上传到仓库,此时用户可以选择调试后的镜像进行启动,这样容器的调试方式就和传统基于服务器开发的模式保持一致。

联通大数据能力开放平台容器化实践

容器云面向服务的调试管理界面

3. 集成Ceph文件存储

有些应用要求具有上传说明文件和配置脚本的功能,需要将一些配置或者图片文件持久化,我们选择Ceph分布式文件系统来做为共享的持久化环境,Ceph社区活跃度高,使用成熟度高是选择它的一个主要原因。

联通大数据能力开放平台容器化实践

然而在使用过程中,发现一个问题,如果应用有1个实例时,没有问题,当应用需要扩展多个实例时,只有一个实例能够成功启动挂载存储,通过阅读Kubernetes的源码发现,Kubernetes对此作了限制,不允许一个volume绑定多个实例,我们对此进行了专门的优化来保证多个实例都能够成功挂载存储。

4. 持续集成She-Ra组件

在部署过程中应用开发者通常有这么一个开发习惯,修改了应用的一个Java文件后,就需要上传整个war包,有些用户开始使用ssh登录到容器,进行单个class文件的替换,这样很容易导致线上版本管理混乱,应用与代码库不对应,一开始我们引入了Jenkins,通过集成应用的代码,一键生成镜像,然后进行部署。

这在一定程度上解决了问题,但是Jenkins和容器云平台系统集成度不够友好, Jekins有自己单独的一套认证体系,没有办法和容器云平台很好的融合,不方便开发和运维人员使用,用户在使用时,必须要先登录Jenkins进行镜像构建,再登录容器云进行服务部署,操作不够方便,管理员管理两套账户也不够方便。因此我们独立用go语言研发了新的持续集成工具She-Ra,通过提供REST接口,与容器云平台相结合,通过版本控制工具一站式持续集成,全程可视化管控,为用户提供简单、灵活的持续部署方式。

实现功能

容器云平台核心功能模块包括服务集成、代码构建、镜像中心、集群管理、模板管理、新手入门六个部分。

联通大数据能力开放平台容器化实践

  • 代码构建:可与多种代码库关联,一键联合构建发布部署。
  • 镜像中心:多维度的镜像查找、归类,简单易用的操作让镜像管理不再繁琐。
  • 服务集成:服务实例动态伸缩调控及健康监测,基于容器镜像版本灵活的升级回滚策略,服务运行状况拓扑关系图形化。
  • 集群管理:多样化的图表展示集群节点状态和服务状态,监控整个集群的资源使用情况,如容器的内存和CPU、存储使用情况。
  • 模板管理:提供常用的镜像模板,降低使用难度,避免重复工作。
  • 新手入门:平台及各模块说明文档,方便用户了解并快速上手使用容器云平台。

联通大数据能力开放平台容器化实践

在能力开放平台首页提供了容器云入口

应用场景

容器云实现了应用快速部署及便捷管理,租户将部署包或者镜像包,一键部署并运行,支持选择互联网访问和内网访问方式,并提供图形化配置工具,运维人员不再接触任何物理机器,开发人员可以直接完成应用的部署,体现了DevOps中运维开发一体化的思想。

现已将自有大数据能力开放平台原先部署在虚拟机上的自有工具包括元数据管理平台、数据质量管理平台、BPM流程调度平台、BI构建、BDI分布式ETL工具已经迁移到了容器云中;第三方提供的可视化报表工具也已在容器云环境发布给租户使用;联通大数据征信产品已经在容器化改造过程中。

相比传统的基于虚拟机、物理机分配、申请、部署、测试,基于容器软件部署时间节省了80%以上,当应用部署频繁度上升后,时间的节省将是惊人的,同时容器部署均为自动化驱动,可靠性也是大幅度提升。

未来发展

我们将继续优化能力开放平台的Docker技术支撑:

  1. 增强kube-dns,支持将一切资源包括数据库、缓存、服务等内部域名化,去IP化,避免IP写死导致的各种环境调整故障
  2. 支持机器标签静态划配,指定标签群机器部署特定服务
  3. 基于haproxy网络转发替换官方kube-proxy网络转发,增强网络转发性能
  4. 增加租户级容器内部应用健康、内部应用进程、线程、容器之间网络流量监控
原文  http://dockone.io/article/1867
正文到此结束
Loading...