一种Kubernetes日志平台解决方案

2021-11-10 06:03周晓雯
科学与生活 2021年12期
关键词:日志管理员容器

摘要:随着云计算技术的不断发展,Kubernetes(k8s)越来越多的被使用在PAAS层用来管理容器化的工作负载和服务,编排容器以及自动化弹性扩容,构建云原生应用的架构体系。在大规模云服务系统中,日志对于运行环境中系统的监控和问题定位至关重要,是系统中一个不可缺少的重要组成部分,通过分析日志可以快速定位错误,对系统风险作出预警。本文基于Kubernetes的持久化存储管理PersistentVolume(pv)和PersistentVolumeClaim(pvc)功能,通过NFS实现应用或服务的日志文件的持久化存储,并通过websocket推送日志到前端页面可视化展示。该方案对日志的收集和集中处理具有灵活、方便的特点,可用于快速搭建日志分析处理平台。

关键词:Kubernetes日志分析 PersistentVolume PersistentVolumeClaim

日志的价值是无穷的,尤其是在如今的大数据信息化的时代背景下,为了对系统进行有效的监控、维护、优化、改进,都离不开对日志的收集和分析,而这些日志散落在各个服务器上,无论对运維还是业务开发,抑或是数据部门而言,查阅和分析日志是一大痛点,实时收集分布在不同节点或机器上的日志,供离线或在线查询及分析来提升工作效率的需求异常迫切,在此背景下,本文提出一种Kubernetes(k8s)日志平台解决方案,能够简单并有效的收集、处理日志。

1. Kubernetes

当前云计算最热门的技术之一是容器化,Docker是应用最为广泛的容器技术,通过打包镜像,启动容器来创建一个服务。但是随着应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的重大问题,k8s是为容器服务而生的一个可移植容器的编排管理工具,当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,正在如火如荼的发展。

K8s的容器管理单位是Pod,但是容器和 Pod 是短暂的,它们的生命周期可能很短,会被频繁地销毁和创建。容器销毁时,保存在容器内部文件系统中的数据都会被清除,这对日志的收集和分析带来难度,为了持久化保存容器的数据,可以使用k8s Volume, Volume 的底层基础设施由独立的存储系统管理,与 k8s集群是分离的。数据被持久化后,即使整个k8s崩溃也不会受损。

Volume提供了非常好的数据持久化方案,不过在可管理性上还有不足,比如会将应用开发人员和系统管理员的职责耦合,针对此,k8s给出的解决方案是PersistentVolume(PV)和PersistentVolumeClaim(PVC),PV是外部存储系统中的一块存储空间,由管理员创建和维护。与Volume一样,PV 具有持久性,生命周期独立于Pod。PVC是对 PV 的申请,通常由普通用户创建和维护。需要为Pod分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式等信息,k8s会查找并提供满足条件的PV。有了PVC,用户只需要告诉k8s需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。这些存储的底层信息交给管理员来处理,只有管理员才应该关心创建PV的细节信息。

2. 日志系统框架设计

对于容器内应用的日志信息,通常有两种去向,打印到控制台或存储到文件中,而不管是那种去向,其生命周期都是和容器一样的,容器一旦销毁,那么日志也跟着会被删除。收集容器应用的日志可以使用k8s的持久化存储功能PV和PVC,在主机上创建一个固定的目录,该目录供管理员来创建和维护PV。容器内的日志文件使用的存储资源是PVC,产生日志的容器将日志文件通过NFS共享到该目录的子目录下,这样所有的日志文件都可以被访问到,并持久化保存。在主机中起一个后台进程读取目录文件,通过websocket推送相应的日志信息,响应前端的日志查看,搜索等请求。

日志平台系统框架最终基于B/S架构实现,便于与云管平台集成。系统的主要功能模块包括PV和PVC的管理,后台业务以及前端展示。

3. 实现细节

容器内的日志文件通过NFS共享,需要在k8s的节点上安装并配置NFS。

K8s中通过创建资源清单来创建资源,一般使用yaml格式的文件或者json格式的文件,资源清单实例化后就成了对象。创建PV需要指定PV在NFS服务器上对应的目录,创建后显示状态为avaliable,表示该PV已经就绪,可以被PVC申请使用。创建PVC指定需要申请使用的PV,k8s从现有存储资源中匹配PV,最终会将PV和PVC进行绑定,此时可以看到PV的状态变为bound,这表明PVC创建成功并申请到存储资源。容器应用只需在创建Pod的资源清单中增加对PVC的使用,将日志文件mount到PVC申请的存储资源上即可将日志文件持久化到NFS共享目录下,针对不同的应用使用不同的子目录来区分和管理。

当业务量较大时,实现PV的动态供给,使得日志存储更加自动化,需要使用到StorageClass,来对接存储,自动关联PVC,并创建PV。集群管理员预先创建存储类StorageClass,用户创建使用存储类的PVC,并通知系统,需要一个PV,系统去读取存储类的信息,并基于存储类的信息,在后台自动创建PVC需要的PV,并绑定,这样就实现了PV的动态供给。

后台业务主要分为两部分,一个是运行在host机器的后台守护进程,用来维护并管理共享目录下的日志文件,负责定期清理配置过时的日志文件或存储资源不够时的决策等事项;另一个是精简的springbootweb应用程序,负责响应浏览器的请求,并以websocket的通信方式推送日志数据给请求者。

前端展示是一个html5应用,负责向后端发起查询请求并将返回的日志数据优雅的展示给用户。该前端组件可以方便的集成进云管平台。

4. 结束语

日志平台是保障系统稳定运行的重要部分,本文结合Kubernetes自身特色,提出一种简单可靠的日志处理平台方案,使用PV和PVC,分离了管理员和普通用户的职责,更适合生产环境。日志处理平台不仅需要收集和分析日志,还需要根据实际的应用场景,对相应的分析结果进行处理,以实现自动预警等现实需求,日志平台方案还需要不断的完善和优化。

参考文献

[1]应用ELK构建图书馆日志统一管理分析平台[J].李剑,陈俊杰,郑金帆.情报探索.2020(03)

[2]面向私有云平台的日志收集与分析系统设计[J].张文燕,温俊阳.电子技术与软件工程.2020(20)

[3]日志功能使用问答[J].孙秀洪.网络安全和信息化.2020(05)

作者简介

周晓雯(199207),男,汉族,江西省,助理工程师,硕士,研究方向为大数据。

猜你喜欢
日志管理员容器
高效管理日志文件用命令行就可以
读扶贫日志
可疑的管理员
难以置信的事情
雅皮的心情日志
雅皮的心情日志
液体对容器底及容器对桌面的压力和压强
让管理员管不了的名字
取米
当小小图书管理员