云起云涌:PaaS 體系架構(gòu)與運(yùn)維系統(tǒng)上云實(shí)踐

劉鵬宇
“上云”一詞早已流行,各小中大企業(yè)為擺脫地域限制、減輕研發(fā)成本、實(shí)現(xiàn)安全可靠管理保障,紛紛研究“如何上云”。作為一個(gè)奔跑在新型IT時(shí)代的逐夢(mèng)人,我踏上了尋找杰克魔豆的旅程,下面是我在探索道路上的所見所聞。

今年以來,遠(yuǎn)程辦公、遠(yuǎn)程會(huì)議走進(jìn)了大多數(shù)人的日常工作中,各類云產(chǎn)品相繼被人們所熟悉,例如石墨云”OFFice”辦公軟件、騰訊云平臺(tái)、云課堂,為實(shí)現(xiàn)多人協(xié)同辦公、遠(yuǎn)程操控等需求,提供多類渠道。這些應(yīng)用可能在實(shí)現(xiàn)技術(shù)上,不是嚴(yán)格意義的上云,但“云”逐漸浸透各個(gè)領(lǐng)域,暈染出不一樣的風(fēng)采。

“上云”一詞早已流行,各小中大企業(yè)為擺脫地域限制、減輕研發(fā)成本、實(shí)現(xiàn)安全可靠管理保障,紛紛研究“如何上云”。作為一個(gè)奔跑在新型IT時(shí)代的逐夢(mèng)人,我踏上了尋找杰克魔豆的旅程,下面是我在探索道路上的所見所聞。

開始

云計(jì)算從2006年提出至今,經(jīng)歷了翻天覆地的發(fā)展變化,由IaaS到PaaS、SaaS,應(yīng)用越來越廣泛。在其發(fā)展初期,IT建設(shè)多圍繞IaaS進(jìn)行,包括計(jì)算虛擬化、網(wǎng)絡(luò)虛擬化、存儲(chǔ)虛擬化等,使用對(duì)象主要是虛擬機(jī)。但由于虛擬機(jī)承載的是操作系統(tǒng),我們依然需要在操作系統(tǒng)中安裝基礎(chǔ)軟件,并未減輕開發(fā)人員部署環(huán)境的壓力。然而自Docker為代表的容器技術(shù)出現(xiàn)后,實(shí)現(xiàn)應(yīng)用可以在容器中直接運(yùn)行,切實(shí)減輕了程序員部署精力,促進(jìn)了容器PaaS的迅速發(fā)展,并已逐漸形成云生態(tài)體系——以Docker、Kubernetes為核心,由Docker提供應(yīng)用級(jí)的主機(jī)抽象,Kubernetes提供應(yīng)用級(jí)的集群抽象。在此基礎(chǔ)上涌現(xiàn)了紅帽O(jiān)penShift等優(yōu)秀企業(yè)級(jí)PaaS產(chǎn)品。

本文將著重對(duì)Docker、Kubernetes、Openshift的發(fā)展歷史及架構(gòu)進(jìn)行分析,并分享“部署自研運(yùn)維系統(tǒng)到云平臺(tái)”的實(shí)踐經(jīng)驗(yàn)。

標(biāo)準(zhǔn)化的軟件構(gòu)建與分發(fā)技術(shù)Docker

1.容器技術(shù)優(yōu)勢(shì)

前文說,容器技術(shù)的誕生,為減輕開發(fā)人員部署環(huán)境壓力,提供了可能。容器技術(shù)也打造了一套標(biāo)準(zhǔn)化的軟件構(gòu)建和分發(fā)流程,為降低運(yùn)維成本、提高軟件安全和運(yùn)行穩(wěn)定等方面提供便利。容器技術(shù)不僅僅打造一個(gè)運(yùn)輸用的“集裝箱”,還保證軟件在容器內(nèi)能夠運(yùn)行,在操作系統(tǒng)上構(gòu)成“獨(dú)立的箱子”。這需要解決文件系統(tǒng)、網(wǎng)絡(luò)、硬件等多方面的問題。經(jīng)過長(zhǎng)時(shí)間的發(fā)展,容器技術(shù)現(xiàn)已逐步成熟。使用容器技術(shù)后,開發(fā)者可以使用熟悉的編程語言開發(fā)軟件,之后用容器技術(shù)打包構(gòu)建,便可一鍵運(yùn)行在所有支持該容器技術(shù)的平臺(tái)上。

2.容器技術(shù)的典型代表——Docker架構(gòu)

Docker是一個(gè)構(gòu)建、發(fā)布、運(yùn)行分布式應(yīng)用的平臺(tái),Docker平臺(tái)整體可以看成由Docker引擎(運(yùn)行環(huán)境+打包工具)、Docker Registry(API+生態(tài)系統(tǒng))兩部分組成。包括Docker Client、Docker daemon、Docker Image、Docker Container等部分,如下圖所示。

其中Docker引擎可以分為守護(hù)進(jìn)程和客戶端兩大部分。Docker引擎的底層是各種操作系統(tǒng)以及云計(jì)算基礎(chǔ)設(shè)施,而上層則是各種應(yīng)用程序和管理工具,每層之間都是通過API來通信的。詳細(xì)介紹如下。

Docker Client是Docker提供命令行界面(CLI)工具,是用戶與Docker進(jìn)行交互的主要方式??蛻舳丝梢詷?gòu)建,運(yùn)行和停止應(yīng)用程序,還可以遠(yuǎn)程與Docker_Host進(jìn)行交互。

Docker daemon是服務(wù)器組件,以Linux后臺(tái)服務(wù)的方式運(yùn)行,是Docker最核心的后臺(tái)進(jìn)程。它負(fù)責(zé)響應(yīng)來自Docker Client的請(qǐng)求,然后將這些請(qǐng)求翻譯成系統(tǒng)調(diào)用完成容器管理操作。

Docker鏡像可以看作是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。

Docker容器就是Docker鏡像的運(yùn)行實(shí)例,是真正運(yùn)行項(xiàng)目程序、消耗系統(tǒng)資源、提供服務(wù)的地方。

Docker提供了應(yīng)用級(jí)的主機(jī)抽象,可以更容易地實(shí)現(xiàn)應(yīng)用的快速申請(qǐng)和部署。

容器時(shí)代的舵手Kubernetes

如果說Docker是容器時(shí)代的大船,Kubernetes就是指引船只的舵手。作為容器集群管理工具,Kubernetes有一套健壯的集群自恢復(fù)機(jī)制,包括容器的自動(dòng)重啟、自動(dòng)重調(diào)度以及自動(dòng)備份甚至負(fù)載等。

1.Kubernetes的發(fā)展歷程

Kubernetes前身是谷歌大規(guī)模集群管理系統(tǒng)Brog,它基于容器技術(shù),實(shí)現(xiàn)資源管理的自動(dòng)化,以及跨數(shù)據(jù)中心資源利用的最大化。Kubernetes于2015年正式對(duì)外發(fā)布,經(jīng)過4年多的發(fā)展,為容器編排提供強(qiáng)大的解決方案,成為云原生系統(tǒng)的重要支撐。

當(dāng)前,國(guó)內(nèi)外的很多企業(yè)都建立了基于Kubernetes的云平臺(tái),如OpenShift、阿里云等。下面分別簡(jiǎn)述阿里巴巴和美團(tuán)點(diǎn)評(píng)的云平臺(tái)發(fā)展實(shí)踐歷程。

圖片來源:阿里巴巴云原生公眾號(hào)

阿里巴巴于2013年開始探索由容器替換虛擬機(jī),2018年開始自研容器調(diào)度系統(tǒng)向Kubernetes轉(zhuǎn)型,2019年阿里業(yè)務(wù)全面上云,2019年雙十一中,基于Kubernetes的生態(tài)體系支撐了阿里史上規(guī)模最大的集群。

圖片來源:about云開發(fā)-aB7758133

美團(tuán)點(diǎn)評(píng)于2013年開始搭建云計(jì)算平臺(tái),2016年基于Docker搭建自研容器管理平臺(tái),2018年引入Kubernetes到云平臺(tái)中,提升了平臺(tái)的穩(wěn)定性和資源使用效率。

2.Kubernetes的架構(gòu)

在Kubernetes中,Service是分布式集群架構(gòu)的核心。它是一種抽象概念,每一個(gè)Service后端有多個(gè)Pod,所有的容器均在Pod中運(yùn)行。下圖是一個(gè)典型的Kubernetes架構(gòu)圖。

圖片來源:Kubernetes官網(wǎng)

Kubernetes由兩種節(jié)點(diǎn)組成:Master節(jié)點(diǎn),為管理節(jié)點(diǎn);Node節(jié)點(diǎn),為容器運(yùn)行結(jié)點(diǎn)。

Service是架構(gòu)的核心,提供遠(yuǎn)程服務(wù),它的后端有多個(gè)Pod,每個(gè)容器均在Pod中運(yùn)行。一個(gè)Service可以橫跨多個(gè)Node,也可能一個(gè)Node里包含多個(gè)Service,一個(gè)Pod里也可以包含多個(gè)Container(容器)。

Pod是Kubernetes的最小調(diào)度單位,所以在我行實(shí)際應(yīng)用中,一般一個(gè)Pod中只部署一個(gè)容器,以提高穩(wěn)定性,降低風(fēng)險(xiǎn)。一個(gè)Label是一對(duì)鍵/值對(duì),用來傳遞用戶定義的屬性。例如,可以用“Taihangboot”來標(biāo)記一個(gè)太行應(yīng)用。

Replication Controller,用來確保任意時(shí)間都有指定數(shù)量的Pod“副本”在運(yùn)行。如果為某個(gè)Pod創(chuàng)建了Replication Controller并且指定2個(gè)副本,它會(huì)創(chuàng)建2個(gè)Pod,并且持續(xù)監(jiān)控它們。

Kubernetes是強(qiáng)大的云原生體系工具,對(duì)容器進(jìn)行編排,實(shí)現(xiàn)了集群化的管理。

企業(yè)級(jí)PaaS平臺(tái)中的翹楚OpenShift

紅帽O(jiān)penShift平臺(tái)在Kubernetes的基礎(chǔ)上,提高了平臺(tái)運(yùn)行穩(wěn)定性,集成了Jeckins等工具,更易于實(shí)現(xiàn)Devops,可以為企業(yè)提供全面的應(yīng)用上云服務(wù)。

1.OpenShift的發(fā)展歷程

OpenShift是由紅帽公司推出的PaaS云計(jì)算平臺(tái),它誕生于2011年,核心架構(gòu)采用自研容器編排平臺(tái)Gear。Kubernetes推出后,紅帽決定對(duì)OpenShift進(jìn)行重構(gòu)。2015年6月,紅帽推出了基于Kubernetes1.0的OpenShift3.0。2018年6月,OpenShift4.1發(fā)布,它與OpenShift3.0相比,較大的變化是引入了CoreOS作為默認(rèn)操作系統(tǒng)。當(dāng)前最新版本的OpenShift平臺(tái)是2019年12月17日發(fā)布的4.2.11,新版系統(tǒng)進(jìn)一步實(shí)現(xiàn)了混合云環(huán)境企業(yè)級(jí)服務(wù)的簡(jiǎn)化和自動(dòng)化,同時(shí)可以讓開發(fā)者通過云原生應(yīng)用實(shí)現(xiàn)創(chuàng)新并提高業(yè)務(wù)價(jià)值。

OpenShift在Kubernetes的基礎(chǔ)上擴(kuò)展提供了軟件定義網(wǎng)絡(luò)、軟件定義存儲(chǔ)、權(quán)限管理、企業(yè)級(jí)鏡像倉(cāng)庫、統(tǒng)一入口路由、持續(xù)集成流程(S2/Jenkins統(tǒng)一管理控制臺(tái)、監(jiān)控日志等功能,形成覆蓋整個(gè)軟件生命周期的解決方案,提供了企業(yè)級(jí)的服務(wù)支持。當(dāng)前其提供三種產(chǎn)品:OpenShift Online、OpenShift Enterprise和OpenShift Origin。其中,OpenShift Online是面向普通開發(fā)者和小微企業(yè)的線上公有云平臺(tái);OpenShift Enterprise是面向企業(yè)的私有云平臺(tái);OpenShift Origin是一個(gè)開源項(xiàng)目,是構(gòu)成前兩個(gè)的基礎(chǔ)。

2.OpenShift的技術(shù)架構(gòu)

OpenShift平臺(tái)可以安裝于幾乎所有的基礎(chǔ)平臺(tái)上,例如裸機(jī)、虛擬機(jī)、私有云、公有云等。整個(gè)OpenShift平臺(tái)可以分為Container Storage、CoreOS、Kubernetets、Automated operations、Services等幾個(gè)層級(jí)。下面分別進(jìn)行介紹。

OpenShift平臺(tái)可以安裝于幾乎所有的基礎(chǔ)平臺(tái)上,例如裸機(jī)、虛擬機(jī)、私有云、公有云等。整個(gè)OpenShift平臺(tái)可以分為Container Storage、CoreOS、Kubernetets、Automated operations、Services等幾個(gè)層級(jí)。下面分別進(jìn)行介紹。

Container Storage是持久化的存儲(chǔ)結(jié)構(gòu),它為整個(gè)基于容器的環(huán)境提供存儲(chǔ)支持。CoreOS是Linux的一個(gè)發(fā)行版,提供容器執(zhí)行的基礎(chǔ)操作系統(tǒng)。Kubernetes即容器編排的調(diào)度平臺(tái)。Automated operations指的是對(duì)于集群上運(yùn)行的容器宿主機(jī)、Kubernetes集群和應(yīng)用等服務(wù),進(jìn)行自動(dòng)化的更新、管理等功能。Services包含平臺(tái)所提供的具體服務(wù),如集群服務(wù)(監(jiān)控、擴(kuò)縮容、鏡像倉(cāng)庫、日志系統(tǒng)),應(yīng)用服務(wù)(融合中間件、基礎(chǔ)軟件服務(wù)),Service Mesh(管理微服務(wù)應(yīng)用),開發(fā)服務(wù)(開發(fā)工具、自動(dòng)構(gòu)建、持續(xù)集成、持續(xù)交付)等。

可以看出,OpenShift在Kubernetes的基礎(chǔ)上,提供了底層支持,擴(kuò)展了應(yīng)用功能,以提供更全面、更便捷的服務(wù)。

智能運(yùn)維系統(tǒng)上云實(shí)踐

智能運(yùn)維系統(tǒng)是一個(gè)全面的運(yùn)維平臺(tái),可以實(shí)現(xiàn)監(jiān)控相關(guān)系統(tǒng)的主要運(yùn)行指標(biāo)、發(fā)現(xiàn)異常后匹配應(yīng)急方案、發(fā)起應(yīng)急操作及驗(yàn)證、系統(tǒng)配置、用戶管理等功能。

將該系統(tǒng)部署于OpenShift平臺(tái)簡(jiǎn)要來說可分為3個(gè)步驟:創(chuàng)建容器、將生成的容器打好標(biāo)簽推送至鏡像倉(cāng)庫、在OpenShift平臺(tái)拉取鏡像開始配置運(yùn)行。介紹如下。

1.創(chuàng)建容器

通過Dockerfile來組合基礎(chǔ)鏡像和軟件,Dockerfile中包含的內(nèi)容包括基本鏡像、要安裝的軟件包,要復(fù)制到容器中的軟件,網(wǎng)絡(luò)端口和掛載的存儲(chǔ)卷等信息。編寫好Dockerfile后,可通過運(yùn)行docker build命令來創(chuàng)建一個(gè)存儲(chǔ)在本地的容器鏡像。

2.將生成的容器打好標(biāo)簽推送至鏡像倉(cāng)庫

使用docker tag命令向新容器鏡像添加標(biāo)簽,以標(biāo)識(shí)其在鏡像倉(cāng)庫的位置。然后,通過運(yùn)行docker push命令將該鏡像推送到鏡像倉(cāng)庫。

3.在OpenShift平臺(tái)配置運(yùn)行容器

在OpenShift平臺(tái)配置Deployment、Service、Router等運(yùn)行策略,即可從鏡像倉(cāng)庫拉取相關(guān)鏡像,自動(dòng)分配Pod,相關(guān)應(yīng)用即可對(duì)外提供服務(wù)。

如上圖所示即為該系統(tǒng)運(yùn)行情況。

到此,有關(guān)云平臺(tái)技術(shù)的介紹已經(jīng)分享完畢。從基礎(chǔ)容器技術(shù)Docker,到集群容器編排Kubernetes,最后到企業(yè)級(jí)PaaS平臺(tái)OpenShift,云技術(shù)越來越成熟,并逐步形成生態(tài)體系。云原生應(yīng)用體系對(duì)于Devops、微服務(wù)等的實(shí)現(xiàn)也具有天然的優(yōu)勢(shì),在持續(xù)集成、持續(xù)部署上更加高效、安全,極大的提高了生產(chǎn)效率,將在企業(yè)數(shù)字化轉(zhuǎn)型中發(fā)揮巨大的作用。

最后

作為一個(gè)奮戰(zhàn)在一線的運(yùn)維人員,經(jīng)常遇到集群擴(kuò)容、環(huán)境遷移、頻繁的變更等等一系列繁雜的任務(wù)與問題,處理起來費(fèi)時(shí)且容易出錯(cuò)。在接觸到云原生應(yīng)用后,被其標(biāo)準(zhǔn)化、輕量、高效的運(yùn)行、部署模式所吸引,感受到應(yīng)用上云對(duì)運(yùn)維方式帶來的巨大改變,故障自愈、一鍵遷移、一鍵部署等都輕易實(shí)現(xiàn),隨后對(duì)各個(gè)技術(shù)的官網(wǎng)文檔、相關(guān)書籍、網(wǎng)絡(luò)博客進(jìn)行了研究,形成了本文,希望能對(duì)未來的系統(tǒng)建設(shè)添磚加瓦。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論