一、什么是云原生
云原生的概念,由來自Pivotal的MattStine根據(jù)其多年的框架經(jīng)驗(yàn)總結(jié)于2013年首次提出,被一直延續(xù)使用至今。這是他當(dāng)時(shí)提出的幾個(gè)主要特征:
它的出現(xiàn)其實(shí)也得益于虛擬技術(shù)的發(fā)展,在社區(qū)中不斷完善,并逐漸成為一種新興的基礎(chǔ)設(shè)施交付方案,在某種意義上重新定義了IT界軟硬件資源的標(biāo)準(zhǔn)。2015年谷歌主導(dǎo)CNCF成立之后,給出的1.0云原生定義主要是云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。目前CNCF給出了云原生應(yīng)用的三大特征:
上圖可以看出,其實(shí)云原生涉及的技術(shù)領(lǐng)域眾多,上面收集了和其技術(shù)相關(guān)的工具、平臺(tái)和項(xiàng)目。通過此圖可快速了解和應(yīng)用相關(guān)的技術(shù),根據(jù)業(yè)務(wù)能力可對(duì)架構(gòu)進(jìn)行重組與建設(shè)。
二、云原生的核心技術(shù)
1、容器
容器(container)這一概念最早出現(xiàn)在Linux中出現(xiàn)的,又稱LXC(Linux Container),主要是通過Cgroups的資源管理能力和Namespace的資源隔離能力結(jié)合在一起實(shí)現(xiàn)進(jìn)程級(jí)別的隔離。
2、K8s
全稱是Kubernetes,由Google 基于 Borg 開源容器編排的調(diào)度系統(tǒng),是一種基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案。在Docker技術(shù)的基礎(chǔ)上,為容器化的應(yīng)用提供部署運(yùn)行、資源調(diào)度、服務(wù)發(fā)現(xiàn)和動(dòng)態(tài)伸縮等功能,用戶不需要再過多關(guān)注資源的管理問題,降低操作的復(fù)雜度,提高了大規(guī)模容器集群管理的便捷性。
3、微服務(wù)(Microservices)
微服務(wù)則是一種用于構(gòu)建應(yīng)用的架構(gòu)方案,微服務(wù)架構(gòu)有別于為傳統(tǒng)的單體應(yīng)用的是將應(yīng)用拆分成多個(gè)核心功能,每個(gè)功能都被稱為一個(gè)獨(dú)立的服務(wù),可以單獨(dú)構(gòu)建和部署,其中某個(gè)服務(wù)出現(xiàn)故障也不會(huì)影響其他的功能模塊,這句體現(xiàn)了其針對(duì)特定服務(wù)發(fā)布,影響小,風(fēng)險(xiǎn)小等特點(diǎn)。
4、服務(wù)網(wǎng)格(Service Mesh)
服務(wù)網(wǎng)格指的是用于微服務(wù)應(yīng)用的可配置基礎(chǔ)架構(gòu)層。在使用服務(wù)網(wǎng)格時(shí)通常會(huì)提供一個(gè)sidecar代理實(shí)例,主要處理 service 間的通信、監(jiān)控、以及一些安全相關(guān)的考量,每個(gè)service里面都會(huì)有一個(gè)sidecar,同樣也提供了服務(wù)發(fā)現(xiàn)、負(fù)載均衡、授權(quán)等功能。
5、無服務(wù)(Serverless)
根據(jù) CNCF 的定義,Serverless 是指構(gòu)建和運(yùn)行不需要服務(wù)器管理的應(yīng)用程序的概念。即開發(fā)人員無需關(guān)注底層的基礎(chǔ)設(shè)施,只需要關(guān)注應(yīng)用程序的業(yè)務(wù)本身就行,且該服務(wù)可以自動(dòng)擴(kuò)展。
6、DevOps
早期的項(xiàng)目使用的是“瀑布模型”進(jìn)行軟件交付,即一個(gè)階段所有的工作完成之后再往下一個(gè)階段,但這樣的模式無法滿足業(yè)務(wù)快速開發(fā)交付及變更需求的情況,于是后面就出現(xiàn)了敏捷開發(fā)這一概念,即一種快速應(yīng)對(duì)需求變化軟件開發(fā)能力,而DevOps就是基于敏捷開發(fā)將軟件開發(fā)/測(cè)試人員/IT運(yùn)維關(guān)聯(lián)在一起,通過工具、組織等方式使開發(fā)、測(cè)試、發(fā)布流程自動(dòng)化,讓軟件可以頻繁、高效的發(fā)布。
7、云(Cloud)
常常聽到的公有云,私有云,混合云都是基于這個(gè)生態(tài)衍生出來的各種場(chǎng)景,不同的云搭建環(huán)境,所需資源亦有所不同,比如公有云是在互聯(lián)網(wǎng)上發(fā)布的云計(jì)算服務(wù),而私有云則是在公司內(nèi)網(wǎng)發(fā)布的云計(jì)算服務(wù),目前沒有一種云計(jì)算類型可以解決所有場(chǎng)景出現(xiàn)的問題,怎么選擇適合自己的場(chǎng)景則需要根據(jù)技術(shù)需求決定。
三、云原生之實(shí)踐
1、云原生中的DevOps
DevOps這一概念雖然比容器、微服務(wù)出現(xiàn)得早,卻是隨著他們的出現(xiàn)才得以快速的發(fā)展。實(shí)際上DevOps不單是一個(gè)實(shí)現(xiàn)自動(dòng)化的工具鏈,更是通過構(gòu)建企業(yè)文化的方式促進(jìn)開發(fā)與運(yùn)維之間的協(xié)作。下圖可以看出,這樣的運(yùn)作模式已經(jīng)顛覆了傳統(tǒng)的工作模式,每個(gè)環(huán)節(jié)都不再獨(dú)立分割開,而是用協(xié)作的方式生產(chǎn)更快、更高質(zhì)量的生產(chǎn)軟件。
2、持續(xù)集成
(CONTINUOUS INTEGRATION,CI)其核心是新提交的代碼與原代碼正確的集成。開發(fā)人員多次、頻繁的將代碼提交到代碼倉(cāng)庫(kù)中,在合并到指定分支之前,對(duì)新提交上來的內(nèi)容進(jìn)行編譯、自動(dòng)化檢測(cè)(如:代碼格式檢測(cè))的驗(yàn)證。這樣的過程既保證了代碼的完整性、安全性,也為后面的工作提供了質(zhì)量保證。
3、持續(xù)交付
(CONTINUOUS DELIVERY,CD)其重點(diǎn)不在代碼本身,而是在可以交付的產(chǎn)品上。在發(fā)布到生產(chǎn)環(huán)境之前,對(duì)新增的代碼進(jìn)行測(cè)試(test) -> 模擬(staging) -> 生產(chǎn)(production),即簡(jiǎn)化繁瑣的發(fā)布流程,又保障新添加的代碼在生產(chǎn)環(huán)境是可用的。
4、持續(xù)部署
(CONTINUOUS DEPLOYMENT) 通過自動(dòng)化部署的方式頻繁的交付產(chǎn)品,關(guān)注的重點(diǎn)在于自動(dòng)化部署。從開發(fā)人員提交代碼到編譯、測(cè)試、部署整個(gè)流程都是通過自動(dòng)化執(zhí)行,這種方式加快了交付的速度,同時(shí)在發(fā)現(xiàn)問題時(shí)也縮短修復(fù)的時(shí)間。
CICD關(guān)注整個(gè)開發(fā)到交付的過程,中間的測(cè)試、模擬、自動(dòng)部署等整條生產(chǎn)鏈上所需要的每一步都是需要關(guān)注的。而DevOps則更關(guān)注于各部門、不同崗位之間的協(xié)同過程,尤其是開發(fā)和運(yùn)維之間的溝通壁壘。總的來說,DevOps與CICD一體兩面,CICD 自動(dòng)化是DevOps 具體實(shí)現(xiàn)方式。
云原生之于國(guó)內(nèi),還是一個(gè)非常新的話題。云原生的覆蓋面廣、已知和潛在的用處大,由于全面及深入的理解需投入大量的人力及時(shí)間成本,因此不管是學(xué)習(xí)研究還是在實(shí)戰(zhàn)中需要分而治之。總體來說,云原生有以下幾個(gè)方面的優(yōu)勢(shì):
① 快速迭代:利用云原生應(yīng)用程序開發(fā),多種技術(shù)、多種方案相互融合,為項(xiàng)目交付提供自動(dòng)化和編排的快速迭代方案。
② 自動(dòng)部署:云原生的方法對(duì)于傳統(tǒng)的方法而言,直擊代碼質(zhì)量低下、發(fā)布流程繁瑣的痛點(diǎn),通過其具備的自動(dòng)化和組合功能,針對(duì)編譯、測(cè)試、部署等過程建立良好流程基礎(chǔ),快速交付。
③ 獨(dú)立高效:云原生帶來的微服務(wù)化框架,打破了傳統(tǒng)的開發(fā)模式,對(duì)于一個(gè)應(yīng)用來說,一個(gè)微服務(wù)就是一個(gè)可獨(dú)立發(fā)布的應(yīng)用;對(duì)于一個(gè)團(tuán)隊(duì)來說,為各個(gè)部門,不同崗位提供更多協(xié)同與溝通上的的思路。
相信現(xiàn)在大家對(duì)容器和云原生有了一定的了解,過去我們也分享過容器化改造的具體步驟,供各位借鑒:
1、建設(shè)組織級(jí)鏡像倉(cāng)庫(kù)(若有Artifactory,可使用其作為Docker鏡像倉(cāng)庫(kù);如果沒有,建議選用Harbor作為鏡像倉(cāng)庫(kù))。
2、制定鏡像管理規(guī)范,確定是由哪個(gè)部門來管。
3、關(guān)于基礎(chǔ)鏡像、中間件鏡像構(gòu)建、管理及維護(hù),要有專人負(fù)責(zé)。
4、制定不同語言類型的標(biāo)準(zhǔn)鏡像模板及CICD工作流。
5、結(jié)合鏡像管理規(guī)范對(duì)現(xiàn)有應(yīng)用進(jìn)行容器化改造(如一些目錄調(diào)整、啟停腳本編寫等)。
6、選擇合適應(yīng)用進(jìn)行試點(diǎn)。
7、試點(diǎn)階段回顧與總結(jié),持續(xù)反饋、持續(xù)改進(jìn)。
8、制定全面推廣策略并實(shí)施。
CMDB治理:CMDB消費(fèi)場(chǎng)景規(guī)劃指南
查看詳細(xì)
CTest測(cè)試管理平臺(tái):上新用例結(jié)構(gòu)化設(shè)計(jì)
查看詳細(xì)
CCode代碼管理平臺(tái):代碼合并前CI任務(wù)狀態(tài)校驗(yàn)
查看詳細(xì)
嘉為藍(lán)鯨WeOps:高效監(jiān)控Kubernetes集群的三大關(guān)鍵點(diǎn)
查看詳細(xì)
CFlow價(jià)值流管理平臺(tái):從流程線上化到價(jià)值可視化,研運(yùn)黑盒破解之道
查看詳細(xì)
CPack制品庫(kù):制品黑白名單,為軟件供應(yīng)鏈安全護(hù)航
查看詳細(xì)
申請(qǐng)演示