CI/CD流程實(shí)現(xiàn)及環(huán)境部署(理論篇)

Kubernetes 支持多個(gè)容器運(yùn)行環(huán)境:Docker障般、 containerdCRI-O 以及任何實(shí)現(xiàn) Kubernetes CRI (容器運(yùn)行環(huán)境接口)
Kubernetes 官方發(fā)布公告盛杰,宣布自 v1.20 起放棄對(duì) Docker的支持挽荡。目前,Kubelet 中的 Docker支持功能現(xiàn)已棄用即供,并將在之后的版本中被刪除定拟。逐漸轉(zhuǎn)移到containerd。不過本文仍以docker為基礎(chǔ)到kubernetes的進(jìn)階~

一募狂、Docker

Docker Engine

Docker Engine 是一種開源容器化技術(shù)办素,用于構(gòu)建和容器化您的應(yīng)用程序。是一個(gè)C/S架構(gòu)的應(yīng)用程序祸穷,主要包含以下幾個(gè)組件:
①常駐后臺(tái)進(jìn)程dockerd
②一個(gè)用來和守護(hù)進(jìn)程dockerd交互的REST API Server
③命令行界面 (CLI) 客戶端(我們常使用的docker命令)


docker engine.png
Docker架構(gòu)

Docker 使用客戶端-服務(wù)器架構(gòu)性穿。Docker客戶端與 Docker守護(hù)進(jìn)程對(duì)話,后者負(fù)責(zé)構(gòu)建雷滚、運(yùn)行和分發(fā) Docker 容器的繁重工作需曾。Docker 客戶端和守護(hù)程序可以 運(yùn)行在同一系統(tǒng)上,或者您可以將 Docker 客戶端連接到遠(yuǎn)程 Docker 守護(hù)程序祈远。Docker 客戶端和守護(hù)進(jìn)程使用 REST API呆万、UNIX 套接字或網(wǎng)絡(luò)接口進(jìn)行通信。另一個(gè) Docker 客戶端是 Docker Compose车份,它允許您使用由一組容器組成的應(yīng)用程序谋减。


docker架構(gòu).png

安裝

Install Docker Engine on Ubuntu

二、Kubernetes

簡(jiǎn)介

kubernetes是Google基于borg開源的容器編排系統(tǒng)扫沼,它的目標(biāo)是管理跨多個(gè)主機(jī)的容器出爹,用于自動(dòng)部署、擴(kuò)展和管理容器化的應(yīng)用程序缎除,主要實(shí)現(xiàn)語言為go語言严就。

集群

當(dāng)你部署完Kubernetes,即擁有了一個(gè)完整的集群器罐。一個(gè)Kubernetes集群由一組被稱作為節(jié)點(diǎn)的機(jī)器組成:

  • master負(fù)責(zé)管理集群梢为,協(xié)調(diào)集群中的所有活動(dòng),例如調(diào)度應(yīng)用程序、維護(hù)應(yīng)用程序所需的狀態(tài)铸董、擴(kuò)展應(yīng)用程序和滾動(dòng)更新
  • 節(jié)點(diǎn)是Kubernetes集群中的工作機(jī)器祟印,可以是物理機(jī)或虛擬機(jī)。每個(gè)工作節(jié)點(diǎn)都有一個(gè)kubelet袒炉,它是管理節(jié)點(diǎn)并與k8s master節(jié)點(diǎn)進(jìn)行通信的代理旁理。在這些節(jié)點(diǎn)上運(yùn)行Kubernetes所管理的容器化應(yīng)用程序。
  • 集群至少擁有一個(gè)工作節(jié)點(diǎn)我磁。


    k8s cluster.png

Pod

Pod是可以在kubernetes中創(chuàng)建和管理的孽文、最小的可部署的計(jì)算單元。
Pod是一組緊密關(guān)聯(lián)的容器集合夺艰,它們共享存儲(chǔ)芋哭、網(wǎng)絡(luò)、以及怎樣運(yùn)行這些容器的聲明郁副。通常你不需要直接創(chuàng)建Pod减牺,甚至單實(shí)例Pod。相反存谎,你會(huì)使用Deployment 或Job這類工作負(fù)載資源來創(chuàng)建Pod拔疚。如果Pod需要跟蹤狀態(tài),可以考慮statefulSet資源既荚。


pod.png

Label

Label 是識(shí)別 Kubernetes 對(duì)象的標(biāo)簽稚失,以 key/value 的方式附加到對(duì)象上。Label 不提供唯一性恰聘,并且實(shí)際上經(jīng)常是很多對(duì)象(如Pods)都使用相同的 label 來標(biāo)志具體的應(yīng)用句各。 Label 定義好后其他對(duì)象可以使用 Label Selector 來選擇一組相同 label 的對(duì)象(比如Service 用 label 來選擇一組 Pod)。Label Selector支持以下幾種方式:

  • 等式晴叨,如app=nginx和env!=production
  • 集合凿宾,如env in (production, qa)
  • 多個(gè)label(它們之間是AND關(guān)系),如app=nginx,env=test

Namespace

Kubernetes 支持多個(gè)虛擬集群兼蕊,它們底層依賴于同一個(gè)物理集群初厚。 這些虛擬集群被稱為名字空間。Namespace 是對(duì)一組資源和對(duì)象的抽象集合孙技。
名字空間資源本身产禾、底層資源(節(jié)點(diǎn)Node和持久化卷PV)不屬于任何名字空間。

Deployment

一個(gè)Deployment為Pods和ReplicatSets提供聲明式的更新能力绪杏。Deployment 確保任意時(shí)間都有指定數(shù)量的 Pod“副本”在運(yùn)行。Deployment 還支持回滾和滾動(dòng)升級(jí)纽绍。
當(dāng)創(chuàng)建 Deployment 時(shí)蕾久,需要指定兩個(gè)東西:

  • Pod模板:用來創(chuàng)建 Pod 副本的模板
  • Label標(biāo)簽:Deployment 需要監(jiān)控的 Pod 的標(biāo)簽。
    現(xiàn)在已經(jīng)創(chuàng)建了 Pod 的一些副本拌夏,那么在這些副本上如何均衡負(fù)載呢僧著?我們需要的是 Service履因。

Service

Service 是應(yīng)用服務(wù)的抽象,通過 labels 為應(yīng)用提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)盹愚。匹配 labels 的Pod IP 和端口列表組成 endpoints栅迄,由 kube-proxy 負(fù)責(zé)將服務(wù) IP 負(fù)載均衡到這些endpoints 上。

每個(gè) Service 都會(huì)自動(dòng)分配一個(gè) cluster IP(僅在集群內(nèi)部可訪問的虛擬地址)和 DNS 名皆怕,其他容器可以通過該地址或 DNS 來訪問服務(wù)毅舆,而不需要了解后端容器的運(yùn)行。


圖片.png

安裝kubernetes

可參考K8S安裝部署

三愈腾、Harbor

簡(jiǎn)介

Harbor 是一個(gè)CNCF基金會(huì)托管的開源的可信的云原生docker registry項(xiàng)目憋活,可以用于存儲(chǔ)、簽名虱黄、掃描鏡像內(nèi)容悦即,Harbor 通過添加一些常用的功能如安全性、身份權(quán)限管理等來擴(kuò)展 docker registry 項(xiàng)目橱乱,此外還支持在 registry 之間復(fù)制鏡像辜梳,還提供更加高級(jí)的安全功能,如用戶管理泳叠、訪問控制和活動(dòng)審計(jì)等作瞄,在新版本中還添加了Helm倉(cāng)庫(kù)托管的支持。
Harbor最核心的功能就是給 docker registry 添加上一層權(quán)限保護(hù)的功能析二,docker registry v2 就已經(jīng)為我們提供了支持粉洼,v2 集成了一個(gè)安全認(rèn)證的功能,將安全認(rèn)證暴露給外部服務(wù)叶摄,讓外部服務(wù)去實(shí)現(xiàn)属韧。


docker login.png

安裝Harbor

可參考通過helm在k8s上搭建Harbor

四、Jenkins

簡(jiǎn)介

Jenkins是一款開源 CI&CD 軟件蛤吓,用于自動(dòng)化各種任務(wù)宵喂,包括構(gòu)建、測(cè)試和部署軟件会傲。

Pipeline

Jenkins 流水線是一套插件锅棕,它支持實(shí)現(xiàn)和集成 continuous delivery pipelines 到Jenkins。對(duì)Jenkins 流水線的定義被寫在一個(gè)文本文件中 (成為 Jenkinsfile)淌山,該文件可以被提交到項(xiàng)目的源代碼的控制倉(cāng)庫(kù)裸燎。 這是"流水線即代碼"的基礎(chǔ); 將CD 流水線作為應(yīng)用程序的一部分,像其他代碼一樣進(jìn)行版本化和審查泼疑。
流水線是用戶定義的一個(gè)CD流水線模型 德绿。流水線的代碼定義了整個(gè)的構(gòu)建過程, 他通常包括構(gòu)建, 測(cè)試和交付應(yīng)用程序的階段 。

安裝Jenkins

可參考在k8s上安裝Jenkins

五、CI/CD

以下列實(shí)踐過的流程來講述整個(gè)CI/CD 過程

  • 開發(fā)人員提交代碼到 Gitlab 代碼倉(cāng)庫(kù)
  • 通過 Jenkins 的輪詢SCM觸發(fā) Pipeline 自動(dòng)構(gòu)建
  • Jenkins 觸發(fā)構(gòu)建構(gòu)建任務(wù)移稳,根據(jù) Pipeline 腳本定義分步驟構(gòu)建
  • 先進(jìn)行代碼靜態(tài)分析蕴纳,單元測(cè)試(本文跳過)
  • 根據(jù)構(gòu)建結(jié)果構(gòu)建 Docker 鏡像
  • 推送 Docker 鏡像到 Harbor 倉(cāng)庫(kù)
  • 觸發(fā)更新服務(wù)階段
  • 查看服務(wù)是否更新成功

CI/CD demo.png

部署流程可參考Jenkins pipeline部署k8s應(yīng)用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市个粱,隨后出現(xiàn)的幾起案子古毛,更是在濱河造成了極大的恐慌,老刑警劉巖都许,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稻薇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梭稚,警方通過查閱死者的電腦和手機(jī)颖低,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弧烤,“玉大人忱屑,你說我怎么就攤上這事∠景海” “怎么了莺戒?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)急波。 經(jīng)常有香客問我从铲,道長(zhǎng),這世上最難降的妖魔是什么澄暮? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任名段,我火速辦了婚禮,結(jié)果婚禮上泣懊,老公的妹妹穿的比我還像新娘伸辟。我一直安慰自己,他們只是感情好馍刮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布信夫。 她就那樣靜靜地躺著,像睡著了一般卡啰。 火紅的嫁衣襯著肌膚如雪静稻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天匈辱,我揣著相機(jī)與錄音振湾,去河邊找鬼。 笑死亡脸,一個(gè)胖子當(dāng)著我的面吹牛押搪,可吹牛的內(nèi)容都是我干的佛南。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嵌言,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了及穗?” 一聲冷哼從身側(cè)響起摧茴,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埂陆,沒想到半個(gè)月后苛白,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焚虱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年购裙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹃栽。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躏率,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出民鼓,到底是詐尸還是另有隱情薇芝,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布丰嘉,位于F島的核電站夯到,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏饮亏。R本人自食惡果不足惜耍贾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望路幸。 院中可真熱鬧荐开,春花似錦、人聲如沸劝赔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽着帽。三九已至杂伟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仍翰,已是汗流浹背赫粥。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留予借,地道東北人越平。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓频蛔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親秦叛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晦溪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容