劉宏娟,黃 煒,李文吉,邵治濤,胡 倩
(1.自然資源部航空地球物理與遙感地質重點實驗室,北京 100083;2.中國自然資源航空物探遙感中心, 北京 100083)
衛星遙感數據的處理及應用需要強大的算力支持,目前在用的數據處理平臺以單體服務器和虛擬化平臺為主。隨著我國航天事業的高速發展,衛星遙感也進入了“大數據”時代,一方面,衛星遙感行業按照地質調查整體規劃要向著一張圖、一站式、平臺化的方向發展。另一方面,衛星遙感數據的顯著特點是多元異構,除了基本的衛星影像之外還包含了時間、空間、頻譜等復雜的地質屬性信息,衛星遙感的數據類型日漸豐富,數據總量呈現海量增長趨勢,對硬件資源動態分配、彈性擴展、快速部署等方面均提出了更高要求。因此,探索利用云計算、大數據等新技術構建更加高效便捷的數據處理平臺近年來在衛星遙感行業愈發重要,并已在地質調查的其他領域內取得了進展[1-2]。本文引入了容器概念以及Kubernetes容器集群管理系統,以容器為基本單位代替虛擬機部署應用服務,充分發揮容器輕便快捷、彈性擴展、便于維護的優勢,嘗試構建符合衛星遙感行業特點的容器云平臺[3]。利用Kubernetes對容器的調度管理機制,將計算、網絡、存儲等服務器硬件資源虛擬化后動態分配給容器,為運行在容器內的衛星遙感應用服務提供高效可靠、輕便統一的“一站式”服務。
容器(Container)技術是一種輕量級的操作系統層虛擬化技術,借鑒了遠洋運輸里“集裝箱”的理念。一般而言,部署一個應用需要提前準備好物理主機、操作系統以及各種中間件等軟硬件環境,虛擬化部署一定程度上實現了硬件資源復用,但沒有解決應用層問題,針對每一項應用部署還是需要單獨搭建一整套依賴的操作系統、應用環境等。容器技術的原理是基于Linux的Namespace和Cgroup機制,將應用打包并虛擬化封裝出了一套內核輕量級的操作系統(NameSpace區分隔離容器,Cgroup管理控制系統資源)[4],通過容器引擎共享操作系統,只需在容器內部打包必要的Lib/Bin等操作系統文件,具有極其輕量、秒級部署、易于移植、彈性伸縮等特點,極大提高了部署和運維效率[5]。
Docker是一個基于LXC(Linux Container)的開源容器引擎,將與應用相關的依賴項(包括環境、程序、文件)打包成鏡像部署在物理機中,主要包括容器(Container)、鏡像(Image)以及倉庫(Repository)3個部分。由于容器是應用程序的抽象,將各類應用服務變成模塊化的組件,容器可以在相互隔離的物理環境中獨立運行,物理機上可以同時運行多個容器,容器之間共享操作系統。利用鏡像倉庫,運維人員可以管理不同的鏡像版本,靈活配置、快速部署。由于Docker標準化、輕量級、易遷移擴展的優勢,Docker已發展成了容器技術的代名詞,是目前應用最廣泛的容器引擎[6]。
虛擬化能更好地利用硬件資源,同一臺物理主機上可以部署運行多個虛擬機,虛擬機之間資源和進程彼此隔離,解決了傳統模式下同一臺物理機上的應用服務搶奪資源問題。虛擬機是在物理主機中虛擬出一臺完整計算機,在虛擬化的硬件之上運行所有組件(包括自身操作系統),而容器則是直接將物理主機的操作系統虛擬出獨立的用戶空間,每個用戶空間分配有各自的CPU、內存等計算資源供容器使用,容器之間彼此獨立但共享物理主機的操作系統[7]。因而,容器的啟動更迅速,創建更加簡便快捷,能支持大規模應用服務的快速部署更新。虛擬化與容器的差異對比如圖1所示。

圖1 虛擬化與容器對比
隨著容器化部署的應用不斷增多,容器和物理主機的集群規模也隨之不斷刷新,Docker 逐漸無法滿足大規模容器集群的管理需求。Kubernetes是Google公司以Docker為基礎、面向無服務場景的開源容器集群管理系統,能夠為容器化的應用服務提供資源調度、自動重啟、負載均衡、服務發現等基礎功能。Kubernetes支持跨物理主機管理容器,大大降低了容器平臺的維護難度,同時還為開發人員提供了一套RESTful接口,為后續開發拓展打下了良好基礎。鑒于 Kubernetes強大的開源社區支撐以及眾多成功應用的案例,是當下較為主流的容器管理平臺[8-9]。
基于 Kubernetes衛星遙感數據容器云平臺的邏輯功能框圖如圖 2 所示,包括物理層、Kubernetes 平臺層和應用層3部分[10-11]。為保障衛星遙感業務正常運行,容器云平臺之外還需要配套相應的支撐服務。本文選擇了兩個典型支撐服務作為代表:分布式存儲和ES(Elastic Search)集群。

圖2 容器云平臺邏輯架構
物理層主要是指由實體服務器池化虛擬出來的物理資源(包括計算資源、存儲資源、網絡資源),這些物理資源會被上層的 Kubernetes調度并分配給不同的容器。Kubernetes層是整個容器云平臺的核心,統一管理控制容器及應用層服務的生命周期、資源分配,實時監控管理容器及部署在容器中的應用服務[12]。應用層主要是將衛星遙感應用軟件抽象成一個個服務并容器化地部署到容器中,每個容器擁有獨立的物理資源,容器彼此之間共享物理主機的操作系統,構成了針對特定應用服務的輕量內核級“虛擬機”[13]。
對于業務支撐功能,分布式存儲系統為容器云平臺提供統一的外置存儲服務,主要用于海量衛星遙感數據的存儲、訪問、備份,既簡化了應用層的數據存儲復雜度,也保證了數據的一致性、可靠性。ElasticSearch為衛星遙感應用服務提供數據檢索服務,其索引能力強大,且支持多種查詢類型,在地理信息數據索引查詢方面優勢明顯。ES集群結合衛星遙感數據特點進行了單獨優化設計,能夠大幅提高檢索效率。由于上層應用服務需要頻繁地檢索使用衛星遙感數據,因此將檢索功能獨立部署于容器云平臺之外,通過接口提供服務。容器云平臺使用多種接口協議進行訪問: ES Rest API、ES SQL、Impala SQL、Hive SQL、HBase MapReduce,也充分體現了平臺架構的開放性。
Kubernetes 主要由控制節點(Master node)和工作節點(Worker node)兩類節點組成,其系統架構如圖 3所示。[14]控制節點包括 API服務器、控制管理器、調度器和 etcd 鍵值數據庫等組件,負責全局決策、調度控制、事件響應等平臺管理功能。[15-16]工作節點主要包括 kubelet和 kube-proxy兩個組件,用以維護工作節點上運行的每個Pod ,并為每個節點提供必要的運行環境。

圖3 kubernetes 架構
本文采用了 Kubernetes1.21 版本,使用了六臺物理主機(centos7.9操作系統)構建容器云平臺。所有物理主機均需要安裝docker,以指定yum 源方式安裝kubelet、kubectl 等組件,此處使用阿里云的源,具體硬件配置如表1所示。

表1 容器云平臺硬件配置
應用服務運行在容器之中,需要容器以極高的可靠性保障業務的連續性。Kubernetes 是容器云平臺的核心,控制節點是Kubernets管理功能的關鍵所在,其中最關鍵是的etcd鍵值數據庫,負責保存各節點的關鍵數據,用于配置共享和服務發現。針對系統中的關鍵節點和關鍵功能,采用“多控制節點+ etcd 集群”的方式,來提高整個系統的高可用性和安全性。[17-18]Kubernetes 高可用集群架構如圖4所示。

圖4 kubernetes 高可用集群架構
Kubernetes 的工作節點通過內部的負載均衡機制連接到控制節點上,多控制節點模式下只有所有控制節點同時故障才會影響平臺運行。多控制節點的實現是在控制管理器、調度器修改leader-elect參數。在多控制節點模式下,系統會自動選舉出主控制節點(master leader),如果主控制節點宕機導致系統異常,則會自動選舉出新的主控制節點[19-20]。
etcd集群借鑒了Hadoop中ZooKeeper的設計理念,其核心原理是使用Raft協議保障節點的一致性[21]。etcd集群中只有1個有效的主節點,主節點負責處理所有來自系統的寫操作并對狀態機進行維護,通過Raft協議保證主節點對狀態機的改動會可靠同步到集群中的其他節點。
容器中的數據是非永久保存的,當容器宕機崩潰時,kubelet會以鏡像的初始狀態重新啟動容器,容器中的數據將丟失。為保障容器數據的存儲安全,Kubernetes提供了兩套機制:一是為容器分配臨時存儲卷,二是通過容器存儲接口Container Storage Interface(CSI)提供外部存儲服務[22-23]。衛星遙感數據總量大需要長期保存,本文采用第二種方法,利用分布式存儲的核心組件之一HDFS NFS Gateway,將HDFS存儲空間通過CSI機制以NFS的形式掛載至Kubernetes,為容器云平提供外部獨立的分布式存儲服務。外部存儲接口主要依靠PV和PVC實現,其中PV是底層網絡共享存儲的抽象,將共享存儲定義為一種供容器消費使用的資源對象,而PVC是對存儲資源的申請,容器可以通過PVC的形式申請特定的存儲空間和訪問模式。
衛星遙感數據單幅數據量大且有其獨特的數據格式,因此在接入容器云平臺時需要進行適當改造。以GF7號衛星為例,原始數據以tar.gz壓縮包形式保存約為2G,其中衛星拍攝的影像數據(jpg格式)占單幅數據總量的90%以上,僅在數據處理時才進行讀寫操作,而相關的衛星數據參數以xml格式保存,在數據存儲、查詢、篩選、讀寫、處理時需要頻繁訪問。從讀取效率、備份安全、存儲擴展等方面考慮,衛星遙感數據不適合直接存儲在容器云平臺內。因此在采用外接分布式存儲的解決方案下,衛星遙感影像數據經處理后存入獨立部署的HDFS分布式存儲系統,通過定義PV、PVC實現存儲系統與容器云平臺的對接。
為了提高查詢效率,xml衛星數據參數存入HFDS分布式存儲系統中的HBase數據庫中,jpg衛星影像則直接存入HDFS分布式存儲系統,存儲路徑保存在對應的HBase數據庫中。HBase數據庫目錄直接加載至Kubernets的臨時存儲卷中供相關容器訪問,需要讀寫衛星影像數據時,首先從HBase中查詢到保存路徑,再調用HFDS分布式存儲的接口進行操作。定義PV、PVC并關聯至Kubernetes的主要配置命令如下:
[root@master~] mount -f nfs -0 ver=3, proto=tcp,nolock,noacl, sync 10.82.8.92:/
[root@master~] oc describe pv mypv1
[root@master~] oc get pv mypv1 -o json
[root@master~] cat newpv.json
[root@master~] oc creat -f newpv.json
[root@master~] oc creat -f newpvc1.json
[root@master~] oc get pv
本章重點對容器云平臺的性能效率進行了簡要測試比較,并進一步結合當前衛星遙感行業現狀以及虛擬化平臺的應用特性,分析了容器云平臺的應用前景以及面臨的實際困難。
容器相較與虛擬機最大的優勢在于輕量化內核、快速化部署。以常用容器官方鏡像版本為測試對象,單一容器測試列表如表2所列。

表2 單一容器測試
其中啟動時間是指容器由 Penning 狀態轉變為 Running 狀態所需的時間,測試時容器云平臺上沒有運行其他非測試容器。根據測試結果可知,測試容器均能正常啟動,耗時均在3秒內啟動速度非???。多容器并行測試選擇把表2中的鏡像均啟動100個容器,測試結果如表3所列。

表3 多容器測試
通過對比表2和表3的測試結果可以得知,隨著容器規模的擴大,容器的啟動速度并沒有顯著下降,平均啟動時間都在3秒內,啟動速度遠超過虛擬機達到了快速部署的預期,為高并行應用的開發部署創造了有利條件。
本項測試這要通過為衛星遙感業務流程來驗證容器云平臺的功能性,同時對比相同條件下虛擬機的性能效率。測試環境里HDFS分布式存儲系統中已導入260景GF7衛星影像數據作為測試對象,分別在容器環境和虛擬環境下部署了基于Web的衛星影像共享查詢系統,查詢系統運行后調用ElasticSearch查詢位于HDFS分布式存儲系統中的GF7衛星影像數據,具體測試內容為以下兩項:
1)遍歷查詢整個GF7測試數據庫中的所有衛星影像數據。
(1) 試驗礦樣中的主要金屬礦物為黃銅礦、孔雀石、自然銅、藍銅礦、褐鐵礦等;主要脈石礦物為石英,其次有碳酸鹽礦物和綠泥石、絹云母等。含銀礦物包括銀黝銅礦、輝銀礦、深紅銀礦及少量自然銀,銀大部分產于銅礦物中,而脈石礦物中含銀較少。
2)查詢GF7數據庫中左上角經度在(40,49),且傳感器類型為mux的衛星影像數據(即rt_lat為(40,49),且傳感器類型為sensorid='MUX')。

表4 業務測試
通過表4的測試結果可以看出,衛星影像共享查詢系統部署在容器,并能夠正常調用且訪問外接分布式存儲系統內的衛星遙感影像數據,充分證明容器云平臺功能正常,已經可以初步實現對衛星遙感數據的加工處理。對比衛星影像共享查詢系統在容器與虛擬機中部署后,容器中的衛星影像共享查詢系統在衛星遙感影像數據查詢和讀寫速度略優于虛擬化平臺。
1)微服務:
微服務架構是將單體應用拆分成多個不同功能的微服務模塊,從而降低系統的耦合性、復雜度,更加便于開發人員部署維護。每個微服務部署到單獨容器中,服務之間可獨立開發部署,支持不同的開發語言,易于后期維護和功能拓展。目前最常見的微服務案例是Web服務,基于B/S架構的衛星遙感應用服務可以優先考慮改造遷移至容器云平臺。
2)深度學習:
深度學習在衛星遙感方向上有著廣闊的應用前景,比如基于影像的地質災害自動識別、山體滑坡自動監測等。容器可以輕松解決機器訓練過程中環境配置、資源分配等一系列問題,是當前進行深度學習算法研究所用的主流架構。目前容器已支持TensorFlow、Caffe、Caffe2、PyTorch等主流深度學習的訓練框架,能夠為衛星遙感數據的深度學習研究提供平臺與技術支持。
3)彈性伸縮:
對于一次性執行運算任務,傳統模式單一任務占據整個服務器,造成了極大資源浪費,容器快速創建、靈活銷毀的特點更適用于這種按需使用的場景。需要運算時創建容器執行任務,運算完成后容器退出釋放其占有的硬件資源。
對于大規模并行計算任務,容器云平臺能夠根據資源的負載情況進行動態調節,避免了流量激增擴容不及時資源耗宕機,也避免了平時大量閑置資源浪費,提高了硬件資源利用率。
4)高效運維:
通過鏡像管理運維人員可以輕松地對平臺內的容器及部署在容器內的業務進行部署管理。需要升級容器內的業務時,運維人員只需選擇相應鏡像版本和副本數量,即可實現自動升級且業務平滑不中斷,升級后若有問題還可選擇回滾至舊版本。
1)速率瓶頸:
虛擬化與容器提升了物理主機的硬件資源利用率,代價則是更多的數據交互與網絡開銷。當業務高峰期并行數量大時,物理主機用來支撐容器的服務資源就會緊張,造成隊列堵塞,前端用戶的感受就是應用卡頓。由于衛星遙感單幅影像數據量大,總數據量可達到PB級,不可避免需要采取獨立部署的分布式或集中存儲系統,單獨管理數據存儲。無論是虛擬化平臺還是容器云平臺,都是通過內部網絡進行訪問讀寫操作,網絡帶寬與數據吞吐速率始終是制約衛星遙感數據處理能力上限的瓶頸。
2)應用容器化:
容器的優勢在于輕量化的內核、便捷的封裝部署,但并不是所有的應用服務都適合或者能夠被容器化,比如說IO交互密集的數據庫、某些license綁定固定硬件的軟件。此外,將應用服務遷移至容器部署需要對代碼進行容器化改造,也需要人力和時間成本付出,比如地質行業最常用的專業軟件ArgGIS、GXL等,短期內都無法實現容器化部署,這也制約了容器技術在整個行業中的推廣應用。
3)隔離安全:
容器由于共享操作系統內核及驅動,容器內某應用服務的非法運行或者故障報錯,可能會導致物理主機的操作系統異常,進而影響到其他容器及容器內的應用服務。此外,也更容易被外部攻擊通過安全漏洞攻擊操作系統,進而影響上層應用服務。因而,在當前的應用場景下,容器還不太適合公有云的運行環境,如有外部接入還需配套設計嚴格的安全防護機制。
基于Kubernetes的容器云平臺是容器技術在衛星遙感行業的應用探索,已能夠初步實現對衛星遙感數據的處理加工,提高了物理主機的硬件資源利用率,降低了后期運維管理成本,并在微服務、深度學習等方向上展現出現了巨大潛力。隨著容器技術的進一步發展普及,其所面臨的問題和對應的解決方案也會越來越多?;贙ubernetes的容器云平臺為進一步建設功能更為豐富、實用性更強的容器云平臺打下了良好的基礎,對推進衛星遙感行業后續傳統業務上云改造具有較大借鑒意義。