版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于Kubernetes容器云平臺設(shè)計摘要由于虛擬化技術(shù)的快速發(fā)展使傳統(tǒng)云平臺服務(wù)的迅速崛起。云平臺服務(wù)商將自己開發(fā)的主機資源賣給個人用戶或企業(yè)供使用。用戶可以根據(jù)自己的需要創(chuàng)建一定數(shù)量的云主機來部署自己的應(yīng)用程序。這種方式在一定程度上解決了用戶在原有情況本需要購買硬件設(shè)備來部署和構(gòu)建繁雜的應(yīng)用環(huán)境的問題,提高云平臺應(yīng)用的效率。然而,雖然用戶可以通過云服務(wù)商去購買自己的云資源,但是當下分部署應(yīng)用架構(gòu)的背景下,雜亂的應(yīng)用環(huán)境部署問題并沒有得到解決,這也導(dǎo)致用戶的開發(fā)應(yīng)用周期變長,研發(fā)效能較低。改進現(xiàn)有的云平臺的不足成為一個值得研究的問題。而基于容器技術(shù)的容器云平臺的出現(xiàn)使上述問題得到了解決。本文將使用Containerd作為容器運行時,Kubernetes作為容器服務(wù)編排核心,學習如何使用Containerd,重點研究容器層的集群部署和管理、調(diào)度實例、用戶權(quán)限、應(yīng)用程序部署等方面。最后,通過實踐操作驗證基于Kubernetes的容器云平臺的資源調(diào)度、實例自動伸縮和負載均衡能力。實驗結(jié)果表明,容器云平臺能夠有效提高應(yīng)用程序的資源利用率和服務(wù)質(zhì)量,實現(xiàn)容器調(diào)度的自動化、分布式應(yīng)用部署和服務(wù)之間的關(guān)聯(lián)調(diào)度。關(guān)鍵詞:Containerd;Kubernetes;容器云目錄TOC\o"1-3"\h\u116761前言 1262872相關(guān)技術(shù)概述 2320122.1Containerd 2237802.2容器云平臺 2239402.3Kubernetes 382863容器云平臺需求分析與概要設(shè)計 4230603.1項目整體規(guī)劃 4299103.2容器云平臺需求分析 484013.2.1整體需求分析 4277183.2.2系統(tǒng)功能性需求分析 538773.3云平臺系統(tǒng)總體架構(gòu)設(shè)計 5318723.3.1節(jié)點管理設(shè)計 6167623.3.2客戶后臺設(shè)計 7242173.3.3應(yīng)用管理設(shè)計 8188164容器云平臺的詳細設(shè)計與實現(xiàn) 11283384.1節(jié)點管理實現(xiàn) 1118824.1.1Containerd安裝 11140404.1.2Kubernetes集群初始化 11177794.1.3集群和節(jié)點管理實現(xiàn) 12261304.2平臺管理實現(xiàn) 12296514.3應(yīng)用管理實現(xiàn) 14155904.3.1應(yīng)用部署實現(xiàn) 1418234.3.2應(yīng)用升級/回滾實現(xiàn) 167135結(jié)論 1929792參考文獻 211前言容器并不是一種新概念了,而是新時代云原生的基礎(chǔ)設(shè)施,具備了輕量級、高可移植性、低成本等新特性,而容器云服務(wù)則是在傳統(tǒng)容器基礎(chǔ)上的一個新產(chǎn)品形態(tài),重點表現(xiàn)為對容器服務(wù)內(nèi)容的重新編排,可以從功能層面上按照資源需要迅速地部署和調(diào)整,生命周期變化速度大大加快[1]。通過實踐部署Containerd和Kubernetes部署應(yīng)用容器,了解Containerd作為容器運行時的優(yōu)劣點。以及通過實踐測試容器云的編排調(diào)度,總結(jié)基于Kubernetes的容器云的實現(xiàn)方式和使用。在這個全新的容器云平臺中,應(yīng)用程序可以按照需求快速獲取IT的運算資源、儲存資源或者網(wǎng)絡(luò)資源,并且按照服務(wù)需要動態(tài)的升級擴容,以保持在高并發(fā)性能的同時經(jīng)濟的實現(xiàn)服務(wù)的持續(xù)性,并且還可以通過無縫升級實現(xiàn)服務(wù)擴展需求REF_Ref1783471871\r\h[2]。企業(yè)的IT體系在上云之后將變成一個整體,一個生態(tài)系統(tǒng),它防止了各個IT子系統(tǒng)重復(fù)建立,同時也大大提高了資源的利用效益。容器技術(shù)在海外發(fā)展的時間相對比較早,在應(yīng)用層面上已經(jīng)算是相當完善了,并且有Google,Amazon,IBM等國際知名企業(yè)也開始在容器平臺上有了相對完善的產(chǎn)品形態(tài),在國內(nèi),應(yīng)用了容器技術(shù)的企業(yè)也越來越多了,而以Kubernetes為核心建設(shè)的容器技術(shù)云平臺,也被普遍地運用在了公共云以及私人云的構(gòu)建中?,F(xiàn)在公共云技術(shù)應(yīng)用領(lǐng)域中較為出名的是華為企業(yè)集團的CCE,阿里的ACK,網(wǎng)易的蜂巢,以及騰訊公司集團的TKE,其中公有容器云均以超規(guī)模的方式組織部署工作,以超高的用戶使用量向中小企業(yè)推出容器應(yīng)用管理服務(wù)。在私有云應(yīng)用領(lǐng)域,較為出名的有七牛云、美團以及京東的內(nèi)部容器云等,其中私有容器云平臺一直是為企業(yè)內(nèi)容應(yīng)用的“上云”保駕護航。國內(nèi)外對容器技術(shù)較大多的應(yīng)用居多,就代碼的貢獻量以及社會影響力而言,仍然是由歐美等技術(shù)巨頭所占據(jù)。由于容器技術(shù)是近期才流行起來的新興技術(shù),問世日期也相對而言比較短暫,在大量部署與使用過程當中難免會出現(xiàn)很多棘手的技術(shù)問題,但經(jīng)過了持續(xù)的試錯與迭代,國內(nèi)外的容器技術(shù)云計算平臺已經(jīng)逐漸趨向于穩(wěn)定性REF_Ref1783841625\r\h[3]。
2相關(guān)技術(shù)概述2.1Containerd時至今日Containerd已成為一種工業(yè)級別的容器,使用時了得、超簡便、超健壯、可移植性超強已是新的口頭禪。Containerd現(xiàn)已在設(shè)計上實現(xiàn)了CRI(ContainerRunntimeInterface)標準,在CNCF長期持續(xù)的完善下,當Containerd正式作為一種技術(shù)標準的容器運行時。其實,雖然Containerd是從Docker中剝離出的組成部分,但Containerd現(xiàn)在基本上什么事都干的,開發(fā)者和終端使用者都能夠從宿主機中管理整體的容器技術(shù)生命周期,包含了容器技術(shù)鏡像的傳送和保存、容器技術(shù)的執(zhí)行和管理工作、內(nèi)存和網(wǎng)絡(luò)等。而總體來說,Containerd被分成了三大塊:Storage、Metadata和Runtime。如圖2.1所示:圖2.1Containerd技術(shù)架構(gòu)圖2.2容器云平臺容器云平臺是一種將傳統(tǒng)PaaS平臺進行容器化,通過容器調(diào)度和多節(jié)點通信技術(shù)構(gòu)建輕量級PaaS的云計算平臺。容器云平臺的實現(xiàn)解決了大多數(shù)云計算服務(wù)商的問題。容器云的主要優(yōu)勢體現(xiàn)在應(yīng)用程序的研發(fā)效能、部署效率、應(yīng)用管理和調(diào)度方面,應(yīng)用開發(fā)者只需專注于業(yè)務(wù)邏輯的開發(fā),無需在應(yīng)用程序的部署和運維上花費太多的精力,可以縮短應(yīng)用實踐的整體周期,同時提高了服務(wù)器資源利用率,降低企業(yè)在產(chǎn)品研發(fā)和維護上的成本。容器云平臺通過調(diào)用云服務(wù)商提供的主機節(jié)點資源,向外部網(wǎng)絡(luò)中的產(chǎn)品用戶提供計算、存儲和軟件應(yīng)用服務(wù)。企業(yè)客戶只需要根據(jù)所需的資源定期支付租用費用,就可以持續(xù)地適用這些云資源REF_Ref1784648361\r\h[4]。2.3KubernetesKubernetes是谷歌在2014年開源的容器集群管理引擎,它可用于容器化應(yīng)用程序的部署和資源編排等。Kubernetes可以為容器化的應(yīng)用的部署提供一個高效的調(diào)度平臺,Kubernetes主要有以下特性:自我修復(fù):在節(jié)點故障時重新啟動失敗的容器,替換和重新部署,保證預(yù)期的副本數(shù)量;殺死健康檢查失敗的容器,并且在未準備好之前不會處理客戶端請求,確保線上服務(wù)不中斷。彈性伸縮:使用命令、UI或者基于CPU使用情況自動快速擴容和縮容應(yīng)用程序?qū)嵗?,保證應(yīng)用業(yè)務(wù)高峰并發(fā)時的高可用性;業(yè)務(wù)低峰時回收資源,以最小成本運行服務(wù)。自動部署和回滾:Kubernetes采用滾動更新策略更新應(yīng)用,一次更新一個Pod,而不是同時刪除所有Pod,如果更新過程中出現(xiàn)問題,將回滾更改,確保升級不受影響業(yè)務(wù)。服務(wù)發(fā)現(xiàn)和負載均衡:Kubernetes為多個容器提供一個統(tǒng)一訪問入口,并且負載均衡關(guān)聯(lián)的所有容器,使得用戶無需考慮容器IP問題。機密和配置管理:管理機密數(shù)據(jù)和應(yīng)用程序配置,而不需要把敏感數(shù)據(jù)暴露在鏡像里,提高敏感數(shù)據(jù)安全性。并可以將一些常用的配置存儲在K8S中,方便應(yīng)用程序使用。存儲編排:掛載外部存儲系統(tǒng),無論是來自本地存儲,公有云,還是網(wǎng)絡(luò)存儲(如NFS、GlusterFS、Ceph)都作為集群資源的一部分使用,極大提高存儲使用靈活性。批處理:提供一次性任務(wù),定時任務(wù);滿足批量數(shù)據(jù)處理和分析的場景REF_Ref1785707202\r\h[5]。
3容器云平臺需求分析與概要設(shè)計3.1項目整體規(guī)劃本系統(tǒng)研究的目標,在于把已有的容器節(jié)點提交給新用戶使用。開發(fā)者也能夠選擇在多節(jié)點上快速部署運行應(yīng)用,忽略與底層系統(tǒng)的差別,從而提升了研發(fā)的效率。測試人員無需自行構(gòu)造復(fù)雜的測試環(huán)境,直接操作容器應(yīng)用完成相關(guān)的試驗管理工作。運維技術(shù)能夠直接利用Kubernetes所提出的對Containerd采用的運行狀況監(jiān)控功能、故障運行狀態(tài)重啟、彈性伸縮、負載均衡等等多種控制功能,對于運行的實際狀況做到了即時的掌握,大大地減少了運維技術(shù)的實際工作復(fù)雜性,也大大降低了運維管理工作費用成本REF_Ref1786194605\r\h[6]。3.2容器云平臺需求分析3.2.1整體需求分析容器云平臺采用B/S架構(gòu)(即瀏覽器和服務(wù)器架構(gòu)),為用戶提供統(tǒng)一標準的RestfulAPI接口訪問容器云平臺,并通過頁面操作對容器中的應(yīng)用進行管理和調(diào)度。實現(xiàn)應(yīng)用按需部署、簡化應(yīng)用管理、集群彈性擴縮容、基于存儲卷持久化等一系列功能。用戶通過管理系統(tǒng)的管理頁面方便且詳細地使用和維護服務(wù)。整體系統(tǒng)業(yè)務(wù)架構(gòu)如圖3.1所示:圖3.1系統(tǒng)業(yè)務(wù)架構(gòu)圖為保證容器云平臺節(jié)點可能損壞的情況下,能夠確保云應(yīng)用服務(wù)質(zhì)量,平臺將自行搭建Registery倉庫,并且實現(xiàn)業(yè)務(wù)節(jié)點應(yīng)用備份和移植功能,這樣可以在主機節(jié)點因為機器或網(wǎng)絡(luò)故障時,將應(yīng)用鏡像快速部署到新的資源節(jié)點以替換損壞的資源節(jié)點,有效提高容器云應(yīng)用業(yè)務(wù)穩(wěn)定和可用性對于容器云平臺的企業(yè)客戶來說,業(yè)務(wù)可能會有大量的用戶,需要一個容器云平臺的后臺管理入口來實現(xiàn)集群管理功能,可以根據(jù)需要對集群進行擴容和收縮,防止用戶突然增減時導(dǎo)致的某個服務(wù)節(jié)點并發(fā)壓力過大,確保容器中應(yīng)用的健壯性和可用性對于研發(fā)人員和維護人員來說,有效地保證研發(fā)人員能夠根據(jù)需求快速迭代功能的需求是迫切的。輕量級容器Containerd可以將應(yīng)用程序構(gòu)建成統(tǒng)一標準的鏡像。當業(yè)務(wù)功能需求發(fā)生變化時,功能研發(fā)完成后方便應(yīng)用快速構(gòu)建鏡像,功能的配置、升級和部署,同時在不同環(huán)境下也可以確保運行環(huán)境的一致性。大大提高開發(fā)人員的研發(fā)效率和運維人員的維護效率,降低測試成本的同時也保證應(yīng)用功能快速部署。3.2.2系統(tǒng)功能性需求分析通過以上對容器云平臺業(yè)務(wù)進行梳理和整合,可以明確出當前容器云平臺主要需要實現(xiàn)的以下功能節(jié)點管理:節(jié)點管理模塊主要有集群信息管理和集群資源節(jié)點管理兩部分。通過客戶操作界面展示集群的信息,管理集群資源節(jié)點,通過集群監(jiān)控了解節(jié)點主機的運行狀態(tài)和cpu、內(nèi)存等的使用情況。節(jié)點管理還可以根據(jù)客戶應(yīng)用的需求實現(xiàn)添加/刪除主機節(jié)點。客戶后臺:客戶管理后臺主要指系統(tǒng)的基礎(chǔ)功能,如賬號和子賬號的創(chuàng)建,修改,刪除,以及賬號權(quán)限管理。通常由系統(tǒng)管理員根據(jù)項目需要管理賬號和權(quán)限信息。應(yīng)用管理:應(yīng)用管理模塊主要包括應(yīng)用發(fā)布、應(yīng)用滾動升級和發(fā)布回滾等功能。該功能模塊是在用戶根據(jù)需求研發(fā)產(chǎn)品應(yīng)用,應(yīng)用研發(fā)完成后,會將應(yīng)用構(gòu)建成統(tǒng)一標準的鏡像并上傳到Harbor倉庫里,當應(yīng)用需要發(fā)布或升級時,只需要指定Harbor倉庫地址已經(jīng)鏡像名稱版本,就可以實現(xiàn)實時發(fā)布和平滑升級。當發(fā)布后發(fā)現(xiàn)產(chǎn)品有問題,也可以通過發(fā)布回滾功能,將已發(fā)布的應(yīng)用回滾發(fā)布到原來的版本。3.3云平臺系統(tǒng)總體架構(gòu)設(shè)計根據(jù)架構(gòu)設(shè)計可以看出,容器云平臺主要對主機節(jié)點、用戶、應(yīng)用構(gòu)建部署、鏡像文件等進行管理。基于以上進行功能設(shè)計,容器云平臺的技術(shù)架構(gòu)如圖3.2所示。圖3.2容器云平臺技術(shù)架構(gòu)圖系統(tǒng)架構(gòu)主要由用戶顯示層、業(yè)務(wù)接口層、核心功能層和基礎(chǔ)資源層組成?;A(chǔ)資源層的主要是主機節(jié)點。除此之外,還可以對其他云資源(如對象存儲,云數(shù)據(jù)庫,負載均衡等)組成。在核心功能層主要承載整個系統(tǒng)的業(yè)務(wù)邏輯代碼,主要功能點包括,主機節(jié)點信息管理,Kubernetes集群信息管理,管理用戶認證、登錄、創(chuàng)建、修改、刪除用戶、管理應(yīng)用的創(chuàng)建、部署、升級和刪除等操作。業(yè)務(wù)接口層主要為用戶顯示層中提供開放核心功能層的RestfulAPI接口??蛻糁恍枋褂肳eb瀏覽器登錄容器云平臺,用戶顯示層為用戶提供平臺各功能模塊的可視化數(shù)據(jù)[7]。容器云平臺的整體架構(gòu)是基于kubernetes作為容器編排框架的基礎(chǔ)上管理應(yīng)用平臺,并參考Kubernetes系統(tǒng)的API資源管理接口作為整體平臺的基礎(chǔ)資源接口。整個云平臺的核心功能都是基于不同的API接口封裝實現(xiàn)的。3.3.1節(jié)點管理設(shè)計節(jié)點管理模塊是容器云平臺的主機節(jié)點管理模塊。集群中應(yīng)用的正常運行需要節(jié)點資源的支持。通過節(jié)點管理,可以在集群中加入或退出節(jié)點,以保證集群在多種流量場景下正常使用。當并發(fā)流量過大導(dǎo)致節(jié)點資源不足時,將閑置節(jié)點加入集群中,即節(jié)點擴容。當并發(fā)流量小且節(jié)點資源過多浪費時,可以通過先將節(jié)點打上污點標簽。并將應(yīng)用驅(qū)逐到其他節(jié)點后,將節(jié)點從集群中刪除作為它用。集群環(huán)境由Kubernetes在進行搭建,其次可以通過Promethues對每個節(jié)點資源的監(jiān)控數(shù)據(jù)統(tǒng)計集群節(jié)點的CPU等信息的使用情況,使主機節(jié)點的利用率達到最大化。根據(jù)資源的使用情況,加入和刪除集群節(jié)點,集群通常由一個主節(jié)點和多個工作節(jié)點組成,主節(jié)點是集群的核心節(jié)點。在通過Kubernetes的Client對集群進行操作進行添加worker節(jié)點操作時,需要關(guān)注其操作的安全性。在Master節(jié)點初始化完成之后,會自動生成join-token。在添加集群節(jié)點時,容器云平臺首先向Master節(jié)點發(fā)出請求,獲取join-token,然后將獲取到j(luò)oin-token帶入給準備加入集群的worker節(jié)點。worker節(jié)點上Kubelet組件的自動注冊功能將使用令牌驗證碼請求主節(jié)點加入集群。Master節(jié)點將worker節(jié)點加入集群的結(jié)果發(fā)送給容器云平臺。如果查詢成功,則將新添加的worker節(jié)點信息寫入數(shù)據(jù)庫。刪除集群節(jié)點的過程相對復(fù)雜,需要先將需要退出的Woker節(jié)點打上污點標簽,并對該Worker節(jié)點中運行的應(yīng)用執(zhí)行驅(qū)逐命令。等待運行的應(yīng)用全部驅(qū)逐到其他Worker節(jié)點之后再將該Worker節(jié)點進行刪除。最后,Master節(jié)點將刪除結(jié)果發(fā)送給容器云平臺更新節(jié)點信息。3.3.2客戶后臺設(shè)計客戶登錄:客戶登錄為保證容器云平臺資源的安全性,考慮到開發(fā)周期,項目采用Redis緩存和Token技術(shù)封裝了一個登錄驗證框架來進行用戶的登錄校驗。具體的登錄認證流程如圖3.3所示。圖3.3用戶身份登錄認證流程圖當客戶使用容器云平臺時,需要在后臺登錄界面輸入賬號和密碼。賬號和密碼的格式需要符合一定規(guī)則,否則提示格式錯誤信息。正確輸入賬號和密碼后,容器云平臺向后端服務(wù)發(fā)起請求,后端Filter攔截器攔截到登陸請求后。會對登陸請求中的登錄賬號和密碼及二維碼進行校驗。當檢測到賬號登錄信息不存在或密碼錯誤時,系統(tǒng)返回登陸異常信息。如果校驗通過,則會根據(jù)用戶信息生成token并緩存到Redis緩存里面。然后返回前段登錄成功信息,前段再根據(jù)后端信息跳轉(zhuǎn)到客戶后臺首頁,后臺會生成的token信息會被作為令牌信息存儲在cookie中,之后該賬號的每個請求都會被要求帶上token信息REF_Ref1787118990\r\h[8]。賬號創(chuàng)建:容器云平臺是一個多租戶系統(tǒng),通常一個客戶或企業(yè)在注冊成功后會生成一個主賬號。主賬號相當于系統(tǒng)管理員,主賬號在登錄到管理后臺可以創(chuàng)建子賬戶,并且對子賬戶的權(quán)限進行劃分。這樣做的主要是考慮到企業(yè)用戶可能會用不同職位權(quán)限的劃分。后臺界面輸入用戶基本信息,包括用戶名、密碼、用戶權(quán)限等。管理員,讀寫權(quán)限、上述信息必須符合指定的填寫規(guī)則。賬號刪除:容器云平臺賬號刪除功能是只能主賬號才有權(quán)限進行操作。系統(tǒng)管理員進入賬號管理界面,點擊選中需要刪除的用戶,再點擊刪除按鈕。前端則會將Delete請求發(fā)送到容器云后臺服務(wù)。首先程序會根據(jù)參數(shù)ID從數(shù)據(jù)庫中查詢是否存在該子賬戶。如果查詢成功,程序?qū)h除賬號關(guān)聯(lián)的權(quán)限和賬號信息,該操作保證事務(wù)性。不會出現(xiàn)只刪除其中一部分信息的情況。刪除成功后,前端界面將相應(yīng)地更新。如果賬號刪除失敗,后臺會向前臺返回“用戶刪除失敗”的信息。用戶修改:容器云平臺賬號修改功能,賬號的基本信息或賬號密碼可以有子賬號本身完成修改,但是賬號權(quán)限的修改和刪除是只能由主賬號才能進行操作。系統(tǒng)管理員在前端界面,選擇需要修改的賬號,前端會將賬號的基本信息從后端數(shù)據(jù)庫拉取下來。然后管理員在前端界面進行賬號信息的修改。修改完成后,點擊“提交”按鈕,前端會將修改后的參數(shù)通過PUT請求發(fā)送給后端。后段接收到的Put請求后根據(jù)傳輸?shù)膮?shù)修改數(shù)據(jù)庫中的賬號信息。如果表單參數(shù)修改成功,前臺界面將自動刷新。修改失敗,后臺將返回“賬號修改失敗”的信息給前臺。3.3.3應(yīng)用管理設(shè)計容器云平臺的應(yīng)用管理模塊主要包括了應(yīng)用部署、應(yīng)用升級/回滾、應(yīng)用刪除等功能,下面將詳細說明設(shè)計過程。應(yīng)用部署:應(yīng)用的部署主要是根據(jù)集群的使用情況(如CPU、內(nèi)存、本地磁盤等)判斷是否符合部署要求。如果符合部署要求,程序?qū)⒆詣永$R像后通過既定的shell腳本執(zhí)行應(yīng)用部署。具體流程圖3.4如下。圖3.4應(yīng)用部署流程圖運維人員使用賬號登錄容器云平臺后臺,填寫集群、Namespace、鏡像地址等參數(shù),單擊應(yīng)用部署按鈕。然后前端將向后臺服務(wù)發(fā)送一個POST請求。后臺程序會檢查參數(shù)集群、Namespace是否存在,檢查節(jié)點資源是否充足。如果資源不足,則會優(yōu)先執(zhí)行節(jié)點管理的節(jié)點擴容操作。如果資源足夠,則開始為應(yīng)用程序分配資源,將應(yīng)用程序的鏡像信息和部署信息,包裝成Deployment對象信息,然后調(diào)用Kubernetes客戶端執(zhí)行部署操作。Kubernetes將根據(jù)指定的Deployment對象部署將鏡像拉取到節(jié)點本地部署運行。應(yīng)用升級/回滾:容器云平臺為應(yīng)用的升級和回滾設(shè)計了不同的API接口。當應(yīng)用程序有了新功能,需要用新版本的應(yīng)用部署上線來替換舊版本時,在不需要對應(yīng)用資源要求進行修改的情況下,客戶就可以使用應(yīng)用滾動升級的功能。滾動升級的原理就是更新應(yīng)用的鏡像版本。Kubernetes可以保證執(zhí)行滾動更新時導(dǎo)致應(yīng)用的宕機,因為滾動策略邏輯是,優(yōu)先選擇一個節(jié)點的實例進行更新,更新完成后進行下一個節(jié)點地更新,如此就能保證更新時應(yīng)用的可用性。具體的升級流程如圖3.5所示。圖3.5應(yīng)用升級流程圖應(yīng)用回滾是需要特定權(quán)限的。運維人員可以通過容器云后臺查詢過往的應(yīng)用發(fā)布記錄。然后選定需要回滾的版本。點擊回滾按鈕后,容器云平臺前端會將回滾參數(shù)通過POST請求發(fā)送到后端。后端服務(wù)查詢該條記錄的鏡像和版本信息。然后根據(jù)鏡像和版本信息以及資源配置信息重新構(gòu)建Deployment對象。然后重新執(zhí)行應(yīng)有部署,完成應(yīng)用回滾。應(yīng)用刪除:當不再需要某個應(yīng)用時,運維人員可以在容器云平臺上發(fā)起刪除應(yīng)用的請求。系統(tǒng)檢查應(yīng)用是否滿足刪除條件后,會刪除該應(yīng)用,同時會釋放所有應(yīng)用的應(yīng)用配置資源。刪除成功后,界面顯示“刪除完成”信息。
4容器云平臺的詳細設(shè)計與實現(xiàn)4.1節(jié)點管理實現(xiàn)4.1.1Containerd安裝Containerd是一種工業(yè)規(guī)范的容器進行時,著重在于其簡單,健壯,管理工作方便,在Linux或者window系統(tǒng)上可當作一種守護進程實施,并能夠負責管理在主機操作系統(tǒng)上存儲容器的完整性的生命周期、鏡像傳遞與保存、容器的實施與監(jiān)視、低等級的存儲設(shè)備與網(wǎng)絡(luò)系統(tǒng)。腳本代碼如下:#添加阿里yum源.dnfinstall-ydnf-utilsyum-config-manager--add-repo/docker-ce/linux/centos/docker-ce.repo#禁用edge和test庫yum-config-manager--disabledocker-ce-edgedocker-ce-test#安裝containerd1.3+yum-yinstall/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.3.9-3.1.el7.x86_64.rpm#生成containerd默認配置文件containerdconfigdefault>/etc/containerd/config.toml4.1.2Kubernetes集群初始化Kubernetes的主要有兩種部署方法,一種是二進制部署,也就是通過從每個節(jié)點中把Kubernetes的所有組成部分都下載到本地后進行配置,然后再建立Kubernetes集群,但是因為安全性方面的考慮,各組成部分間通信時都必須配置CA和證書。此一部署方法相當?shù)膹?fù)雜,所以在本次使用了Kubeadm來進行安裝。Kubeadm是由Kubernetes官方所提出的專門部署集群的管理工具。原理是把第一個節(jié)點初始化成Master節(jié)點,利用Kubeadm工具把APIServer、etcd、controller-manager、scheduler等組件作為Pod由Kubelet靜態(tài)運行,完成Master節(jié)點的初始化。完成了Master節(jié)點的部署完成,其他的Worker節(jié)點,僅需要在安裝kubelet、Containerd組件后,記住初始化集群上面的配置和操作要提前做好,將master節(jié)點上面的$HOME/kube/config文件拷貝到node節(jié)點對應(yīng)的文件中,安裝kubeadm、kubelet、kubectl,安裝完成后執(zhí)行提示的join命令(包含了jion-token)即可加入4.1.3集群和節(jié)點管理實現(xiàn)集群的管理原理是通過Kubernetes相關(guān)的開源客戶端go-client,再結(jié)合初始化生成的kube.conf文件,通過讀取文件流初始化客戶端配置和連接集群ApiServer密鑰信息,最后根據(jù)需求和功能點調(diào)用Apiserver的相關(guān)接口,獲取集群資源信息,最后再次對信息進行封裝響應(yīng)到展示給到用戶層進行展示,具體功能參考圖4.1示例:圖4.1集群管理參考圖4.2平臺管理實現(xiàn)登錄驗證:賬號在登錄的時候需要對賬號密碼執(zhí)行驗證操作,驗證完成后會生成token信息。之后的每次Api調(diào)用都會將token代入header里。賬號驗證的邏輯方法題大致如下:func(t*Admin)LoginCheck(c*gin.Context,tx*gorm.DB,param*dto.AdminLoginInput)(*Admin,error)adminInfo,err:=t.Find(c,tx,(&Admin{UserName:param.UserName,IsDelete:0}))iferr!=nil{returnnil,errors.New(用戶信息不存在")}saltPassword:=public.GenSaltPassword(adminInfo.Salt,param.Password)ifadminInfo.Password!=saltPasswordreturnnil,errors.New("密碼錯誤,請重新輸入")}returnadminInfo,nil//省略代碼}先根據(jù)賬號密碼查詢是否存在該賬號信息,然后將密碼進行加鹽加密后和數(shù)據(jù)庫中的密碼做比較,如果結(jié)果一致,則認為密碼正確。如果返回的錯誤值err為空即賬號密碼以及權(quán)限等信息驗證通過。不為空的話則說明賬號密碼錯誤不能使用。并提示操作者錯誤信息創(chuàng)建賬戶:創(chuàng)建賬戶時序圖如圖4.2所示圖4.2創(chuàng)建賬戶時序圖客戶端通過調(diào)用創(chuàng)建賬號接口,由Router在接收請求后交付給AccountService進行創(chuàng)建賬號邏輯。AccountService首先已經(jīng)用戶管理模塊完成了權(quán)限信息認證,此操作需要管理者的許可,認證合格后進入Create函數(shù),Create函數(shù)體下所示:func(accountService*AccountService)Create(usystem.Account)(errerror,accountsystem.Account){Varaccsystem.Account if!errors.Is(global.GVA_DB.Where("account_name=?",account.accountName).First(&acc).Error,gorm.ErrRecordNotFound){ returnerrors.New("賬號已存在"), } //否則附加uuid密碼md5簡單加密注冊 u.Password=utils.MD5V([]byte(account.Password)) u.UUID=uuid.NewV4() err=global.GVA_DB.Create(&account).Error returnerr,u}Create函數(shù)獲取Router調(diào)用時輸入的參數(shù)數(shù)據(jù)中的group數(shù)據(jù)對象,接著直接賬號名稱是否存在,如果存在則提示操作員賬號已創(chuàng)建,把新建子賬戶對象加載在數(shù)據(jù)庫account表中。創(chuàng)建新權(quán)限:創(chuàng)建權(quán)限時序圖如圖4.3所示圖4.3創(chuàng)建權(quán)限時序圖客戶端通過調(diào)用創(chuàng)建授權(quán)連接,由Router在接收請求后交給PermissionService類執(zhí)行具體的創(chuàng)建權(quán)限邏輯。PermissionService類Create函數(shù)體如圖所示:func(c*PermissionService)Create()error{varpermissionmodel.Permissionerr=global.GVA_DB.Create(&permission).Erroriferr!=nil{logs.Error("createerror.%v",err.Error())c.HandleError(err)returnerr}}4.3應(yīng)用管理實現(xiàn)4.3.1應(yīng)用部署實現(xiàn)圖4.4發(fā)布部署模板時序圖應(yīng)用的發(fā)布是基于部署模板實現(xiàn)的,用戶在適用部署功能之前先配置好部署模板,詳細描述應(yīng)用的鏡像,副本等信息。當部署模板制作完畢之后,使用者即可選擇模塊并公布在特定的集群之中執(zhí)行。發(fā)表與部署模塊的時序示意圖如圖4.4中所示,當使用者點擊并發(fā)表文章之后,服務(wù)器端將調(diào)出模塊發(fā)表界面并向界面?zhèn)魉蚢ppId、deploymentId等發(fā)布參數(shù)通過POST請求發(fā)送到后段服務(wù)。Router在接到請求后交付KubeDeploymentService類執(zhí)行具體邏輯。DeploymentService類Create函數(shù)關(guān)鍵代碼如下所示:func(c*DeploymentService)Create(appIdstring,deploymentIdstring){varkubeDeploymentv1beta1.Deploymentnamespace,err:=Namespace.GetByAppId(appId)deployment,err:=Deployment.GetById(deploymentId)err=c.validAvailable(deployment,namespace)common.DeployDeployment(deployment,namespace)_,err=deployment.SaveDeployment(c.Account.account,deployment,namespace)c.Success("ok")}Create函數(shù)首先使用Namespace類的GetByAppId函數(shù),使用傳遞的參數(shù)appid獲得該項目Namespace。Namespace中就包含了Kubernetes的集群消息。調(diào)用Deployment類的GetById函數(shù),利用DeploymentId獲得部署消息。至此將接口中傳遞的所有參數(shù)收集了準備發(fā)布的Kubernetes集群所需要的信息,然后執(zhí)行DeploymentService類中的私有函數(shù)validAvailable函數(shù)檢測多余資源是不是足以執(zhí)行當前的部署任務(wù)。檢驗通過后執(zhí)行common.DeployDeployment函數(shù),把以上消息都加載在deployment對象中,然后執(zhí)行common.SaveDeployment函數(shù)把用戶個人信息加入Deployment中。DeploymentService類的validAvailable方式如體下所示:func(c*DeploymentService)validAvailable(ns*Namespace,deploymentDeployment)error{ selector:=Labels.SelectorFromSet(map[string]string{ util.NamespaceLabelKey:ns.Name, }) NamespaceUsageInfo,err:=Namespace.GetUsageByNamespace(ns.Name, selector.String()) requestLimitInfo,err:=Deployment.GetRequestLImitInfo(deployment) iferr!=nil{//returnerr} ifrequestLimitInfo.Memory!=0&&requestLimitInfo.Memory- (NRU.Memory+resourceList.Memory)/(1024*1024*1024)<0{ Returnerrors.new(“內(nèi)存不足,無法發(fā)布”) } ifrequestLimitInfo.CPU!=0&&requestLimitInfo.CPU-(NRU.CPU+resourceList.CPU)/1000<0{ Returnerrors.new(“CPU資源不足,無法發(fā)布”) } }}當命名空間包括了此集群信息時,執(zhí)行Namespace.ResourcesUsageByNamespace函數(shù)獲得了所使用的資源量。利用Deployment.GetRequestLImitInfo函數(shù)方法來得到當前集群中的內(nèi)存資源使用梁,利用集群的內(nèi)存資源上線limit減去已用內(nèi)存資源加上申報內(nèi)存資源的和,小于等于0則說明資源不夠。同理利用集群的CPU上限減去已用CPU資源和申報CPU資源的總和,小于等于0則說明資源不夠,在上述檢查結(jié)果都合格的情形下,利用Deployment.SaveDeployment函數(shù)從Kubernetes集群中發(fā)送當前部署。當應(yīng)用部署返回成功的情況下。則數(shù)據(jù)庫服務(wù)器中的deployment表中輸入發(fā)出的消息,然后調(diào)出DeploymentModel.Update函數(shù)更改部署中的publish_status字段為發(fā)布成功狀態(tài)。至此應(yīng)用部署流程完成。4.3.2應(yīng)用升級/回滾實現(xiàn)滾動更新是Kubernetes的服務(wù)本身的一種特性,滑動更新是指針對多實例服務(wù)的一個永不間斷服務(wù)的更新升級方法,以實現(xiàn)平滑的版本升級,具體原理是按照一個完整的開發(fā)流程,合理地劃分幾個批次,每先開發(fā)一個批次,完成之后,在再開發(fā)下一個批次,最后實現(xiàn)了每個批次的發(fā)布。在一個滾動流程期內(nèi),確保一直有可用的副本可以執(zhí)行,并平穩(wěn)的推出最新版本,進而做到零停機(withoutanoutage)、對使用者零體驗,是一個十分主流的發(fā)布方法REF_Ref1791169477\r\h[10]。因為其智能化程度相當高,所以通常需要更復(fù)雜的信息發(fā)布工具支持,而Kubernetes就能夠充分的勝任這種任務(wù)。具體時序圖如下圖4.5所示。圖4.5應(yīng)用升級時序圖應(yīng)用回滾雖然Kubernetes自身也支持應(yīng)用回滾,但是但卻是針對滾動升級所作的版本滾貴,比較適用于沒有變更環(huán)境參數(shù)的場景,本系統(tǒng)則會在過往的發(fā)布記錄中保留配置信息,確保應(yīng)用版本回滾時的運行環(huán)境一致性,再根據(jù)過往配置信息重新部署應(yīng)用。具體時序圖流程如下圖4.6所示。圖4.6應(yīng)用回滾時序圖5結(jié)論為了容器云平臺系統(tǒng)的靈活擴展性,產(chǎn)品的技術(shù)架構(gòu)上是采用了前后端分離的形式,然后基礎(chǔ)設(shè)施從Containerd容器為核心的云平臺環(huán)境,到Kubernetes集群部署框架,使基礎(chǔ)設(shè)施在一定的時間約束和有限的硬件條件下,大大簡化了研發(fā)任務(wù)復(fù)雜度,有效提高了項目研發(fā)的效率和功能模塊的交付效率,縮短了整體研發(fā)周期,在滿足企業(yè)容器云平臺的基本需求的情況
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學四年級(健康與醫(yī)療保障)醫(yī)保管理綜合測試題及答案
- 2025年中職物流服務(wù)與管理(物流基礎(chǔ))試題及答案
- 2025年中職核安全工程技術(shù)(核安全)技能測試題
- 2025年大學藝術(shù)創(chuàng)作(創(chuàng)意設(shè)計思維)試題及答案
- 2025年注冊會計師(CPA)考試 會計科目全面覆蓋試卷及答案解析
- 癌癥科普知識宣傳
- 祁東教育介紹
- 2025年漯河市行政審批和政務(wù)信息管理局所屬事業(yè)單位人才引進3人備考題庫及參考答案詳解1套
- 寧夏回族自治區(qū)石嘴山市2025-2026學年高一上學期1月期末地理試題(含答案)
- 2025-2026學年廣西壯族自治區(qū)柳州市高三上學期二模英語試題
- 2025年山東省棗莊市檢察院書記員考試題(附答案)
- GB/T 3634.1-2025氫氣第1部分:工業(yè)氫
- JJG 499-2021 精密露點儀檢定規(guī)程
- 寒假安全教育課件模板
- 短視頻內(nèi)容版權(quán)協(xié)議2025年執(zhí)行版
- 社區(qū)康養(yǎng)服務(wù)活動方案
- 黑龍江省生態(tài)環(huán)境廳直屬事業(yè)單位招聘考試真題2025
- 2025年數(shù)字印刷可行性報告
- 畜禽屠宰加工工國家職業(yè)標準(征求意見稿)
- 電力通信安全培訓(xùn)資料課件
- 上海國安面試題庫及答案
評論
0/150
提交評論