DevOps是對已建立的 IT流程的簡化或者自動化。這里有一個簡短的教程來幫助你理解和開始使用 DevOps。
DevOps;CI/CD;Docker;Kubernetes;我敢肯定你在過去的一年里經常聽人說這些詞。好像全世界都在談論這些技術,以至于你覺得即將到達NoOps階段。
別擔心,在工具和各種最佳實踐的浩瀚海洋中感到迷失是正常的。是時候讓我們來分析一下DevOps到底是什么了。
DevOps是對已建立的 IT流程的簡化或者自動化。
我見過很多人開始使用DevOps,最終卻都迷失了。這似乎是一種魔咒。
通常從一段視頻開始,講述一家高科技初創公司是如何自動化整個產品發布流程的。一旦所有測試通過,部署就會自動進行。發生故障時,可以自動回滾。同時進行A/B測試,提高了客戶參與度。
老實說吧,我們都想實現這樣的DevOps。我們都厭倦了像坐過山車一樣的發布新版本。
不幸的是,DevOps不是這樣工作的。DevOps并不是一根魔法棒,它能在一瞬間解決你所有的問題。
相反,這是一個系統性的工程,你應該使用合適的工具和技術來完成不同的任務。
所有的一切都是為了流程
具體是什么流程并不重要,只要它可以簡化應用程序的部署或者自動化測試,讓你的生活更輕松,那這就是DevOps的全部內容。
事實上,如果你的流程不能手動完成(針對較小的流程),你可能需要重新定義你的流程。
好了,讓我們舉一個真實的例子來更好地理解“流程”。
我們舉一個,在云虛擬機上部署Nodejs應用程序的例子。
流程
我們的流程如下:
從源代碼開始(Start with the source code):只要我們能訪問源代碼,我們就可以在任何地方運行我們的代碼。
構建制品(Build an Artifact):然后我們打包源代碼來構建一個制品。如果是Java語言,那么JAR文件就是我們的制品。但在我們Nodejs的例子中,源代碼本身就是要發布的制品。
發布到制品倉庫(Publish to an Artifact Repository):接下來,我們將制品推送到制品倉庫。然后我們的虛擬機就可以從制品倉庫中提取制品。我們可以直接使用Github作為我們的制品倉庫,因為我們的源代碼即制品。
拉取并運行應用程序(Pull and run your app):最后,我們將制品拉取到虛擬機上,并通過指令npm start來啟動Nodejs進程。
我們不會在這里做任何花哨的事情。最簡單的自動化的方式就是寫一個shell腳本,按順序順序運行所有命令。恭喜你完成了我們的第一個DevOps項目!!!
我知道shell腳本聽起來太簡單了,不值得認真對待。我懷疑你曾經也寫過這樣的腳本。但相信我,這就是DevOps!
別擔心,我們馬上就可以看到那些花哨的東西了。但重要的是要理解DevOps就是這樣工作的。
讓我問你一個問題。你喜歡以下哪一個?
一個在60%的時間內,能正常工作的自動化部署管道;
一個無聊的shell腳本,但是每次執行都能完成任務。
如果你曾經在半夜處理過生產故障,那么你將選擇shell腳本。
原因很簡單??煽啃赃h比自動化程度更重要。換句話說,一個DevOps流程必須能夠在每次運行時產生一致的結果。
以我們的shell腳本為例。目前,我們的shell腳本依賴于安裝在虛擬機上的Node.js。
如果沒有在虛擬機上安裝Node.js,會發生什么?一個錯誤的Node.js版本足以使我們的應用程序不能正常運行。當我們需要在虛擬機上安裝多種語言運行時時,情況只會變得更糟。
一個簡單的解決方案是將Node.js運行時與我們的源代碼一起歸檔到zip文件中。然后可以將zip文件發送到虛擬機。這樣,虛擬機就可以使用zip文件中的本地Node.js運行時來運行我們的應用程序。
幸運的是,有一種工具可以讓我們的生活更輕松。
如果你對Docker不熟悉,可以將Docker看作是一種將你的制品(artifact)及其所依賴的操作系統以及Node.js,一起打包進容器鏡像中的方法。
使用容器,我們可以在安裝了Docker的虛擬機上部署任何應用程序。
使用Docker,我們的流程將如下所示:
容器不僅僅能做到這些,但這卻是容器能如此流行的重要原因之一。
讓我澄清一下,Docker和容器并不是同一個東西。
Docker是一組實用工具,用于構建和運送容器鏡像,以及使用容器運行時(如containerd)來運行容器。
考慮到最近發生的事件,許多人對Docker的未來感到擔憂。
重要的是要明白,Docker不會立馬消失,在構建和運送容器鏡像領域,將繼續發揮重要作用。
我們已經取得了一些重大進展。希望我們能理解Docker是如何融入DevOps流程中的。
是時候把事情推向下一個層次了。
我們的腳本看起來很穩定,但仍然是手動觸發的。
如果我們能,當有人往GitHub上推送代碼時自動觸發這個腳本,那不是更好嗎?換句話說,我們希望基于事件的觸發部署。
GitHub可以在一組特定的事件上調用webhook。為了實現這一點,我們需要創建一個簡單的HTTP服務器,每當服務器接收到請求時,它就會執行shell腳本。我們可以將GitHub配置為,當發生Push事件時,觸發HTTP請求。我們將這個過程稱之為持續部署(Continuous Deployment)。
我們的新流程如下所示:
恭喜你,你剛剛成功創建了一個CD pipeline。
持續部署是一種軟件,負責將應用程序從GitHub之類的東西一直帶到最終部署的目標環境中。
這基本上就是你經常聽到的CI/CD。當人們談論像Jenkins和CircleCI這樣的工具時,他們通常指的是CI/CD。
我想你已經找到了一個模式。我們從一個流程開始,找到一個我們不滿意的部分,然后引入一些軟件來簡化或自動化它。
用代碼的方式來操作流程,這就是DevOps。
最后讓我們做一個小小的改進。到目前為止,我們一直將應用程序部署在單個虛擬機上。如果我們想將應用程序部署到多個虛擬機或者節點上呢?
實現這一點的最簡單方法是讓CD Server通過ssh連接到所有虛擬機,并將容器部署到每個虛擬機中。
使用這種方式時,每當虛擬機的數量發生變化時,我們就需要更改腳本。但在真實世界中,我們希望我們的應用程序是可以自動擴縮容的。
更好的方法是創建另一個HTTP服務器來跟蹤虛擬機數量的變化。我們可以稱這個服務器為“飛行員(Pilot)”。
此服務器將負責對集群中的各個虛擬機執行健康檢查,以維護活動的虛擬機列表。它甚至可以與云供應商進行通信,使事情變得更加健壯。
Pilot還將公開一個HTTP端點,以接受要生成的容器的詳細信息。然后,它可以與各個虛擬機通信以完成任務。
現在,我們的CD Server可以簡單地請求Pilot,而不是單獨與每個虛擬機通信。
我們的新流程如下所示:
我們將Pilot稱為容器編排器。其實這就是Kubernetes!你剛剛設計了一個迷你版的Kubernetes!
另外,Kubernetes在希臘語中就是Pilot的意思。這是不是巧合?
我們一起討論了不少工具。這是我的最后一點。有沒有想過為什么DevOps的空間如此分散?
如果你仔細想想,有這么多的工具,讓你很難決定:什么是正確的選擇,或者你應該從哪里開始?
每個組織都有自己的做事方式和流程,因而他們使用的工具也不同。你的工作不是找出哪種工具是最好的。你的工作就是找出最適合你的流程。一旦你明白了這一點,這些工具就只需要谷歌搜索了。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注本站行業資訊頻道,感謝您對本站的支持。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
2013年5月10日,馬云卸任阿里巴巴集團CEO,將接力棒傳給了與之有13年共事經歷的陸兆禧。當時馬云發表演講時表示,10年之間,淘寶能成功、電子商務在中國能成功,是因為人與人之間建立起了信任關系。他也感謝10年來團隊給他的信任,也相信新時代是年輕人的時代,希望大家像支持他一樣支持繼任者陸兆禧及其新團隊。馬云說,10年前的大家不會愿意從一個素未謀面的人那買一個從未見過的東西。但10年后,每天中國電...
北京證券交易所(簡稱“北交所”),是創立于2021年的證券交易所。2021年9月2日晚,2021年中國國際服務貿易交易會全球服務貿易峰會中宣布,繼續支持中小企業創新發展,深化新三板改革,設立北京證券交易所,打造服務創新型中小企業主陣地。2021年9月3日,證監會就北京證券交易所有關基礎制度安排向社會公開征求意見。9月3日,北京證券交易所有限責任公司成立,徐明任董事長。202...
(資料圖片)最新更新:針對暴雪與網易終止合作后游戲廠商爭取代理權一事,據媒體最新消息稱,騰訊方面回應,內部暫時沒有相關消息,暴雪版權的問題建議以暴雪官方回復為準。米哈游則表示,米哈游接手暴雪版權代理為假消息,米哈游自成立以來主打自研游戲,目前尚未有代理運營的游戲項目。11月17日,#暴雪單方宣布與網易停止合作#上熱搜,暴雪娛樂發聲明稱,由于同網易的現有授權協議將在2023年1月23日到期,將暫停在...