APP下载

基于云原生环境的云存储在线应用系统

2020-04-23邹理贤

电子技术与软件工程 2020年8期
关键词:副本容器集群

邹理贤

(云宏信息科技股份有限公司 广东省广州市 510650)

过去几十年来,IT 机构的发展经历了单机架构、分布式架构和云计算架构的过程[1]。当前,国内外基于服务器虚拟化的云计算平台发展已经较为成熟,很多企业应用已经迁移到了云端。这些应用大部分基于传统的设计方法,并没有充分利用和发挥云的特点。近年来,云原生[2]的理念应运而生,主要特点是为云而生,充分利用云的弹性及分布式优势。云原生涵盖了容器、微服务、服务网格等技术[3]。随着 Docker 的出现与流行,基于容器的云计算平台逐渐火热,而现阶段 Docker 使用大多集中于操作系统虚拟化,基于 Docker 容器环境的云存储在线应用系统较少,虽然 Docker Hub 中提供了多种数据库的开源 Docker 镜像,但是目前鲜有企业级应用。

本文针对上述问题,主要研究如下几个内容:

(1)研究容器技术,形成搭建支撑云存储在线应用的基础架构平台;

(2)研究与实现云存储在线应用系统及其相关联服务微服务化,实现平台应用服务组件的模块化,使管理者可通过 UI 界面控制容器引擎,完成应用服务的自动化部署和运维;

(3)在此基础上进行分布式云存储在线应用系统的服务内容设计。

1 容器编排调度技术研究

容器运行于多个计算节点上,共同组成一个应用的微服务架构。容器编排技术为容器化的应用提供资源调度、部署运行以及服务的发现、扩容、缩容等一整套功能。

容器编排为高可用容器集群管理软件架构。集群中的机器被划分为一个(或多个)管理节点和一群计算节点(Node),其中管理节点上运行着集群管理相关的一组进程API 服务、多种控制管理器、调度器和分布式数据库四个组件,其中前三个组件构成了集群的总控中心,负责对集群中所有资源进行管控和调度。在每个计算节点上运行工作者、服务访问代理和容器代理三个组件,负责对本节点的容器的生命周期进行管理,以及实现服务代理的功能。另外,在所有节点皆可运行编排的命令行工具,提供集群管理工具集。

每个编排计算节点上运行一个编排的工作者,其监听管理节点的api 资源,通过监听到本节点的任务来编排本节点上的容器。当一个容器部署到本节点上时,节点访问代理就设置对应的访问规则来设定集群的访问能力,如网络端口,路由策略等。每个节点上都有个虚拟网络节点,其互相通信,通过加密虚拟网络包的方式实现集群内节点的安全通讯。

1.1 集群主要功能

1.1.1 资源调度

集群中的调度器,负责容器在集群节点中的调度分配。接收控制管理器创建的新容器,为其安排一个目标计算节点,目标节点上的工作者服务进程接管后续工作负责容器整个生命周期。

编排器的作用是将带调度的容器按照特定的调度算法和调度策略绑定到集群中的某个计算节点上,并将绑定信息写入数据库中。在整个调度过程中涉及三个对象,分别是:待调度容器列表、可用计算节点列表,以及调度算法和策略。

调度器默认的调度流程分为以下两步。

(1)预选调度过程,即遍历所有目标计算节点,筛选出符合要求的候选节点。编排器内置了多种预选策略。

(2)确定最优节点,采用优先策略计算出每个候选节点的积分,积分高者胜出。

调度策略支持支持基于容器名称和服务名称的容器调度设置,可以指定容器运行的主机,支持主机亲和性/反亲和性调度,支持容器亲和性/反亲和性调度。

1.1.2 服务发现

编排集群内部包含服务发现控制器,负责服务的创建、注册、监控、发现以及容器与服务之间的通讯。服务是一个定义容器集合的抽象,或则被访问者看作一个访问策略,有时也被称作微服务。服务是一种资源对象与容器相似。可以同过API 服务的POST 接口创建一个新的实例。

集群服务实现上主要通过集群内部的域名解析DNS 来实现,DNS 服务器通过API 服务监控与服务相关活动。当监控到服务创建时,DNS 服务器为每个Service 创建以一系列DNS 记录,通过DNS 来查找服务,NDS 返回的结果是集群IP(虚拟IP、集群IP)。

集群内的容器就可以通过对应的服务来解析出对应的IP,最终来实现集群内的容器服务发现通讯。

1.1.3 弹性伸缩

集群内部包含副本控制器,其核心作用是确保在任何时候集群中一个副本资源所关联的容器都保持一定数量的容器副本处于正常运行状态。如果该类容器副本数量太多,则副本控制器会销毁一些容器副本,反之副本控制器会添加容器副本,直到该类容器的副本数量达到预设的副本数量,实现自动创建、补足、替换、删除容器副本。

副本控制器常用的实用模式:

(1)重新调度。不管你想运行1 个副本还是1000 个副本,副本控制器都能确保指定数量的副本存在于集群中,即使发生节点故障或容器副本被终止运行等意外状况。

(2)弹性伸缩。手动或者通过自动扩容代理修改副本控制器的副本期望属性值,可实现扩大或缩小的副本数量。

图1:基于容器环境的基础架构设计

(3)滚动更新。副本控制器被设计成通过逐个替换容器的方式来辅助服务的滚动更新。推荐的方式是创建一个新的只有一个副本的资源,若新的资源副本数量加1,则旧的副本数量减1,直到这个旧的副本数量为零,然后删除该旧的容器。

1.1.4 编排服务

编排是集群内部的管理控制中心内,负责集群内的计算节点、容器副本、服务端点、命名空间、服务账号、资源定额等的管理并执行自动化修复流程,确保集群处于预期的工作状态。

其通过一个统一的编排服务接口,提供各个编排资源的提交及注册,其分为用户期望及编排状态两部分。当用户保存对应的信息后,编排控制器把对应的任务下发到各个对应的控制管理器上,让其编排调度。

1.1.5 健康检查

监控检测为资源的正常服务状态的检查,其分为准备态和健康态。准备态为容器服务从无到有准备完成可以提供正常服务了。健康态为容器服务运行很长时间后,编排引擎通过它来检测对应服务是否正常运行。

用户可以设置不用的规则,让监控检查来检测对应的服务,如端口是否打开,api 请求是否正常等。

1.1.6 生命周期管理

编排对容器的生命周期管理主要指其通过资源在集群内的状态其实现其副本数,对应节点存活迁移等。其主要通过各个节点的编排工作者来实现对应的生命周期管理。

编排工作者通过观察控制器对应的api 接口,然后通过容器调度标准接口来控制本节点的容器。其直接调用容器运行管理器器内建编排插件,通过方法调用来进行交互,从而减少远程的开销。

1.1.7 负载均衡管理

通过设置容器的入口点规则,生成对应负载均衡器的负载均衡规则。然后把动态生成的规则下发到各个节点的负载均衡器上。最终实现对集群内部服务的负载均衡的访问,实现高可用。

1.1.8 容器多集群管理

容器的多集群管理指的是集群通过集群命名空间的方式实现集群内部的租户环境划分。每个命名空间内包含多个容器服务,并建立对应的容器服务。各个命名空间件的容器服务不可互相访问,只能通过命名空间的服务来访问。以此实现通过命名空间对环境的隔离。

2 基于容器的基础架构平台设计

以提升用户的体验和满意度,提高云存储系统质量为目标,建设基于容器环境的云存储在线应用系统,研究基于Docker 技术快速构建容器基础设施,构建一套容器云平台,解决容器的多种资源编排和调度统一管理问题,实现云存储在线应用系统的轻量级自动化部署与管理功能。容器云环境的基础架构如图1 所示。

针对云存储在线应系统的建设要求,实现如下几个关键功能:

(1)大规模基础设施管理,实现容器与现有IaaS 平台融合和统一管理,实现大规模集群资源的自动化接入和管理,支持云存储在线应用系统的应用服务及合作伙伴系统的IT 资源需求,支持一键式的应用部署和应用管理功能。

(2)资源编排和调度:研究容器的Kubernetes、Mesos、Swarm、Cattle 等多种业界主流编排引擎支持问题,满足云存储在线应用生态圈建设的用户对各种类型资源编排和调度需求。

(3)实现弹性扩容机制,以应用为颗粒度进行动态的负载管理,配合持续部署规则,实现复杂场景下的应用全自动弹性伸缩。

(4)支持云存储在线应用的按照预先配置的策略,完成应用的自动化打包封装和交付过程。

(5)持续部署技术,支持云存储在线应用的按可通过全自动化的策略驱动,配合可定制的部署模板及调度策略,实现应用的一键部署及自动运维。

(6)无状态容器的分布式存储后端设计。

容器镜像是一种自包含格式,即包含云应用及其所有依赖,运行容器时无需任何外部依赖,可以充分保证云应用的迁移性。如果容器应用需要持久保存数据,即有状态容器,如何保证数据的迁移性就成为一个迫切需要解决的问题。解决问题的思路是分别处理容器和数据的生命周期,在容器引擎或容器云层面实现持久存储。

图2:基于容器环境的微服务基础架构示意

图3:云存储在线应用的功能架构设计图

第一种是基于单台宿主机器的持久存储解决方案,由该宿主机负责持久保存容器的数据。以Docker 容器引擎为例,运行容器时指定数据卷参数,能把宿主机系统的文件系统映射到容器内部文件系统。即使容器宕机,数据也仍然持久保存在当前宿主机上。当然,容器不再具备迁移性,因为数据仍然保留在宿主机器上。

第二种是基于多台宿主机器的持久存储解决方案。从Docker容器引擎1.8 版开始,提供了卷插件功能,确立容器引擎与存储后端的标准接口和交互方式。容器云Kubernetes 提供持久卷功能,支持有状态容器集合的运行。Apache Mesos 也提供类似的持久卷和共享持久卷功能。由此可见,主流容器云实现都提供支持有状态容器的前端接口,问题的关键变成如何选择合适的持久存储后端。

为了运行有状态容器,需要存储后端提供存储资源池。本项目拟研究一种由容器云统一管理的分布式存储系统,不仅支持物理节点、虚拟机节点和容器节点存储的汇集和释放,还同时提供了对象存储、块存储和文件存储接口,满足部署和运行有状态云原生应用的需求。实现原理是首先实现swift 存储系统的自动部署和运维,然后实现与容器持久存储接口兼容的对象存储、块存储和文件存储。

3 基于容器的微服务架构设计

基于Docker 容器环境,研究云存储在线应用系统架构的微服务化,解决项目的微服务应用,支撑PaaS 应用的快速开发应用,以及支持项目服务应用的创新发展。究基于容器环境的服务基础架构如图2 所示。

如图2 所示:

(1)服务注册中心微服务改造,解决项目的服务定位问题,以实现云端中间层服务发现和故障转移。通过服务发现与注册,实现只需要使用服务的标识符,便能访问到服务。

(2)构建统一配置中心,为各应用的所有环境提供了一个中心化的外部配置。通过构建统一配置中心,支持应用服务可以通过部署管道来进行测试或者投入生产;平台可以分别为这些环境创建配置,并且在需要迁移环境的时候获取对应环境的配置来运行。

(3)服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API 的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能;通过将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

4 分布式云存储在线应用系统设计

云存储在线应用系统以分布式存储技术来构建存储层,并在云存储架构的基础上,研发文件管理、工作空间、信息交流等服务体系。

云存储在线应用服务内容设计如图3 所示。

(1)结合容器技术的特点研发项目云存储在线应用与开发的应用中心,支持合作伙伴在平台的应用开发和快速部署;通过多应用服务接入,共同营造云存储在线应用的服务生态圈。支持包括iPhone、Android、PC 和Web 等多平台访问,用户可以随时随地享受本项目带来的移动互联信息服务,轻松实现移动办公。

(2)基于容器环境的云存储在线应用系统核心模块设计,该系统采用分层概念设计,将应用和核心模块分离,逐步打造云存储的PaaS 平台和针对各行业的垂直SaaS 服务。核心模块研究的关键技术如下:系统采用模块化设计,同时将接口以HTTP REST API 的方式开放,支持多种方式接入;对用户数据和文件采用分布式存储,保证用户资料的安全,确保每个数据都有多个备份;提供日志管理功能,包括日志记录,及报表分析和用户行为数据挖掘;研究对象缓存技术,帮助用户将常用的数据和对象装载到内存数据库中,保证数据的快速访问;研究数据安全技术,通过访问控制、备份策略、加密技术、认证等方式保证用户数据的传输安全和存储安全。

5 结束语

本系统基于云原生技术,研究云存储在线应用系统,解决了容器后端持久化存储及开放API 的问题,满足大规模云存储在线应用,实现信息存储、分发、共享等功能。

猜你喜欢

副本容器集群
Different Containers不同的容器
难以置信的事情
海上小型无人机集群的反制装备需求与应对之策研究
面向流媒体基于蚁群的副本选择算法①
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
副本放置中的更新策略及算法*