
基于K3s构建面向云原生应用的容器平台设计与实践.docx
14页基于K3s构建面向云原生应用的容器平台设计与实践 摘 要:视频分析系统随着检测类型、检测视频路数的不断增加,既有系统后台架构的弊端日渐凸显,主要体现在高可用、部署、自动化运维、横向自动扩缩容四个方面为了解决这四个方面问题,提出了基于K3s的云原生应用容器平台的架构设计经试用实践证明,该平台架构既保证了视频分析系统的高可用性,又有效地提高了部署效率,在基本实现了自动化运维的同时,也具有了横向扩缩容功能Key:K3s;容器;自动化运维:TP393 :A :2096-4706(2021)12-0022-04Abstract: With the continuous increase of detection types and the number of detection video channels, the disadvantages of the background architecture of the existing video analysis system are becoming increasingly prominent, which are mainly reflected in four aspects: high availability, deployment, automatic operation and maintenance and horizontal automatic expansion and contraction. In order to solve these four problems, the architecture design of cloud native application container platform based on K3s is proposed. The trial practice shows that the platform architecture not only ensures the high availability of the video analysis system, but also effectively improves the deployment efficiency. It not only basically realizes automatic operation and maintenance, but also has the function of horizontal expansion and contraction.Keywords: K3s; container; automatic operation and maintenance0 引 言隨着高速铁路的快速发展,为了进一步提高车站、站台以及沿线的安全,对视频分析系统(以下简称分析系统)提出了更高的要求。
在视频检测量不断增多的同时,多样化的检测需求也在不断地提出,而分析系统通过不断地增加视频检测服务来满足需求不断增多的视频检测服务让分析系统问题凸显:(1)由于检测服务多,有些服务间彼此依赖,某一个服务的异常都可能导致某一类检测服务的不可用2)以人工为主的部署,可维护性差3)以人工为主的运维错误率较高,导致稳定性差4)在检测需求波动大时,无法做到横向自动扩缩容因此,只有探索提高平台的高可用、服务的易部署、运维的自动化、横向的自动扩缩容的解决方案,才能解决目前分析系统所遇到的瓶颈问题容器技术+容器编排调度工具是国内外现阶段平台建设领域的主流本文根据分析系统自身业务的需求和特点,结合K3S等开源项目搭建私有的云原生应用容器平台(以下简称容器云),并将原有系统的服务拆分改造并容器化后迁移到容器云上,以达到分析系统的高可用、易部署、自动化运维、横向自动扩缩容的目的1 开源项目概述1.1 DockerDocker是一个开源的应用容器引擎,让开发者可以打包应用以及依赖到一个可移植的容器中,然后发布到任何流行的Linux设备或者Windows设备,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口[1]。
结合Dockers镜像私库,可以方便地管理镜像以及版本,达到了一次打包随处部署的可能同时,将应用部署到容器使其具有了可移植性,成为一种必然的趋势因此,可以将Docker作为构建容器云的基础引擎1.2 Nvidia-device-plugin与Nvidia-dockerNvidia-device-plugin是用于K3s的NVIDIA设备插件通过将此插件部署为一个DaemonSet可以实现:(1)在集群的每个节点上公开GPU的数量2)跟踪GPU的运行状况3)在K8s集群中运行支持GPU的容器Nvidia-docker是NVIDIA容器工具包,允许用户构建和运行GPU加速的Docker容器,该工具包包括一个容器运行时库和实用程序,用于自动配置容器以利用NVIDIA GPU目前分析系统中使用的正是NVIDIA的GPU设备,所以需要在配备了GPU的主机上部署以上两个插件,使Docker支持GPU的应用1.3 K3s对于大型企业而言,随着系统规模的不断扩大,应用服务的数量和节点主机的数量都在逐渐增加,单纯靠Docker已无法满足系统运维的需求[2]K3s是Rancher开源的一个轻量级的Kubernetes[3](以下简称K8s)发行版,它针对边缘计算、物联网等场景进行了高度优化,最大程度减轻了外部依赖性。
K3s保留了K8s的:(1)集群管理2)应用健康检测与自动修复能力3)容器集群的自动化部署4)支持服务的发现调度5)弹性伸缩等特性[4]由于K8s背靠Google,且有众多的成功案例而K3s来源于K8s,因此基于K3s构建容器云是一个不错的选择1.4 PrometheusPrometheus是一个系统监控和告警的开源项目,2016年加入CNCF(Cloud Native Computing Foundation),成为仅次于K8s之后的第二个托管项目Prometheus的主要优势:(1)由指标名和键/值对标签标识的时间序列数据组成的多维数据模型2)强大的查询语言PromQL3)不依赖分布式存储,单个服务节点具有自治能力4)HTTP协议的数据服务接口5)支持多种类型的图表和仪表盘[5]目前已被广泛地用于K8s集群的监控系统中因此,选择Prometheus作为容器云的基础监控及告警的工具1.5 Docker-RegistryRegistry是一個无状态、高度可扩展的服务端应用程序,用于存储和分发Docker镜像Registry是开源的[6]此项目是Docker官方提供给用户构建私有本地镜像仓库的工具。
因此,作为容器云的私有镜像仓库工具2 容器云的平台设计2.1 总统设计容器云既可以部署在物理主机上,也可以部署在云主机上,总体架构如图1所示资源层属于设备层,可以是物理主机设备,也可以是云主机设备,主要是为平台层提供存储和部署能支撑容器的操作系统本次平台设计与实践是以物理主机为主,用于检测服务的主机设备还需要配备NVIDIA的GPU硬件平台层包括容器云的核心组件,如:集群监控Prometheus、运行镜像的容器引擎Docker、支持GPU设备的容器插件、统一编排与调度的K3s、镜像私库Docker-Registry、高可用的分布式存储MinIO等应用层是针对平台层进行对集群管理、应用管理、部署管理、镜像管理以及监控管理等的一些平台类的管理软件2.2 系统总体功能设计容器云,主要是对分析系统的可视化部署、自动化运维、服务高可用、横向自动扩缩容四方面的支持自动化运维包括:平台监控、故障自动修复等,为分析系统的高可用运行提供保障2.2.1 可视化部署容器云对部署提供可视化界面,简化了通过编写YAML或JSON文件等方式来部署的烦琐操作,保证了部署的容器具有统一规范的命名、labels等,便于后期的运维管理;通过可视化界面可以很方便地对所部署的容器选择所依赖的GPU厂商,并将此容器部署到配备了所依赖厂商GPU的节点上,避免了由于部署错误而导致容器不可用的问题。
可视化部署界面如图2所示2.2.2 自动化运维容器云提供对平台的监控、故障的自修复等功能,为运维人员提供高效便捷的自动化运维工具:(1)平台监控容器云监控工具采用开源项目Prometheus提供的监控项主要有:物理主机的状态、平台的运行状态、应用的状态、服务负载等方面的监控指标同时以图表及仪表盘的方式进行展示对异常告警可以通过邮件、等通信方式推送到指定的运维人员,既降低了人工巡检的成本,又缩短了故障发现的周期集群主机节点及监控如图3所示2)故障自动修复当K3s的健康检查机制发现某个节点出现问题,它会自动将该节点上的资源转移到其他节点上并完成自动恢复;当检测发现某个容器出现问题时,会重启容器私有仓库的搭建,为分析系统的服务出现异常时进行自动修复提供了支持,为新版本部署失败后回滚到其他历史版本提供了支持,为应用服务的不间断运行提供了可能2.2.3 服务高可用分析系统的服务高可用通过K3s的副本及探针等机制来实现2.2.4 横向自动扩缩容K3s根据容器预定义的负载指标(包括:CPU、GPU、内存、磁盘等)的使用情况来确定是否进行扩容或缩容在分析系统中,主要以GPU的监控指标来确定扩缩容的情况。
2.3 容器云的高可用设计分析系统在面向生产环境的实践中,高可用部署是无法避免的问题在这种情况下,通过容器云的高可用,来避免所造成的影响,或者将影响降到最低2.3.1 K3s的高可用部署虽然单节点K3s集群可以满足各种用例,但对于Kubernetes Control-plane的正常运行至关重要的环境,可以在高可用配置中运行K3s[7]这种模式下,必须有奇数的服务器节点,建议从三个节点开始K3s高可用架构示意图如图4所示2.3.2 存储的可靠性容器云根据分析系统对存储的安全性要求,对视频检测结果的图片、视频片段等文件都存储到统一的分布式对象存储MinIO中;对用户数据则存储到采用主从方式部署的高可用集群数据库中在K3s集群中采用ETCD作为数据存储的媒介2.3.3 分析系统的高可用分析系统的各类服务都以容器的形式部署到K3s中,K3s通过副本的冗余来提供服务的高可用首先打包服务为镜像并上传到镜像私库,然后在容器云的可视化部署界面,根据业务的实际运行情况,以Deployment、StatefulSets或DaemonSets中的任一种方式部署服务,通过配置合理的副本数和探针保证服务的高可用。
当主机节点出现故障或服务本身的BUG导致不可用时,K3s就会自动在其他主机上重新部署服务或重启服务,来保证与部署配置的一致性2.3.4 监控的多样化与自动告警容器云分别从主机节点、容器云、容器三个方面对容器云的健康状况进行监控在所有的主机节点上都部署了Prometheus的客户端组件node-exporter(配备了NVIDIA GPU的主机需要部署dcgm-exporter[6],其他厂商的GPU需要根据厂商提供的插件安装),实时采集宿主机的硬件、操作系统以及所部署的容器的关键指标并上报一旦出现告警,就会触发Alert manager组件,并根据平台配置进行告警对于容器,利用K3s的探针机制,定期检测健康状态,当检测到异常时,自动根据配置策略对容器进行下一步的操作,同时发送告警信息。












