張碩

關鍵詞:Kubernetes;容器;私有云;資源管理調(diào)度
中圖分類號:TP315 文獻標識碼:A
0 引言
私有云平臺包括基礎設施服務(infrastructureas a service,IaaS)、平臺即服務(platform as aservice,PaaS) 和軟件運營服務(software as aservice,SaaS)。企業(yè)范圍內(nèi)的私有云應用主要包括移動互聯(lián)網(wǎng)應用、物聯(lián)網(wǎng)應用和大數(shù)據(jù)處理應用等,支撐這些應用的平臺軟件服務包含工作流引擎、復雜事件處理和大數(shù)據(jù)處理等相關服務[1]。隨著容器技術的廣泛使用與發(fā)展,越來越多的企業(yè)利用Docker(一個開源的應用容器引擎)建立其應用平臺,分析、執(zhí)行用戶提出的任務。容器比傳統(tǒng)虛擬機更具有優(yōu)勢,其能夠在短時間內(nèi)建立應用程序,可以在不同機器上進行移植,并且資源開銷較小。由于Docker 容器具有便攜性、可移植性和資源占用低等特點,用戶可以利用Docker 建立共享和自動化的云服務應用工作平臺。Docker 通過組件迅速建立應用程序,極大地消除了開發(fā)與生產(chǎn)環(huán)境之間的差別,因此企業(yè)逐步使用Docker 建立其私有云平臺軟件服務平臺。
1 Docker相關概述
1.1 Docker 基本概述
Docker 封裝整個軟件運行環(huán)境,使用戶可以將應用程序作為一個平臺進行分發(fā)或運行。與傳統(tǒng)虛擬機相比,Docker 容器主要具備以下優(yōu)勢:Docker容器不需要硬件仿真,可以直接運行在主機的內(nèi)核,高效利用了系統(tǒng)資源;由于Docker 容器能夠運行在主機實際物理內(nèi)存上,不需要打開操作系統(tǒng),因此可以在短時間內(nèi)完成Docker 容器的運行[2];容器本身具有直接運行應用程序的能力,Docker 容器運行在私有云平臺和物理內(nèi)存上,均能夠進行跨平臺的應用遷移。
1.2 Docker 系統(tǒng)架構
Docker 系統(tǒng)一般采取主從架構模式。Docker守護程序從鏡像庫中加載所需鏡像,建立容器,并且控制容器的開始和終止,同時一直監(jiān)聽Docker客戶端通過Docker 應用程序接口發(fā)送的請求。Docker 客戶端使用一組命令集合以實現(xiàn)用戶與Docker 之間的交互,Docker 客戶端通過Docker 應用程序接口與Docker 守護程序建立連接,并將通信的結果反饋給用戶。Docker 服務端可以同時存在多個Docker 守護程序,一般是通過Docker 應用程序接口交互的Docker 守護進程形成,用于執(zhí)行用戶要求的必要參數(shù)信息。
2 Kubernetes相關概述
2.1 Kubernetes 基本概念
Kubernetes 是一種主流的容器管理系統(tǒng),已經(jīng)廣泛應用在容器部署、管理和擴展等方面[3],其目的主要是管理容器化的應用程序和生命周期,使得用戶能夠高效調(diào)整服務規(guī)模,具有良好的可移植性和擴展性。Kubernetes 憑借強大的部署能力為容器分配IP 地址,隱藏底層網(wǎng)絡的連接情況,用戶不僅可以擴展Kubernetes 應用程序功能,還能在一個應用程序的不同版本間進行切換。此外,Kubernetes 知識框架可以支撐集群開發(fā)的資源對象,存儲系統(tǒng)和配置集中器負責存儲一切有關容器的信息。
Kubernetes 中每個集群都存在至少一個集群管理主節(jié)點,一般位于一個獨立的物理機上,任何控制命令都會發(fā)送給主節(jié)點,然后根據(jù)命令對整個集群進行執(zhí)行、調(diào)度或者管理,一旦主節(jié)點發(fā)生故障,用戶便無法對集群進行控制。Kubernetes 中存在若干個最小調(diào)度單元,每個最小調(diào)度單元包含若干個容器,這些最小調(diào)度單元使得Kubernetes 具備了創(chuàng)建、協(xié)調(diào)和管理的功能,使得多個服務模塊相互協(xié)調(diào)運作。
2.2 Kubernetes 系統(tǒng)架構
Kubernetes 是一種分布式主從結構,包括主節(jié)點和從節(jié)點,其中主節(jié)點用于資源調(diào)度,從節(jié)點用于接收并執(zhí)行主節(jié)點分配的任務[4]。主節(jié)點包括應用程序接口服務、存儲系統(tǒng)、調(diào)度器和集群控制中心,從節(jié)點包括最小調(diào)度單元、管理核心組件和集群服務對象。
在主節(jié)點中,應用程序接口服務負責進行模塊之間的交互,也是整個集群的輸入,接收用戶下達的調(diào)度和管理資源命令,并且將指令傳遞給管理核心組件。集群控制中心在整個生命周期都要對節(jié)點進行健康檢查,而調(diào)度器主要負責分析集群控制中心的資源使用情況。
在從節(jié)點中,管理核心組件在接收到主節(jié)點的指令后,啟動并監(jiān)聽子節(jié)點上的最小單元,并且將綁定情況通過應用程序接口服務反饋給主節(jié)點,同時集群服務對象也會為集群中指定的最小單元建立訪問路徑。
3 基于Kubernetes的私有云PaaS服務資源管理調(diào)度系統(tǒng)
3.1 系統(tǒng)需求分析
本文旨在為用戶設計一個基于Kubernetes 的私有云PaaS 服務資源管理調(diào)度系統(tǒng)(Kubernetesbasedcontainer cloud PaaS service resource managementscheduling system, KPRMS),從而降低私有云PaaS服務建立、操作和維護的難度。該系統(tǒng)對工作流引擎、復雜事件處理服務和大數(shù)據(jù)處理等服務所需的環(huán)境和資源進行統(tǒng)一的資源管理調(diào)度。
在私有云PaaS 系統(tǒng)中的各種應用,既能夠單獨提供服務,又能夠享受其他應用服務。通過對系統(tǒng)硬件資源的合理使用,KPRMS 不僅可以協(xié)調(diào)資源需求和依賴之間的關系,還可以提升應用服務的質(zhì)量。本文充分利用Kubernetes 的優(yōu)勢建立了KPRMS,其功能需求如下:服務注冊發(fā)現(xiàn)、資源監(jiān)測、資源預測、資源分配與調(diào)度、私有鏡像庫以及PaaS 服務管理門戶。
3.2 系統(tǒng)架構設計
KPRMS 部署架構如圖1 所示,用戶可以通過網(wǎng)頁圖形用戶界面(website graphical user interface,Web GUI)對PaaS 服務管理門戶進行交互,為用戶提供統(tǒng)一且便捷的管理接口。整個KPRMS 是通過Kubernetes 而建立的, 其模塊的功能如下:Kubernetes 和Docker 可實現(xiàn)對KPRMS 的管理;系統(tǒng)內(nèi)通過API Server 接口進行通信;資源監(jiān)測模塊負責監(jiān)測系統(tǒng)計算資源占用情況;資源調(diào)度模塊對容器進行計算資源的分配;資源預測模塊對計算資源使用情況預測并重新分配適當?shù)挠嬎阗Y源;容器性能監(jiān)控工具cAdvisor 實時監(jiān)測系統(tǒng)的運行情況。
3.3 系統(tǒng)資源監(jiān)測
KPRMS 中的資源監(jiān)測模塊采用了分布式主從架構。守護進程可與容器性能監(jiān)控工具進行通信,通過周期性的訪問工作節(jié)點來計算資源使用情況,并將訪問結果發(fā)送到信息收集節(jié)點。主機守護程序在接收到信息收集節(jié)點發(fā)送的消息后,通過運行系統(tǒng)命令來獲得工作節(jié)點的計算資源使用信息,并將信息反饋給信息收集節(jié)點。信息收集節(jié)點在主節(jié)點上運行,通過從守護進程獲得該節(jié)點上的資源使用情況,并將獲得的信息存儲在數(shù)據(jù)庫中,最后與調(diào)度器進行通信。前端的數(shù)據(jù)顯示環(huán)節(jié)是通過開源框架構建的。
3.4 系統(tǒng)資源調(diào)度
KPRMS 資源調(diào)度模塊的應用程序接口可通過解析用戶自定義的服務描述文件,將其轉換成資源需求信息發(fā)送給調(diào)度器,調(diào)度器根據(jù)資源使用情況為每個任務分配一個合適的主節(jié)點以及計算資源,并與資源監(jiān)測模塊進行通信,從而獲得KPRMS 系統(tǒng)中可用的計算資源。
3.5 系統(tǒng)資源預測
在KPRMS 的資源預測模塊中,決策部分接收從資源監(jiān)測模塊發(fā)送的計算資源使用信息,并以此作為模型的訓練樣本,建立模型后對短時間內(nèi)的計算資源使用情況做出預測。將決策結果發(fā)送給配置執(zhí)行部分,由其將決策結果整合成調(diào)度應用程序接口請求,使用橫向擴展的方式實現(xiàn)對應用服務的動態(tài)計算資源分配。
3.6 系統(tǒng)測試
鏡像庫是一個能夠進行高度擴展的服務器端應用程序,用戶通過圖形用戶界面實現(xiàn)對私有云Docker 鏡像的管理,Docker 鏡像中心為用戶提供了網(wǎng)頁端界面、查詢、管理和下載鏡像等功能。
在測試過程中,KPRMS 通過YAML 文件對應用進行描述,明確應用對于資源的需求情況,設計一個簡便的網(wǎng)頁應用。前端是一個能夠?qū)?shù)據(jù)庫進行讀寫的程序,后臺是一個MySQL 數(shù)據(jù)庫,在YAML 描述文件中明確了網(wǎng)頁程序?qū)?shù)據(jù)庫的依賴關系。YAML 文件通過門戶管理進行上傳,KPRMS 在解析完應用間的依賴關系后,通過資源調(diào)度模型給所有應用分配合適的部署節(jié)點,并依據(jù)用戶需求為應用分配計算資源。
4 結語與展望
本文設計并實現(xiàn)了一個基于Kubernetes 的私有云PaaS 服務資源管理調(diào)度系統(tǒng),該系統(tǒng)可解決由于私有云PaaS 服務應用之間相互依賴和制約所引發(fā)的一系列有關服務質(zhì)量下滑問題。通過提出并設計該系統(tǒng)的資源監(jiān)測、資源調(diào)度以及資源預測模型,開發(fā)了一個PaaS 服務管理門戶。當前工作取得了一定的成果,但仍然需要進行更深入的研究,例如,在對容器資源檢測時,探討應用類型和詢問周期之間存在的關系;容器在自適應分配資源的調(diào)節(jié)過程中,在調(diào)度開始與部署完成之間存在延時,為了避免由此引發(fā)不穩(wěn)定的服務,需要對系統(tǒng)資源調(diào)度策略不斷優(yōu)化。