自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解讀GitOps工作原理

譯文
開發(fā) 架構(gòu)
本文將介紹GitOps的工作原理,它的啟動(dòng)與運(yùn)行,以及如何在Kubernetes中配合使用GitOps,以團(tuán)隊(duì)的DevOps體驗(yàn)。

[[330020]]

【51CTO.com快譯】

英國作家Aldous Huxley曾說:“速度是真正的樂趣之源。”我認(rèn)為生活如此,軟件領(lǐng)域亦然。隨著DevOps以及GitOps之類輔助實(shí)踐的興起,軟件從架構(gòu)設(shè)計(jì)到代碼被部署到生產(chǎn)環(huán)境的速度是越來越快。

實(shí)際上,DevOps是通過定義一組實(shí)踐和文化的轉(zhuǎn)變,來提高我們生成代碼的速度,并保證代碼的可靠性。DevOps本身只是一個(gè)廣義術(shù)語,不同的組織和團(tuán)隊(duì)在其核心原理上開發(fā)出了各種具體的實(shí)踐,其中包括:ChatOps、DevSecOps、AIOps、以及一種稱為GitOps的較新的實(shí)踐。

GitOps的出現(xiàn)和興起,主要得益于軟件開發(fā)行業(yè)對(duì)于Kubernetes的廣泛采用。在各類組織向Kubernetes的邁進(jìn)過程中,開發(fā)團(tuán)隊(duì)的逐步成長,以及對(duì)于擴(kuò)展集群的管理實(shí)踐會(huì)變得勢在必行。因此GitOps旨在將Git和Kubernetes結(jié)合在一起,為開發(fā)人員提供某種形式的操作模型、以及基于Kubernetes的基礎(chǔ)架構(gòu)和應(yīng)用程序??梢哉f,在Kubernetes開發(fā)的過程中,GitOps能夠在確保“速度”的基礎(chǔ)上,實(shí)現(xiàn)軟件方案的持續(xù)交付。

下面,我們來看看GitOps的工作原理,它的啟動(dòng)與運(yùn)行,以及如何在Kubernetes中配合使用GitOps,以團(tuán)隊(duì)的DevOps體驗(yàn)。

工作原理

GitOps秉承了DevOps的核心理念--“構(gòu)建它并交付它(you built it you ship it)”。它能夠讓開發(fā)人員在自己所選的Git工具中,提出拉式請(qǐng)求,觸發(fā)Kubernetes集群的部署,從而使得Git成為唯一的來源。

顯然,該思想是將基于推式的管道替換為基于拉式的管道,從而使得開發(fā)人員能夠直接根據(jù)其拉式請(qǐng)求執(zhí)行部署。而一旦開發(fā)人員執(zhí)行合并或打開請(qǐng)求,該基礎(chǔ)結(jié)構(gòu)就會(huì)在部署過程中觸發(fā)一系列的事件。GitOps運(yùn)算符(operator)只要檢測到此類變化,就會(huì)導(dǎo)致另一個(gè)運(yùn)算符聲明的更改,并將其部署到集群之中。例如,您可以使用如下工具棧來實(shí)現(xiàn)GitOps:

  • 將Bitbucket作為您的Git VCS(譯者注:Version Control System,版本控制系統(tǒng))工具。
  • 用Docker存儲(chǔ)您的各種鏡像。
  • 用Amazon S3來存儲(chǔ)各種Helm圖表。
  • 用AWS Lambda拉取圖表,并提交給集群存儲(chǔ)庫。
  • 用Weaveworks Flux檢測集群存儲(chǔ)庫中的更改,并做相應(yīng)的調(diào)整。

當(dāng)然,在您的工具棧中,實(shí)現(xiàn)此類功能的實(shí)際基礎(chǔ)架構(gòu)可能會(huì)有所不同,但是其機(jī)制卻是相似的。

如下是可以實(shí)現(xiàn)的GitOps工作流:

  • 使用Bitbucket管道之類的CI(持續(xù)集成)工具,將各種Docker鏡像推送到Quay之類的托管(hosting)工具處。
  • 各種云功能函數(shù)從主存儲(chǔ)bucket處,將不同的配置和helm圖表復(fù)制到主git存儲(chǔ)庫中。
  • 諸如Weaveworks Flux之類的GitOps運(yùn)算符,會(huì)根據(jù)各種配置圖表去更新集群,并通過Lambda函數(shù)提取不同的helm圖表。

當(dāng)然,上述技術(shù)棧中所描述的每個(gè)工具都有著對(duì)應(yīng)的替代方案,開發(fā)團(tuán)隊(duì)可以選擇最適合的工具,以實(shí)現(xiàn)DevOps的目標(biāo)。例如,同屬于Atlassian套件的Jira功能就能夠輕松地與Bitbucket協(xié)同發(fā)揮作用。因此,如果一個(gè)拉式請(qǐng)求在Bitbucket中被創(chuàng)建,就會(huì)自動(dòng)將Jira中的問題發(fā)送到自定義的“部署”上。這將大幅簡化從設(shè)計(jì)到發(fā)布的DevOps實(shí)踐過程。

類似地,當(dāng)考慮到通過GitOps實(shí)現(xiàn)的持續(xù)交付機(jī)制可能出現(xiàn)失敗時(shí),我們可以添加其他的監(jiān)控工具,以提供急需的可見性。例如,Thundra.io可被用于監(jiān)控S3觸發(fā)的AWS Lambda函數(shù),以確保在將更改提交給集群存儲(chǔ)庫時(shí),不會(huì)發(fā)生任何故障。

同理,我們也可以利用Thundra.io的集成功能,將警報(bào)發(fā)送給Opsgenie之類的報(bào)警工具,進(jìn)而通知合適的值班人員,以快速解決那些由拉式請(qǐng)求觸發(fā)的部署所引發(fā)的任何問題。

可見,我們完全可以通過向GitOps引擎添加更多的功能,以提高GitOps實(shí)踐過程中的可靠性和便利性。

給帶來的Kubernetes的便利性

總的說來,GitOps能夠?yàn)镵ubernetes的部署提供融合、冪等、確定性和自動(dòng)化等方面的功能。根據(jù)Kubernetes強(qiáng)大的收斂機(jī)制,它將不斷嘗試去改變集群的狀態(tài),讓各種收斂應(yīng)用都具有相同的結(jié)果。而且這些都會(huì)自動(dòng)而迅速地被觸發(fā)。

Kubernetes的編排器(orchestrator)會(huì)持續(xù)將各種更改應(yīng)用到集群中,直到集群收斂到配置更新所定義的狀態(tài)為止,也就是要滿足開發(fā)人員或SRE人員所期望的配置狀態(tài)。這不但適用于所有的Kubernetes資源,還能夠被用到自定義資源(Custom Resource Definitions,CRD)或Kubernetes的擴(kuò)展。

整個(gè)GitOps的過程始于在Git存儲(chǔ)庫中定義某個(gè)所需的狀態(tài),然后Git被定位為唯一的來源。此外,我們需要保障提交過來的更改能夠與群集相配,以便標(biāo)記處群集是已經(jīng)收斂到了所需的狀態(tài),還是已偏離了該狀態(tài)。

當(dāng)期望狀態(tài)與實(shí)際狀態(tài)不相同時(shí),Kubernetes中的收斂運(yùn)算符會(huì)主動(dòng)嘗試著補(bǔ)足這兩個(gè)狀態(tài)之間的差異,即:根據(jù)那些針對(duì)Git的提交,觸發(fā)更改的“差異”警報(bào),以標(biāo)識(shí)處仍然需要進(jìn)一步的收斂。因此,這就意味著,所有的提交都會(huì)產(chǎn)生對(duì)于集群的可驗(yàn)證的、且冪等的更改。當(dāng)然,Kubernetes也可能按需產(chǎn)生回滾。就其機(jī)制而言,回滾可以被看作是進(jìn)一步收斂到以前的狀態(tài)。

最后,如果系統(tǒng)中不再存在“差異”警報(bào)、或僅存在“聚合”警報(bào),那么該機(jī)制就認(rèn)為實(shí)際狀態(tài)已經(jīng)達(dá)到了所需的狀態(tài)。實(shí)際上,我們可以使用回調(diào)、或回寫事件的方法,來設(shè)置此類聚合狀態(tài)。

至此,我們可以認(rèn)識(shí)到:GitOps依賴于IAC(譯者注:基礎(chǔ)架構(gòu)即代碼)的概念。即:以編程的方式定義了基礎(chǔ)架構(gòu),而基礎(chǔ)架構(gòu)的實(shí)際狀態(tài)也會(huì)隨著發(fā)生相應(yīng)的變化。這種就是我們在前文中提到的基于拉式的部署方式,它與傳統(tǒng)的基于推式的部署有所不同。

相關(guān)工具

如您所知,DevOps是一個(gè)廣闊的領(lǐng)域,它不僅僅限于軟件行業(yè)。而GitOps則只是在軟件行業(yè)朝著更加敏捷、可靠的方向發(fā)展過程中,一種新興的開發(fā)實(shí)踐。更準(zhǔn)確地說,隨著技術(shù)趨勢的變化,開發(fā)實(shí)踐必須適應(yīng)可用的技術(shù),而GitOps是團(tuán)隊(duì)和組織如何跟蹤技術(shù)發(fā)展,持續(xù)推進(jìn)開發(fā)實(shí)踐的一種優(yōu)秀示例。值得一提的是,諸如Weaveworks Flux之類的運(yùn)算符,可以很好地幫助您在集群啟用GitOps。當(dāng)然,您也可以選用Spinnaker之類的其他代替方案。

此外,考慮到持續(xù)部署可能會(huì)給生成環(huán)境帶來風(fēng)險(xiǎn),我們可以通過添加諸如Thundra.io和Opsgenie之類的工具,來對(duì)系統(tǒng)進(jìn)行全覆蓋性的測試,以減少風(fēng)險(xiǎn)點(diǎn),保證一定的可觀察性和事件管理能力。

總結(jié)

總的來說,我們可以將GitOps視為一種實(shí)踐,它能夠利用Kubernetes的核心力量,來加快軟件從設(shè)計(jì)到發(fā)布的全部過程。我們只有掌握了GitOps的工作原理,才能充分發(fā)揮Kubernetes在容器服務(wù)方面的巨大潛力,為持續(xù)部署與持續(xù)交付保駕護(hù)航。

原標(biāo)題:Under the Hood of GitOps  作者: Sarjeel Yusuf

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2011-12-14 10:31:43

2010-03-04 09:35:21

Android虛擬機(jī)

2021-03-17 08:00:00

NoSQL數(shù)據(jù)庫存儲(chǔ)

2011-05-04 16:55:22

復(fù)印機(jī)

2009-06-18 13:31:03

Spring工作原理

2009-08-14 13:19:23

2021-04-13 07:58:36

測試假設(shè)檢驗(yàn)

2009-06-15 15:57:21

Spring工作原理

2009-07-16 10:23:30

iBATIS工作原理

2010-09-25 13:11:48

DHCP工作原理

2019-05-17 11:53:58

MySQLorder by數(shù)據(jù)庫

2021-02-05 15:01:41

GitLinux命令

2023-10-07 07:51:55

FluxCDKubernetes

2023-10-27 07:36:36

2009-12-11 10:29:03

PHP插件機(jī)制

2013-09-18 14:01:46

JavaScript

2009-07-06 12:32:26

JSP引擎

2019-08-20 14:01:22

HTTPSSSL協(xié)議

2010-09-29 09:28:04

DHCP工作原理

2011-03-25 09:34:34

Nagios網(wǎng)絡(luò)監(jiān)控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)