摘要:傳統(tǒng)軟件開發(fā)和運維過程中存在效率低下、擴展性差、維護復雜等問題?;谌萜骷夹g與微服務架構的DevOps平臺通過集成容器化、微服務、持續(xù)集成/持續(xù)部署(CI/CD) 等關鍵技術,能夠提升軟件開發(fā)和運維的敏捷性、可靠性和可伸縮性,可以很好地解決上述問題。文中首先概述了容器化技術、微服務和DevOps的基本概念,隨后詳細闡述了平臺的設計思路、架構組成以及關鍵技術實現(xiàn),最后分析了平臺的優(yōu)勢和對未來的展望。
關鍵詞:容器化;微服務;DevOps;云原生;CI/CD
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2024)27-0052-04
0 引言
隨著云計算技術的飛速發(fā)展,軟件開發(fā)和運維領域正經歷著深刻的變革。其中,容器化技術作為一種新興技術,旨在充分挖掘和利用云計算的潛力,為應用程序的構建和運維提供新的思路。通過容器化技術,可以加速應用程序的迭代周期,促進高效無縫的部署流程,并賦予系統(tǒng)卓越的靈活擴展能力。與此同時,隨著微服務架構這種新型軟件設計范式的興起,可以對龐大復雜的軟件應用進行解構,拆分出一系列高內聚的微型服務,顯著增強了系統(tǒng)的可用性、可擴展性以及后續(xù)維護的便捷性,從而推動了軟件架構的現(xiàn)代化轉型。DevOps作為一種文化與技術的結合,旨在打破開發(fā)與運維之間的壁壘,實現(xiàn)軟件交付的高速迭代和高質量保障。而基于容器與微服務的DevOps 平臺正是順應這一趨勢的產物。
1 背景與相關技術介紹
1.1 容器化技術概述
隨著計算機技術的發(fā)展,計算機軟件的架構也在不斷演進,從最初的單體架構,到近年興起的分布式架構,再到現(xiàn)在最前沿的云原生架構。云原生代表了一種創(chuàng)新的應用構建與運行的新范式,它深度整合并利用了云計算平臺的核心資源與能力,諸如容器化技術、容器編排技術、自動化運維等,旨在充分發(fā)揮云計算的潛能與效益。云原生技術棧中核心的就是容器化技術,其中最具代表性和應用最為廣泛的是Docker 和Kubernetes。
1.1.1 Docker
容器技術作為一種輕量級的操作系統(tǒng)層面的虛擬化技術,能夠為軟件應用提供一個資源獨立的運行環(huán)境[1]。目前應用最為廣泛的一種容器技術當屬Docker。Docker這個體系涵蓋了Docker容器引擎與Docker Hub注冊服務器兩大核心組件。Docker容器引擎賦予開發(fā)者將軟件應用封裝成獨立鏡像的能力,提供了簡單高效的部署方式。而Docker Hub注冊服務器則作為一個全面的鏡像管理平臺,允許用戶輕松創(chuàng)建專屬的鏡像倉庫,用于安全地存儲、高效地管理及靈活地分發(fā)Docker鏡像。通過合理利用Docker的這些功能,軟件應用能夠輕松實現(xiàn)跨平臺運行。
1.1.2 Kubernetes
Kubernetes是一種容器編排與管理系統(tǒng),專注于跨節(jié)點的集群資源優(yōu)化、服務自動發(fā)現(xiàn)、彈性擴展等功能。它構建了一個強健的調度框架,能夠智能地在集群內分配并管理容器化應用的部署,實現(xiàn)了從創(chuàng)建到運維的全自動化流程。Kubernetes的核心能力涵蓋容器的智能調度、集群范圍內資源的精細管理以及容器狀態(tài)的實時監(jiān)控與數(shù)據(jù)收集,確保系統(tǒng)的高效運行與穩(wěn)定性。Kubernetes集群由控制節(jié)點(Master) 、計算節(jié)點(Node) 、Etcd集群組成。Master節(jié)點負責集群運行和資源管理,Node節(jié)點為容器應用提供各類資源,Etcd存儲記錄集群狀態(tài)信息[2]。
1.2 微服務架構
微服務架構是一種新型的軟件設計范式,基于此范式可以對復雜龐大的軟件應用進行解構,拆分出一系列自治且獨立的微型服務。每個服務均負責一項業(yè)務能力,實現(xiàn)了高內聚低耦合的設計原則。微服務架構能夠提高系統(tǒng)的可擴展性、可維護性和容錯能力。微服務應用設計需要合理進行服務拆分,遵循單一職責原則,避免過度拆分導致“服務爆炸”問題[3]。
1.3 DevOps 理念
DevOps 是Development 和Operations 的組合詞,DevOps的要點在于打破以往傳統(tǒng)流程中開發(fā)與運維之間的割裂狀態(tài),促進二者之間的協(xié)作,以此實現(xiàn)全流程的自動化,旨在通過集成先進的工具來加速軟件產品的迭代周期。其中,持續(xù)集成(CI) 與持續(xù)部署(CD) 占據(jù)了舉足輕重的地位。持續(xù)集成是指當將新提交的代碼上傳到代碼倉庫中時,會自動或者手動地觸發(fā)一系列編譯、打包、構建、測試流程,確保新舊代碼的無縫集成,并快速反饋測試結果,這一過程往往頻繁進行,以縮短問題發(fā)現(xiàn)與解決的時間。持續(xù)部署是指通過自動化部署工具將軟件功能頻繁地持續(xù)進行交付[4]。此外,DevOps還涵蓋了自動化測試、監(jiān)控與日志等關鍵環(huán)節(jié),共同構建了一個高效、可靠且響應迅速的軟件交付體系。
2 平臺設計
2.1 設計目標
平臺的設計目標主要聚焦于構建一個高效、靈活、可擴展且易于管理的DevOps平臺,該平臺深度融合容器化技術與微服務架構,旨在提升軟件開發(fā)、測試、部署及運維的自動化水平,加速產品迭代速度,同時保障軟件質量與穩(wěn)定性。具體而言,設計目標包括但不限于以下幾個方面:
1) 通過容器化技術的運用,實現(xiàn)資源的彈性伸縮與高效利用,提升資源利用率,降低運維成本,提高系統(tǒng)的可靠性與可用性。
2) 采用微服務架構,對復雜龐大的軟件應用進行解構,拆分出一系列自治且獨立的微型服務。每個服務均只負責一項業(yè)務能力,實現(xiàn)高內聚低耦合的設計原則,從而提高系統(tǒng)的可維護性與可擴展性。
3) 構建自動化的CI/CD流程,實現(xiàn)代碼提交到生產環(huán)境的無縫集成與快速部署,減少人為錯誤,提高交付效率。
2.2 功能設計
2.2.1 整體流程
平臺在功能層面主要基于軟件開發(fā)部署流程來設計,分為兩大模塊,分別是開發(fā)過程和部署過程,其中:
1) 開發(fā)過程主要對應持續(xù)集成(CI) 流程。開發(fā)人員針對軟件應用的具體需求進行開發(fā),開發(fā)完成后將對應代碼提交到代碼倉庫。代碼倉庫負責保存所有軟件應用的代碼,同時軟件應用按實際需求和場景可以分為多個版本,每個版本有對應的代碼分支。當某個版本的代碼被開發(fā)人員提交到代碼倉庫后,會觸發(fā)CI流水線的執(zhí)行。CI流水線從代碼倉庫拉取對應的代碼,檢查無誤后編譯打包、構建鏡像。CI流水線執(zhí)行完成后會生成軟件應用的新版本代碼包和Docker鏡像。
2) 部署過程主要對應持續(xù)部署(CD) 流程。在CI 流水線執(zhí)行完成后,負責部署的人員(可以是開發(fā)人員,也可以是測試人員或者運維人員)觸發(fā)CD流水線執(zhí)行,將CI流水線生成的Docker鏡像部署到指定的環(huán)境(該環(huán)境按實際需求可以分為開發(fā)環(huán)境、測試環(huán)境、正式環(huán)境等)的Kubernetes集群中。以上整體流程如圖1所示。
2.2.2 功能模塊設計
平臺的功能模塊設計主要從業(yè)務領域的角度進行劃分,主要包含以下幾個核心功能模塊:
1) DevOps模塊:主要包含持續(xù)集成(CI) 和持續(xù)部署(CD) 相關功能,另外還有應用管理、代碼管理、制品管理、流水線管理等功能。
2) 容器云模塊:主要包含容器管理、部署策略、擴縮容、監(jiān)控指標、日志管理等功能。
3) 鏡像管理模塊:鏡像相關的模塊,主要包含鏡像的管理以及自定義鏡像維護等功能。
4) 后臺管理模塊:主要為平臺管理員提供服務,包含一系列平臺管理相關的功能,如:用戶管理、集群管理、資源管理、權限管理等。
2.3 架構設計
2.3.1 邏輯架構
平臺采用云原生技術棧,主要包括Kubernetes和Docker(其中Kubernetes 作為容器編排與管理系統(tǒng),Docker作為容器運行時)以及一系列微服務應用和自動化工具和平臺(如Jenkins、GitLab、Prometheus等),以此來支持CI/CD流程、監(jiān)控與日志管理等。平臺的整體邏輯架構設計如圖2所示。
對每一層的具體設計及描述如下:
1) 基礎設施層:提供云資源(如虛擬機、容器實例等)和基礎服務(如網絡、存儲、安全等)。
2) 資源調度層:包括容器編排與管理(Kuber?netes) 等核心服務,主要作用在于通過合適的調度策略和機制,分配并調度滿足應用程序需要的計算資源、網絡資源、存儲資源等。同時通過彈性伸縮能力為應用提供橫向擴展的能力,保障應用的高可用性。
3) 微服務層:主要由一系列基于微服務架構的應用程序組成,包含DevOps平臺、容器云平臺、鏡像平臺、日志管理、權限管理等微服務應用。
其中:
DevOps 平臺主要提供持續(xù)集成(CI) 、持續(xù)部署(CD) 相關功能,同時還提供應用管理、代碼管理、制品管理等功能。
鏡像平臺主要提供對鏡像的管理與構建等功能。
日志平臺主要提供對日志的收集和日志查詢相關功能。
權限管理模塊主要對用戶的權限和角色進行管理。
容器云平臺主要提供資源的分配與容器的調度和管理能力,收斂Kubernetes相關操作與權限,向下屏蔽Kubernetes細節(jié),向上封裝Kubernetes相關原子能力,承載調度策略與發(fā)布策略具體實現(xiàn)。
4) 應用層:提供Web界面或API接口,供開發(fā)人員和運維人員訪問和使用平臺功能,同時也可以在平臺提供的基礎能力之上,構建其他業(yè)務場景下的應用,如業(yè)務看板、數(shù)據(jù)可視化報表等。
2.3.2 組件關系拓撲
平臺基于Spring Cloud微服務框架構建,利用其豐富的組件能力實現(xiàn)微服務應用實例之間的靈活調用。
平臺主要包含以下微服務應用(組件):
1) DevOps平臺。主要提供持續(xù)集成(CI) 和持續(xù)部署(CD) 功能,另外還有應用管理、代碼管理、制品管理、流水線管理等功能。
2) 容器云平臺。主要提供對資源的分配和對容器調度、編排與管理的能力,收斂Kubernetes相關操作與權限,向下屏蔽Kubernetes 細節(jié),向上封裝Kubernetes 相關原子能力,承載調度策略與發(fā)布策略具體實現(xiàn)。
3) 鏡像平臺。主要提供對鏡像的構建、維護,用戶按需自定義鏡像等功能。
另外還有以下幾個第三方組件:
4) 代碼倉庫。主要用于對軟件應用的代碼進行存儲和托管。
5) Jenkins。用來實現(xiàn)持續(xù)集成(CI) 流程中的自動化代碼編譯、打包、構建鏡像,并將構建成功后的鏡像推送到鏡像倉庫。
6) Docker 服務。主要用于提供Docker運行環(huán)境和執(zhí)行Docker相關命令的CLI。
7) 鏡像倉庫。主要用于對Docker鏡像進行存儲和托管。
8) Kubernetes集群。Kubernetes專注于跨節(jié)點的集群資源優(yōu)化、服務自動發(fā)現(xiàn)、彈性擴展等高級功能。它構建了一個強健的調度框架,能夠智能地在集群內分配并管理容器化應用的部署,實現(xiàn)了從創(chuàng)建到運維的全自動化流程。Kubernetes集群可以根據(jù)實際場景搭建多個。
以上這些組件之間互相協(xié)作,共同為平臺的各個模塊和功能服務。這些組件之間的拓撲關系如圖3 所示。
2.4 關鍵技術實現(xiàn)
該平臺通過集成一系列關鍵技術和工具,實現(xiàn)了軟件開發(fā)、測試、部署、運維的全流程自動化,主要包括以下幾個方面。
2.4.1 容器化技術
利用Docker這一先進的容器化技術,將軟件應用封裝進容器中。此舉不僅保障了應用程序在不同運行環(huán)境間的一致性與可靠性,還憑借容器迅速啟動與便捷遷移的能力,極大地加速了應用的部署流程,并有效提升了資源利用效率。
2.4.2 微服務架構
將復雜龐大的軟件進行應用解構,拆分出一系列自治且獨立運行的微型服務。每個服務均只負責一項業(yè)務能力,服務之間高內聚低耦合,使得開發(fā)團隊能夠更快速地響應需求變化。
2.4.3 持續(xù)集成/持續(xù)部署(CI/CD)
通過Jenkins等工具,構建完整的全流程自動化CI/CD流水線,涵蓋了從提交代碼到部署到各個環(huán)境的全部周期,極大地縮短了軟件交付周期,提高了軟件質量和穩(wěn)定性。
2.4.4 自動化運維
Kubernetes作為硬件資源抽象和調度層,很好地解決了硬件資源的按需擴展和高可用等問題[5]。利用Kubernetes的自動化運維功能,實現(xiàn)應用的自動擴縮容、故障恢復和滾動更新,極大地提升了系統(tǒng)的高可用性和穩(wěn)定性。
通過上述關鍵技術的實現(xiàn),文中設計的DevOps 平臺不僅提升了軟件開發(fā)的效率和靈活性,還增強了系統(tǒng)的穩(wěn)定性、可靠性和安全性,為企業(yè)在數(shù)字化轉型過程中提供了強有力的支持。
3 結論與展望
本文深入探討了基于容器化技術與微服務架構的DevOps平臺。通過詳細分析容器化技術、微服務架構、持續(xù)集成/持續(xù)部署流程以及自動化運維等關鍵技術,構建了一個高效、可靠且可擴展的軟件交付平臺。該平臺不僅可以顯著提升軟件開發(fā)和運維的效率,還可以通過自動化和標準化的流程降低人為錯誤的風險,確保軟件質量的穩(wěn)定提升。
同時,隨著技術的不斷發(fā)展和業(yè)務需求的持續(xù)變化,平臺的優(yōu)化與升級將是確保其長期競爭力的關鍵。
展望未來,通過繼續(xù)關注容器化、微服務及Dev?Ops領域的最新進展,積極探索人工智能新技術在平臺中的應用,通過不斷的技術創(chuàng)新與實踐積累,推動AIOX+p4FRtc4+L6FaT4C66VfA==ps在平臺中的落地,基于容器和微服務的DevOps 平臺將能夠更好地服務于企業(yè)的數(shù)字化轉型戰(zhàn)略,推動軟件行業(yè)向更高水平邁進。
本文設計的基于容器與微服務的DevOps平臺為現(xiàn)代軟件開發(fā)提供了一種高效、靈活且可信賴的解決方案,有望為相關領域的研究人員和從業(yè)者提供有益的參考。
參考文獻:
[1] 黃俊,陳曦,吳濤.基于Docker的網絡仿真平臺設計與實現(xiàn)[J].現(xiàn)代信息科技,2023,7(4):1-5,9.
[2] 朱小亮.基于Kubernetes高校數(shù)據(jù)中心云平臺設計[J].電腦知識與技術,2023,19(22):81-84.
[3] 陳鵬,何憲英.基于云原生的應用平臺研究與設計[J].信息系統(tǒng)工程,2022(1):48-51.
[4] 陳博,周亦敏.基于Kubernetes的CI/CD平臺[J].計算機系統(tǒng)應用,2020,29(12):268-271.
[5] 許瑜超,李桂炎,周治,等.基于開源的Prometheus開發(fā)廣電網絡綜合運維網管平臺[J].廣播與電視技術,2022,49(8):134-139.
【通聯(lián)編輯:謝媛媛】
基金項目:湖南省自然科學基金項目:面向三維脈圖的預處理框架構建及深度學習特征工程方法研究(項目編號:2024JJ8025)