sf7071
作者sf70712021-12-22 17:08
云计算研发工程师, 某大型银行

某银行容器云平台的自动化运维实践

字数 5359阅读 5563评论 4赞 5

文章摘要

Docker 容器、Kubernetes、微服务、DevOps 等热门技术逐渐兴起和成熟,利用云原生(Cloud Native)解决方案为企业数字化转型,已成为主流趋势。但随着容器云平台建设规模的增长和使用场景的增多,容器云平台运维方面逐步显露出了很多全新的问题与挑战,以往针对虚拟机的运维管理经验不能有效覆盖平台化的容器场景。我们通过建设完善的云原生自动化运维体系,解决了容器云平台运维方面存在的诸多痛点。本文将从云原生自动化运维体系的需求分析、架构设计与实现、落地效果等方面进行介绍。

一、银行容器云平台建设的需求分析

伴随着 Docker 容器、Kubernetes、微服务、DevOps 等热门技术的兴起和逐渐成熟,利用云原生(Cloud Native)解决方案为企业数字化转型,已成为主流趋势。云原生解决方案通过使用容器、Kubernetes、微服务等这些新潮且先进的技术,能够大幅加快软件的开发迭代速度,提升应用架构敏捷度,提高 IT 资源的弹性和可用性,帮助企业客户加速实现数字化转型。通过容器技术搭建的云原生PaaS(Platform-as-a-Service)平台,可以为企业提供业务的核心底层支撑,同时能够建设、运行、管理业务应用或系统,使企业能够节省底层基础设施和业务运行系统搭建、运维的成本,将更多的人员和成本投入到业务相关的研发上。

银行数字化转型的一大关键内容就是如何通过利用容器云平台为应用开发人员和基础设施建设运维人员赋能。除了利用容器云平台带来容器编排调度、故障自检自愈、资源弹性供给等基本能力外,还需要更加关注容器云平台的稳定性、安全性、以及如何融入已有开发运维体系。

二、银行容器云平台的总体架构设计

我行容器云平台定位为以应用为中心的平台,总体上分为容器云平台和云管理平台两大部分,为跨服务器运行的容器化应用提供一站式完备的分布式应用系统开发、运行和支撑平台。平台内提供内建负载均衡、强大的故障发现和自我修复机制、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多租户应用支撑、透明的服务注册、服务发现、多层安全防护准入机制、多粒度的资源配额管理能力,此外提供完善的管理工具,包括开发、测试、发布、运维监控。

我行容器云平台包含多个Redhat Openshift Container Platform集群,并通过云管理平台统一管理。使用行内IaaS提供的基础资源,通过对接项目管理系统实现自动化的资源分配,通过对接变更管理系统实现变更信息获取,通过对接行内代码库和依赖包仓库来实现代码的持续集成和镜像构建,同时对接行内的统一认证、统一日志、监控告警和应用管理平台来实现相应的认证、日志、监控和应用变更功能。

Openshift基于英特尔®至强®可扩展处理器、英特尔®傲腾™固态盘等硬件产品,针对虚拟化、大数据和人工智能工作负载进行性能验证和优化,可支持裸机或者虚拟机。英特尔®傲腾™固态盘在SSD设备加入了新的存储层,能够提升存储层持久化的效率和可靠性。

OpenShift容器云单集群主要由Master管理节点、Slave计算节点及其他功能节点组成,其配置样例如下:

以上是一个经典的Openshift容器云集群配置案例,所有节点均可以采用虚拟机方案,但不同角色节点对应的资源配置量不同,搭配起来可以充分利用资源,其中计算节点也可以使用Intel x86物理机,在日常运维过程中,计算节点扩充频率最高,其次是路由节点,是自动化运维的重要管理内容。

银行随着容器云平台的引入,经过几年的蓬勃发展,平台规模日益扩大,当前容器云平台已建设超过30个集群,容器总数上万个。已经承载行内接近200个应用系统,包括使用资源需求庞大的AI平台系统、“双11”期间峰值TPS超1.1万的消息服务系统、日均千万笔交易的金融交易系统等。

三、容器云平台运维痛点

随着容器云平台建设规模的增长和使用场景的增多,容器云平台运维方面逐步显露出了很多全新的问题与挑战,由于容器技术本身与传统虚拟机技术存在一定的差别,容器云平台中使用自治网络用于容器通信,而且容器的调度由平台完成,容器的IP分配等场景无法人为地进行干预,以往针对虚拟机的运维管理经验不能有效覆盖平台化的容器场景。以下针对某银行这几年在容器云平台运维方面存在的痛点作一些说明。

(1)资产信息无法有效聚合。某银行建设容器云的思路是按照网络分区部署容器云平台。一方面考虑平台规模可以做到分区控制,避免超大规模平台的出现;另一方面依托现有的网络分区安全管理制度,有效抑制跨区带来的网络安全问题。最后在每一个网络区域部署一套容器云平台,容器云平台做到不跨区。由于行内的各应用系统等级保护要求不一样,需要在各个不同的等保网络区独立部署容器云平台来承载行内应用,容器云平台数量在不断地增加,建设初期对平台中各项资源收集整合就成为一项繁重的工作,没有配置管理无法有效做到各平台资产信息的集中可视化展示,包括平台内节点数量、节点名称、节点角色、节点IP、节点配置、平台内承载应用等信息。不仅导致周期性统计工作量的上升,而且容器云的资产定义与现有其他平台对资产的定义标准不统一,不利于其他平台与容器云平台整体联动,扩展性也不尽如人意。

(2)运维复杂度与平台规模呈正相关性。上一点已经提到,容器云平台规模的扩张不但使资产信息统计工作量上升,而且针对平台的运维工作量也出现井喷之势。容器云的运维工作大致可以分为两类,一类是日常维护工作,包括平台例行巡检、平台容量扩容、安全加固、组件更新、交付应用账户及相应的授权等;另一类是应急处置工作,包括故障应急处理、例行应急演练等。当承载容器云平台的总节点数超过一定规模后,尤其是日常维护工作如果不采用自动化处理会变得非常繁重,与此同时由于运维人员技术水平参差不齐,传统手工运维往往难以高效执行,出错率也变的很高。

(3)容器云平台运行监控数据不完善,不能有效获取平台运行状态,资源管控能力薄弱。容器云平台对底层服务器进行整合并形成弹性资源池,在没有一套完整的监控体系下,对容器云平台的状态掌握无异于盲人摸象,虽然可以通过原有的虚拟机监控方法人工统计容器云平台的整体负载情况,但实时性和针对性差。

(4)突发的大量资源交付周期长。在我们的实际工作中会出现某一季度或者某一个业务条线出现大量上云的应用,现有平台资源剩余量无法承载的情况。这种情况的发生虽然跟业务激增有一定的关系,但更多的问题是在不能实时掌握平台运行状态、不能对资源消耗情况进行追踪,不能自动化开展高效资源交付。

(5)异常事件跟踪能力薄弱。这部分能力主要依靠告警和日志查询功能来实现,在建设初期,往往还没有建立起一套完善的监控告警机制来实现及时精确的告警,各个容器云集群的日志没有做到统一收集,通常是云上应用系统的业务发生异常后,才向平台运维方申请排查,在没有准确的告警及日志的帮助下无法第一时间定位问题点,排查耗时长且响应不及时。

四、容器云平台自动化运维的实现

自动化运维是容器云平台建设中期开始逐步完善的,大概分为五块内容:配置管理、监控告警、自动发布、流程管理、批量执行。

配置管理分为两部分,一是平台级的配置信息管理,体现在平台所在区域、平台节点数量、平台节点角色等信息的采集入库,并通过统一视图进行展示;二是平台内的应用容器的信息采集入库,包括应用系统名称、应用系统容器镜像版本、应用容器IP地址、应用容器运行环境等信息。

监控告警分为四块,一是资源监控,包括平台资源总量、己使用量、可分配量;二是系统监控,包括节点级CPU/内存/磁盘实际使用率、平台流量入口业务请求速率、节点就绪状态等,并通过设置安全阈值在异常时触发告警;三是业务监控,包括应用系统数量统计、运行应用容器数量、项目资源配额、项目维度容器实际CPU/内存使用率、应用容器异常状态告警等;四是日志监控,主要体现在日志的集中采集分析。CPU资源监控需要适应容器环境的特点,具备灵活性和自动化。

自动发布针对是云上应用系统,通过CICD支持应用的自动发布及回滚。

流程管理体现在利用工单系统、标准流程实现资源的按期交付,应用投产上线流程标准化。

批量执行将繁琐的平台巡检工作、平台扩容工作利用自动化工具实现批量执行,缩短周期,提高整体效率,减少人工成本。

基于容器云平台本身所带来的好处以及其高效性、灵活性的特点,某银行设计了一套针对容器云平台的自动化运维架构。容器云平台本身针对应用开发团队来说已经实现了所测即所投、应用快速发布、应用健康检查、应用故障自愈、基于持续交付系统的自动发布等能力。自动化运维所做的更多是偏向平台运维本身,大致内容如下。

(1) 建设云管平台。云管平台建设的目的在于,一方面纳管所有的容器云平台,通过标准Kubernetes API进行纳管,云管平台中记录各容器云平台网络分区信息、节点数量、应用项目相关信息等并通过统一视图进行展示,基于这些信息组成一套容器云平台的CMDB。另一方面提供统一API接口供外部系统调用,后续新建设的容器云平台信息由云管平台API进行封装,提高可扩展性。同时实现统一用户认证、权限集中控制和审计,满足管理要求。

(2)对接配置管理系统(CMDB)。除了云管平台自身的CMDB外,行内配置管理系统通过云管平台API遍历所有容器云平台的应用系统配置信息并入库,包括应用系统名称、应用系统容器镜像版本、应用容器IP地址、应用容器运行环境、应用项目组管理成员等信息。通过完善的配置信息管理可以快速定位故障应用的相关属性。

(3)建立统一用户体系。云管平台通过对接行内统一用户平台实现单点登录,这样做的好处是:首先应用项目成员可以完成自行登录,不需要容器云平台侧进行用户分配;其次可以实现基于用户角色的权限绑定并进行操作审计;最后可以基于真实用户实现和其他平台之间的联动,比如外部的交付平台。

(4)对接日志中心。在所有容器云平台的节点上部署日志采集工具对接行内日志中心,通过日志中心实现日志集中查询分析。

(5)建立监控体系。监控体系由容器云平台监控系统和行内监控中心组成。监控系统我们采用Prometheus监控组件和Grafana监控展示组件,对监控指标、告警规则和展示面板进行定制开发,各容器云平台分别对接行内监控中心,将结构化监控数据及告警规则传递至监控中心,整体实现了资源监控、系统监控、业务监控,异常事件短信告警。提升异常事件跟踪、资源管控能力,并且根据资源使用率的监控可以提前对资源枯竭进行预警,提前完成节点扩容,缩短资源交付周期。基础设施资源建议选择能够支持开源主流监控技术栈的产品,包括CPU、内存、磁盘等等,例如英特尔云原生telemetry software stack技术支持一系列信息采集、监控、展示组件 (Collectd, Prometheus, node-exporter, Grafana)。

(6)批量执行工具。平台巡检、平台扩容等操作固化、频繁的工作采用自研Ansible  playbook结合Openshift本身的Ansible playbook合并成一个自动化工具,可以实现一键化完成平台巡检并生成巡检报告、平台扩容前针对虚拟机的准备工作、执行平台扩容等内容。直接缩短维护时间、降低使用技术门槛,提高运维效率。

(7)流程管理。目前有两套流程,一个是围绕应用项目自动发布的,另一个是应对容器云平台故障应急的。应用项目自动发布流程基于DevOps流程,行内代码仓库、交付中心对接云管平台,各容器云平台对接制品仓库,结合投产工单系统整体实现从源码到镜像制品再到自动发布的应用构建发布流水线,其中包含代码基线管理、应用代码单元测试、应用镜像制品晋级管理等管理流程,能够使应用项目组自行完成应用的快速交付。容器云平台故障应急流程则是通过行内监控中心派单机制结合行内应急故障处置流程来实现,监控中心会根据容器云平台监控系统报送的监控数据和告警规则来决策故障事件等级并下发告警短信通知,如果等级过高则触发应急故障处理流程,值班人员根据容器云平台应急手册中命中的场景展开应急处置工作。这里需要注意的一个问题就是应急手册场景要细、操作步骤可靠可行,现有的这套流程提高了容器云平台应急事件处理的效率,大大缩短了应急响应时间。

五、实现自动化运维带来的效果及总结

通过基于OpenShift的自动化运维机制,并与行内科技管理、配置、应用支持等系统对接,很好地支撑了资源量大、并发量高的应用场景,同时稳定地支持了行内重要交易系统的运行。基于容器云平台的自动化运维主要带来了如下三方面好处:一是为开发人员减负、聚焦于业务功能实现和创新,实现分钟级的应用快速部署,提升应用研发和运维效率;二是实现云上应用的全生命周期管理,提供了应用运行全景视图;三是实现资源按需自动供给、弹性扩容、空闲自动回收,资源使用效率提升三倍以上。

容器云平台在某银行的应用已经日渐成熟,其作为容器化底座的基础平台,今后将为基于Service Mesh的微服务治理平台、基于Serverless的应用开发平台提供有力的保障。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论4 条评论

御麟千古御麟千古其它, 某银行
2021-12-30 15:56
文章较为全面的介绍了银行容器云建设的整体布局,也符合大多数银行容器云平台的建设路径,尤其是文中所提到的痛点内容,感同身受。有几点问题需要请教:1、关于容器云自动化运维,贵行使用的ansible工具,在使用ansible过程中,是否需要开通root用户ssh登录容器云各个节点的权限?如若开通,如何应对监管对于操作系统的安全基线要求?2、在容器云平台是否有遇到应用容器需要固定IP的场景,对于固定IP是如何分配和管理的?3、在容器云运维过程中,针对业务应用容器,运维人员是如何判断和发起资源自动回收机制的?4、关于容器持久化数据文件是如何存储的?5、容器宿主机节点本次磁盘空间预留多少以保证满足业务应用日志的临时存放需求,统一日志平台的日志实时性是到什么级别,如何满足查看应用实时日志的需求?
menglunyangmenglunyang系统工程师, 中国银行
2021-12-29 23:49
文章重点介绍了如何实现自动化运维,包括系统架构,各个组件情况配置。是一套比较完善的运维平台,。作者不仅针对容器平台做了详细介绍,还详细说明了容器平台和周围系统如何对接,对我们有很大启发。未来可以根据自动化水平深入运维,做到自动化智能化运维容器平台。
孙建军孙建军软件架构设计师, 兴业数金
2021-12-28 15:51
通常我们更关注容器云对研发的便利性及可伸缩的扩展性方面,本篇文章侧重于在容器云架构下,通过对传统运维存在的问题进行分析,对运维自动化进行阐述,让我们对容器云架构运维方向的关注点有了全面的认识,是一篇容器云运维方向的好文
笑笑笑笑系统工程师, 财险
2021-12-27 09:31
文章价值点: 文章的价值点体现在作者整体的介绍了所在银行的容器云平台架构,让我们对银行的容器云平台的建设有一定的了解; 文章建议: 如果能多些架构图就更好; 文章内容疑问: 贵司的Openshift是使用企业版还是社区版? 文章内容概括: 需求就是加快软件迭代,提高IT资源弹性和可用性。 计算节点用的是Intel x86物理机,硬件采用intel 至强处理器以及傲腾固态硬盘, 痛点1.容器云平台不跨区,按现有网络分区建容器云,好处是利用现有网络安全管理制度以及安全策略 坏处要容器云平台数量需要多台 痛点2.资源收集整合工作繁重,收集内容包括每套云平台的节点数量、节点名称、节点角色、节点IP、节点配置、平台内承载的应用信息 痛点3.运维复杂度增加。运维工作分两块: 1.日常维护工作 :平台例行巡检、容量扩容、安全加固、组件更新、交付应用账户及相应的授权; 2.应急处理:故障演练、应急演练; 痛点4.容器云平台的监控数据; 痛点5.交付周期长; 痛点6.建设初期,异常时间跟踪能力弱。 【个人看法】 文中提出了问题以及解决方案,其中细节还有待读者逐步细化才能用到自己所在的公司
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。