摘要:隨著云計(jì)算技術(shù)的不斷發(fā)展,Kubernetes(k8s)越來(lái)越多的被使用在PAAS層用來(lái)管理容器化的工作負(fù)載和服務(wù),編排容器以及自動(dòng)化彈性擴(kuò)容,構(gòu)建云原生應(yīng)用的架構(gòu)體系。在大規(guī)模云服務(wù)系統(tǒng)中,日志對(duì)于運(yùn)行環(huán)境中系統(tǒng)的監(jiān)控和問(wèn)題定位至關(guān)重要,是系統(tǒng)中一個(gè)不可缺少的重要組成部分,通過(guò)分析日志可以快速定位錯(cuò)誤,對(duì)系統(tǒng)風(fēng)險(xiǎn)作出預(yù)警。本文基于Kubernetes的持久化存儲(chǔ)管理PersistentVolume(pv)和PersistentVolumeClaim(pvc)功能,通過(guò)NFS實(shí)現(xiàn)應(yīng)用或服務(wù)的日志文件的持久化存儲(chǔ),并通過(guò)websocket推送日志到前端頁(yè)面可視化展示。該方案對(duì)日志的收集和集中處理具有靈活、方便的特點(diǎn),可用于快速搭建日志分析處理平臺(tái)。
關(guān)鍵詞:Kubernetes日志分析 PersistentVolume PersistentVolumeClaim
日志的價(jià)值是無(wú)窮的,尤其是在如今的大數(shù)據(jù)信息化的時(shí)代背景下,為了對(duì)系統(tǒng)進(jìn)行有效的監(jiān)控、維護(hù)、優(yōu)化、改進(jìn),都離不開(kāi)對(duì)日志的收集和分析,而這些日志散落在各個(gè)服務(wù)器上,無(wú)論對(duì)運(yùn)維還是業(yè)務(wù)開(kāi)發(fā),抑或是數(shù)據(jù)部門(mén)而言,查閱和分析日志是一大痛點(diǎn),實(shí)時(shí)收集分布在不同節(jié)點(diǎn)或機(jī)器上的日志,供離線(xiàn)或在線(xiàn)查詢(xún)及分析來(lái)提升工作效率的需求異常迫切,在此背景下,本文提出一種Kubernetes(k8s)日志平臺(tái)解決方案,能夠簡(jiǎn)單并有效的收集、處理日志。
1. Kubernetes
當(dāng)前云計(jì)算最熱門(mén)的技術(shù)之一是容器化,Docker是應(yīng)用最為廣泛的容器技術(shù),通過(guò)打包鏡像,啟動(dòng)容器來(lái)創(chuàng)建一個(gè)服務(wù)。但是隨著應(yīng)用越來(lái)越復(fù)雜,容器的數(shù)量也越來(lái)越多,由此衍生了管理運(yùn)維容器的重大問(wèn)題,k8s是為容器服務(wù)而生的一個(gè)可移植容器的編排管理工具,當(dāng)前k8s已經(jīng)主導(dǎo)了云業(yè)務(wù)流程,推動(dòng)了微服務(wù)架構(gòu)等熱門(mén)技術(shù)的普及和落地,正在如火如荼的發(fā)展。
K8s的容器管理單位是Pod,但是容器和 Pod 是短暫的,它們的生命周期可能很短,會(huì)被頻繁地銷(xiāo)毀和創(chuàng)建。容器銷(xiāo)毀時(shí),保存在容器內(nèi)部文件系統(tǒng)中的數(shù)據(jù)都會(huì)被清除,這對(duì)日志的收集和分析帶來(lái)難度,為了持久化保存容器的數(shù)據(jù),可以使用k8s Volume, Volume 的底層基礎(chǔ)設(shè)施由獨(dú)立的存儲(chǔ)系統(tǒng)管理,與 k8s集群是分離的。數(shù)據(jù)被持久化后,即使整個(gè)k8s崩潰也不會(huì)受損。
Volume提供了非常好的數(shù)據(jù)持久化方案,不過(guò)在可管理性上還有不足,比如會(huì)將應(yīng)用開(kāi)發(fā)人員和系統(tǒng)管理員的職責(zé)耦合,針對(duì)此,k8s給出的解決方案是PersistentVolume(PV)和PersistentVolumeClaim(PVC),PV是外部存儲(chǔ)系統(tǒng)中的一塊存儲(chǔ)空間,由管理員創(chuàng)建和維護(hù)。與Volume一樣,PV 具有持久性,生命周期獨(dú)立于Pod。PVC是對(duì) PV 的申請(qǐng),通常由普通用戶(hù)創(chuàng)建和維護(hù)。需要為Pod分配存儲(chǔ)資源時(shí),用戶(hù)可以創(chuàng)建一個(gè) PVC,指明存儲(chǔ)資源的容量大小和訪(fǎng)問(wèn)模式等信息,k8s會(huì)查找并提供滿(mǎn)足條件的PV。有了PVC,用戶(hù)只需要告訴k8s需要什么樣的存儲(chǔ)資源,而不必關(guān)心真正的空間從哪里分配,如何訪(fǎng)問(wèn)等底層細(xì)節(jié)信息。這些存儲(chǔ)的底層信息交給管理員來(lái)處理,只有管理員才應(yīng)該關(guān)心創(chuàng)建PV的細(xì)節(jié)信息。
2. 日志系統(tǒng)框架設(shè)計(jì)
對(duì)于容器內(nèi)應(yīng)用的日志信息,通常有兩種去向,打印到控制臺(tái)或存儲(chǔ)到文件中,而不管是那種去向,其生命周期都是和容器一樣的,容器一旦銷(xiāo)毀,那么日志也跟著會(huì)被刪除。收集容器應(yīng)用的日志可以使用k8s的持久化存儲(chǔ)功能PV和PVC,在主機(jī)上創(chuàng)建一個(gè)固定的目錄,該目錄供管理員來(lái)創(chuàng)建和維護(hù)PV。容器內(nèi)的日志文件使用的存儲(chǔ)資源是PVC,產(chǎn)生日志的容器將日志文件通過(guò)NFS共享到該目錄的子目錄下,這樣所有的日志文件都可以被訪(fǎng)問(wèn)到,并持久化保存。在主機(jī)中起一個(gè)后臺(tái)進(jìn)程讀取目錄文件,通過(guò)websocket推送相應(yīng)的日志信息,響應(yīng)前端的日志查看,搜索等請(qǐng)求。
日志平臺(tái)系統(tǒng)框架最終基于B/S架構(gòu)實(shí)現(xiàn),便于與云管平臺(tái)集成。系統(tǒng)的主要功能模塊包括PV和PVC的管理,后臺(tái)業(yè)務(wù)以及前端展示。
3. 實(shí)現(xiàn)細(xì)節(jié)
容器內(nèi)的日志文件通過(guò)NFS共享,需要在k8s的節(jié)點(diǎn)上安裝并配置NFS。
K8s中通過(guò)創(chuàng)建資源清單來(lái)創(chuàng)建資源,一般使用yaml格式的文件或者json格式的文件,資源清單實(shí)例化后就成了對(duì)象。創(chuàng)建PV需要指定PV在NFS服務(wù)器上對(duì)應(yīng)的目錄,創(chuàng)建后顯示狀態(tài)為avaliable,表示該P(yáng)V已經(jīng)就緒,可以被PVC申請(qǐng)使用。創(chuàng)建PVC指定需要申請(qǐng)使用的PV,k8s從現(xiàn)有存儲(chǔ)資源中匹配PV,最終會(huì)將PV和PVC進(jìn)行綁定,此時(shí)可以看到PV的狀態(tài)變?yōu)閎ound,這表明PVC創(chuàng)建成功并申請(qǐng)到存儲(chǔ)資源。容器應(yīng)用只需在創(chuàng)建Pod的資源清單中增加對(duì)PVC的使用,將日志文件mount到PVC申請(qǐng)的存儲(chǔ)資源上即可將日志文件持久化到NFS共享目錄下,針對(duì)不同的應(yīng)用使用不同的子目錄來(lái)區(qū)分和管理。
當(dāng)業(yè)務(wù)量較大時(shí),實(shí)現(xiàn)PV的動(dòng)態(tài)供給,使得日志存儲(chǔ)更加自動(dòng)化,需要使用到StorageClass,來(lái)對(duì)接存儲(chǔ),自動(dòng)關(guān)聯(lián)PVC,并創(chuàng)建PV。集群管理員預(yù)先創(chuàng)建存儲(chǔ)類(lèi)StorageClass,用戶(hù)創(chuàng)建使用存儲(chǔ)類(lèi)的PVC,并通知系統(tǒng),需要一個(gè)PV,系統(tǒng)去讀取存儲(chǔ)類(lèi)的信息,并基于存儲(chǔ)類(lèi)的信息,在后臺(tái)自動(dòng)創(chuàng)建PVC需要的PV,并綁定,這樣就實(shí)現(xiàn)了PV的動(dòng)態(tài)供給。
后臺(tái)業(yè)務(wù)主要分為兩部分,一個(gè)是運(yùn)行在host機(jī)器的后臺(tái)守護(hù)進(jìn)程,用來(lái)維護(hù)并管理共享目錄下的日志文件,負(fù)責(zé)定期清理配置過(guò)時(shí)的日志文件或存儲(chǔ)資源不夠時(shí)的決策等事項(xiàng);另一個(gè)是精簡(jiǎn)的springbootweb應(yīng)用程序,負(fù)責(zé)響應(yīng)瀏覽器的請(qǐng)求,并以websocket的通信方式推送日志數(shù)據(jù)給請(qǐng)求者。
前端展示是一個(gè)html5應(yīng)用,負(fù)責(zé)向后端發(fā)起查詢(xún)請(qǐng)求并將返回的日志數(shù)據(jù)優(yōu)雅的展示給用戶(hù)。該前端組件可以方便的集成進(jìn)云管平臺(tái)。
4. 結(jié)束語(yǔ)
日志平臺(tái)是保障系統(tǒng)穩(wěn)定運(yùn)行的重要部分,本文結(jié)合Kubernetes自身特色,提出一種簡(jiǎn)單可靠的日志處理平臺(tái)方案,使用PV和PVC,分離了管理員和普通用戶(hù)的職責(zé),更適合生產(chǎn)環(huán)境。日志處理平臺(tái)不僅需要收集和分析日志,還需要根據(jù)實(shí)際的應(yīng)用場(chǎng)景,對(duì)相應(yīng)的分析結(jié)果進(jìn)行處理,以實(shí)現(xiàn)自動(dòng)預(yù)警等現(xiàn)實(shí)需求,日志平臺(tái)方案還需要不斷的完善和優(yōu)化。
參考文獻(xiàn)
[1]應(yīng)用ELK構(gòu)建圖書(shū)館日志統(tǒng)一管理分析平臺(tái)[J].李劍,陳俊杰,鄭金帆.情報(bào)探索.2020(03)
[2]面向私有云平臺(tái)的日志收集與分析系統(tǒng)設(shè)計(jì)[J].張文燕,溫俊陽(yáng).電子技術(shù)與軟件工程.2020(20)
[3]日志功能使用問(wèn)答[J].孫秀洪.網(wǎng)絡(luò)安全和信息化.2020(05)
作者簡(jiǎn)介
周曉雯(199207),男,漢族,江西省,助理工程師,碩士,研究方向?yàn)榇髷?shù)據(jù)。