溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

DevOps指的是什么

發(fā)布時(shí)間:2022-01-07 17:37:47 來(lái)源:億速云 閱讀:143 作者:柒染 欄目:系統(tǒng)運(yùn)維

DevOps指的是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

DevOps是對(duì)已建立的 IT流程的簡(jiǎn)化或者自動(dòng)化。這里有一個(gè)簡(jiǎn)短的教程來(lái)幫助你理解和開始使用 DevOps。

DevOps;CI/CD;Docker;Kubernetes;我敢肯定你在過(guò)去的一年里經(jīng)常聽人說(shuō)這些詞。好像全世界都在談?wù)撨@些技術(shù),以至于你覺(jué)得即將到達(dá)NoOps階段。

別擔(dān)心,在工具和各種最佳實(shí)踐的浩瀚海洋中感到迷失是正常的。是時(shí)候讓我們來(lái)分析一下DevOps到底是什么了。

什么是DevOps?

DevOps是對(duì)已建立的 IT流程的簡(jiǎn)化或者自動(dòng)化。

我見(jiàn)過(guò)很多人開始使用DevOps,最終卻都迷失了。這似乎是一種魔咒。

通常從一段視頻開始,講述一家高科技初創(chuàng)公司是如何自動(dòng)化整個(gè)產(chǎn)品發(fā)布流程的。一旦所有測(cè)試通過(guò),部署就會(huì)自動(dòng)進(jìn)行。發(fā)生故障時(shí),可以自動(dòng)回滾。同時(shí)進(jìn)行A/B測(cè)試,提高了客戶參與度。

老實(shí)說(shuō)吧,我們都想實(shí)現(xiàn)這樣的DevOps。我們都厭倦了像坐過(guò)山車一樣的發(fā)布新版本。

DevOps指的是什么

不幸的是,DevOps不是這樣工作的。DevOps并不是一根魔法棒,它能在一瞬間解決你所有的問(wèn)題。

相反,這是一個(gè)系統(tǒng)性的工程,你應(yīng)該使用合適的工具和技術(shù)來(lái)完成不同的任務(wù)。

所有的一切都是為了流程

具體是什么流程并不重要,只要它可以簡(jiǎn)化應(yīng)用程序的部署或者自動(dòng)化測(cè)試,讓你的生活更輕松,那這就是DevOps的全部?jī)?nèi)容。

事實(shí)上,如果你的流程不能手動(dòng)完成(針對(duì)較小的流程),你可能需要重新定義你的流程。

好了,讓我們舉一個(gè)真實(shí)的例子來(lái)更好地理解“流程”。

一個(gè)真實(shí)的DevOps例子

我們舉一個(gè),在云虛擬機(jī)上部署Nodejs應(yīng)用程序的例子。

流程

我們的流程如下:

從源代碼開始(Start with the source code):只要我們能訪問(wèn)源代碼,我們就可以在任何地方運(yùn)行我們的代碼。

構(gòu)建制品(Build an  Artifact):然后我們打包源代碼來(lái)構(gòu)建一個(gè)制品。如果是Java語(yǔ)言,那么JAR文件就是我們的制品。但在我們Nodejs的例子中,源代碼本身就是要發(fā)布的制品。

發(fā)布到制品倉(cāng)庫(kù)(Publish to an Artifact  Repository):接下來(lái),我們將制品推送到制品倉(cāng)庫(kù)。然后我們的虛擬機(jī)就可以從制品倉(cāng)庫(kù)中提取制品。我們可以直接使用Github作為我們的制品倉(cāng)庫(kù),因?yàn)槲覀兊脑创a即制品。

拉取并運(yùn)行應(yīng)用程序(Pull and run your app):最后,我們將制品拉取到虛擬機(jī)上,并通過(guò)指令npm  start來(lái)啟動(dòng)Nodejs進(jìn)程。

DevOps指的是什么

我們的第一個(gè)DevOps項(xiàng)目

我們不會(huì)在這里做任何花哨的事情。最簡(jiǎn)單的自動(dòng)化的方式就是寫一個(gè)shell腳本,按順序順序運(yùn)行所有命令。恭喜你完成了我們的第一個(gè)DevOps項(xiàng)目!!!

我知道shell腳本聽起來(lái)太簡(jiǎn)單了,不值得認(rèn)真對(duì)待。我懷疑你曾經(jīng)也寫過(guò)這樣的腳本。但相信我,這就是DevOps!

別擔(dān)心,我們馬上就可以看到那些花哨的東西了。但重要的是要理解DevOps就是這樣工作的。

“可重復(fù)”的重復(fù)性

讓我問(wèn)你一個(gè)問(wèn)題。你喜歡以下哪一個(gè)?

一個(gè)在60%的時(shí)間內(nèi),能正常工作的自動(dòng)化部署管道;

一個(gè)無(wú)聊的shell腳本,但是每次執(zhí)行都能完成任務(wù)。

如果你曾經(jīng)在半夜處理過(guò)生產(chǎn)故障,那么你將選擇shell腳本。

原因很簡(jiǎn)單??煽啃赃h(yuǎn)比自動(dòng)化程度更重要。換句話說(shuō),一個(gè)DevOps流程必須能夠在每次運(yùn)行時(shí)產(chǎn)生一致的結(jié)果。

使我們的過(guò)程可重復(fù)

以我們的shell腳本為例。目前,我們的shell腳本依賴于安裝在虛擬機(jī)上的Node.js。

如果沒(méi)有在虛擬機(jī)上安裝Node.js,會(huì)發(fā)生什么?一個(gè)錯(cuò)誤的Node.js版本足以使我們的應(yīng)用程序不能正常運(yùn)行。當(dāng)我們需要在虛擬機(jī)上安裝多種語(yǔ)言運(yùn)行時(shí)時(shí),情況只會(huì)變得更糟。

一個(gè)簡(jiǎn)單的解決方案是將Node.js運(yùn)行時(shí)與我們的源代碼一起歸檔到zip文件中。然后可以將zip文件發(fā)送到虛擬機(jī)。這樣,虛擬機(jī)就可以使用zip文件中的本地Node.js運(yùn)行時(shí)來(lái)運(yùn)行我們的應(yīng)用程序。

幸運(yùn)的是,有一種工具可以讓我們的生活更輕松。

Docker和容器

如果你對(duì)Docker不熟悉,可以將Docker看作是一種將你的制品(artifact)及其所依賴的操作系統(tǒng)以及Node.js,一起打包進(jìn)容器鏡像中的方法。

使用容器,我們可以在安裝了Docker的虛擬機(jī)上部署任何應(yīng)用程序。

使用Docker,我們的流程將如下所示:

DevOps指的是什么

容器不僅僅能做到這些,但這卻是容器能如此流行的重要原因之一。

Docker對(duì)比容器

讓我澄清一下,Docker和容器并不是同一個(gè)東西。

Docker是一組實(shí)用工具,用于構(gòu)建和運(yùn)送容器鏡像,以及使用容器運(yùn)行時(shí)(如containerd)來(lái)運(yùn)行容器。

考慮到最近發(fā)生的事件,許多人對(duì)Docker的未來(lái)感到擔(dān)憂。

重要的是要明白,Docker不會(huì)立馬消失,在構(gòu)建和運(yùn)送容器鏡像領(lǐng)域,將繼續(xù)發(fā)揮重要作用。

認(rèn)真對(duì)待DevOps

我們已經(jīng)取得了一些重大進(jìn)展。希望我們能理解Docker是如何融入DevOps流程中的。

是時(shí)候把事情推向下一個(gè)層次了。

基于事件的觸發(fā)部署

我們的腳本看起來(lái)很穩(wěn)定,但仍然是手動(dòng)觸發(fā)的。

DevOps指的是什么

如果我們能,當(dāng)有人往GitHub上推送代碼時(shí)自動(dòng)觸發(fā)這個(gè)腳本,那不是更好嗎?換句話說(shuō),我們希望基于事件的觸發(fā)部署。

GitHub可以在一組特定的事件上調(diào)用webhook。為了實(shí)現(xiàn)這一點(diǎn),我們需要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的HTTP服務(wù)器,每當(dāng)服務(wù)器接收到請(qǐng)求時(shí),它就會(huì)執(zhí)行shell腳本。我們可以將GitHub配置為,當(dāng)發(fā)生Push事件時(shí),觸發(fā)HTTP請(qǐng)求。我們將這個(gè)過(guò)程稱之為持續(xù)部署(Continuous  Deployment)。

我們的新流程如下所示:

DevOps指的是什么

恭喜你,你剛剛成功創(chuàng)建了一個(gè)CD pipeline。

持續(xù)部署是一種軟件,負(fù)責(zé)將應(yīng)用程序從GitHub之類的東西一直帶到最終部署的目標(biāo)環(huán)境中。

這基本上就是你經(jīng)常聽到的CI/CD。當(dāng)人們談?wù)撓馢enkins和CircleCI這樣的工具時(shí),他們通常指的是CI/CD。

DevOps模式

我想你已經(jīng)找到了一個(gè)模式。我們從一個(gè)流程開始,找到一個(gè)我們不滿意的部分,然后引入一些軟件來(lái)簡(jiǎn)化或自動(dòng)化它。

用代碼的方式來(lái)操作流程,這就是DevOps。

引入容器編排

最后讓我們做一個(gè)小小的改進(jìn)。到目前為止,我們一直將應(yīng)用程序部署在單個(gè)虛擬機(jī)上。如果我們想將應(yīng)用程序部署到多個(gè)虛擬機(jī)或者節(jié)點(diǎn)上呢?

實(shí)現(xiàn)這一點(diǎn)的最簡(jiǎn)單方法是讓CD Server通過(guò)ssh連接到所有虛擬機(jī),并將容器部署到每個(gè)虛擬機(jī)中。

DevOps指的是什么

使用這種方式時(shí),每當(dāng)虛擬機(jī)的數(shù)量發(fā)生變化時(shí),我們就需要更改腳本。但在真實(shí)世界中,我們希望我們的應(yīng)用程序是可以自動(dòng)擴(kuò)縮容的。

更好的方法是創(chuàng)建另一個(gè)HTTP服務(wù)器來(lái)跟蹤虛擬機(jī)數(shù)量的變化。我們可以稱這個(gè)服務(wù)器為“飛行員(Pilot)”。

此服務(wù)器將負(fù)責(zé)對(duì)集群中的各個(gè)虛擬機(jī)執(zhí)行健康檢查,以維護(hù)活動(dòng)的虛擬機(jī)列表。它甚至可以與云供應(yīng)商進(jìn)行通信,使事情變得更加健壯。

DevOps指的是什么

Pilot還將公開一個(gè)HTTP端點(diǎn),以接受要生成的容器的詳細(xì)信息。然后,它可以與各個(gè)虛擬機(jī)通信以完成任務(wù)。

現(xiàn)在,我們的CD Server可以簡(jiǎn)單地請(qǐng)求Pilot,而不是單獨(dú)與每個(gè)虛擬機(jī)通信。

我們的新流程如下所示:

DevOps指的是什么

我們將Pilot稱為容器編排器。其實(shí)這就是Kubernetes!你剛剛設(shè)計(jì)了一個(gè)迷你版的Kubernetes!

另外,Kubernetes在希臘語(yǔ)中就是Pilot的意思。這是不是巧合?

從哪里開始?

我們一起討論了不少工具。這是我的最后一點(diǎn)。有沒(méi)有想過(guò)為什么DevOps的空間如此分散?

如果你仔細(xì)想想,有這么多的工具,讓你很難決定:什么是正確的選擇,或者你應(yīng)該從哪里開始?

DevOps指的是什么

每個(gè)組織都有自己的做事方式和流程,因而他們使用的工具也不同。你的工作不是找出哪種工具是最好的。你的工作就是找出最適合你的流程。一旦你明白了這一點(diǎn),這些工具就只需要谷歌搜索了。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI