共計 3285 個字符,預計需要花費 9 分鐘才能閱讀完成。
DevOps 指的是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
DevOps 是對已建立的 IT 流程的簡化或者自動化。這里有一個簡短的教程來幫助你理解和開始使用 DevOps。
DevOps;CI/CD;Docker;Kubernetes;我敢肯定你在過去的一年里經常聽人說這些詞。好像全世界都在談論這些技術,以至于你覺得即將到達 NoOps 階段。
別擔心,在工具和各種最佳實踐的浩瀚海洋中感到迷失是正常的。是時候讓我們來分析一下 DevOps 到底是什么了。
什么是 DevOps?
DevOps 是對已建立的 IT 流程的簡化或者自動化。
我見過很多人開始使用 DevOps,最終卻都迷失了。這似乎是一種魔咒。
通常從一段視頻開始,講述一家高科技初創公司是如何自動化整個產品發布流程的。一旦所有測試通過,部署就會自動進行。發生故障時,可以自動回滾。同時進行 A / B 測試,提高了客戶參與度。
老實說吧,我們都想實現這樣的 DevOps。我們都厭倦了像坐過山車一樣的發布新版本。
不幸的是,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 進程。
我們的第一個 DevOps 項目
我們不會在這里做任何花哨的事情。最簡單的自動化的方式就是寫一個 shell 腳本,按順序順序運行所有命令。恭喜你完成了我們的第一個 DevOps 項目!!!
我知道 shell 腳本聽起來太簡單了,不值得認真對待。我懷疑你曾經也寫過這樣的腳本。但相信我,這就是 DevOps!
別擔心,我們馬上就可以看到那些花哨的東西了。但重要的是要理解 DevOps 就是這樣工作的。
“可重復”的重復性
讓我問你一個問題。你喜歡以下哪一個?
一個在 60% 的時間內,能正常工作的自動化部署管道;
一個無聊的 shell 腳本,但是每次執行都能完成任務。
如果你曾經在半夜處理過生產故障,那么你將選擇 shell 腳本。
原因很簡單。可靠性遠比自動化程度更重要。換句話說,一個 DevOps 流程必須能夠在每次運行時產生一致的結果。
使我們的過程可重復
以我們的 shell 腳本為例。目前,我們的 shell 腳本依賴于安裝在虛擬機上的 Node.js。
如果沒有在虛擬機上安裝 Node.js,會發生什么? 一個錯誤的 Node.js 版本足以使我們的應用程序不能正常運行。當我們需要在虛擬機上安裝多種語言運行時時,情況只會變得更糟。
一個簡單的解決方案是將 Node.js 運行時與我們的源代碼一起歸檔到 zip 文件中。然后可以將 zip 文件發送到虛擬機。這樣,虛擬機就可以使用 zip 文件中的本地 Node.js 運行時來運行我們的應用程序。
幸運的是,有一種工具可以讓我們的生活更輕松。
Docker 和容器
如果你對 Docker 不熟悉,可以將 Docker 看作是一種將你的制品 (artifact) 及其所依賴的操作系統以及 Node.js,一起打包進容器鏡像中的方法。
使用容器,我們可以在安裝了 Docker 的虛擬機上部署任何應用程序。
使用 Docker,我們的流程將如下所示:
容器不僅僅能做到這些,但這卻是容器能如此流行的重要原因之一。
Docker 對比容器
讓我澄清一下,Docker 和容器并不是同一個東西。
Docker 是一組實用工具,用于構建和運送容器鏡像,以及使用容器運行時 (如 containerd) 來運行容器。
考慮到最近發生的事件,許多人對 Docker 的未來感到擔憂。
重要的是要明白,Docker 不會立馬消失,在構建和運送容器鏡像領域,將繼續發揮重要作用。
認真對待 DevOps
我們已經取得了一些重大進展。希望我們能理解 Docker 是如何融入 DevOps 流程中的。
是時候把事情推向下一個層次了。
基于事件的觸發部署
我們的腳本看起來很穩定,但仍然是手動觸發的。
如果我們能,當有人往 GitHub 上推送代碼時自動觸發這個腳本,那不是更好嗎? 換句話說,我們希望基于事件的觸發部署。
GitHub 可以在一組特定的事件上調用 webhook。為了實現這一點,我們需要創建一個簡單的 HTTP 服務器,每當服務器接收到請求時,它就會執行 shell 腳本。我們可以將 GitHub 配置為,當發生 Push 事件時,觸發 HTTP 請求。我們將這個過程稱之為持續部署(Continuous Deployment)。
我們的新流程如下所示:
恭喜你,你剛剛成功創建了一個 CD pipeline。
持續部署是一種軟件,負責將應用程序從 GitHub 之類的東西一直帶到最終部署的目標環境中。
這基本上就是你經常聽到的 CI/CD。當人們談論像 Jenkins 和 CircleCI 這樣的工具時,他們通常指的是 CI/CD。
DevOps 模式
我想你已經找到了一個模式。我們從一個流程開始,找到一個我們不滿意的部分,然后引入一些軟件來簡化或自動化它。
用代碼的方式來操作流程,這就是 DevOps。
引入容器編排
最后讓我們做一個小小的改進。到目前為止,我們一直將應用程序部署在單個虛擬機上。如果我們想將應用程序部署到多個虛擬機或者節點上呢?
實現這一點的最簡單方法是讓 CD Server 通過 ssh 連接到所有虛擬機,并將容器部署到每個虛擬機中。
使用這種方式時,每當虛擬機的數量發生變化時,我們就需要更改腳本。但在真實世界中,我們希望我們的應用程序是可以自動擴縮容的。
更好的方法是創建另一個 HTTP 服務器來跟蹤虛擬機數量的變化。我們可以稱這個服務器為“飛行員(Pilot)”。
此服務器將負責對集群中的各個虛擬機執行健康檢查,以維護活動的虛擬機列表。它甚至可以與云供應商進行通信,使事情變得更加健壯。
Pilot 還將公開一個 HTTP 端點,以接受要生成的容器的詳細信息。然后,它可以與各個虛擬機通信以完成任務。
現在,我們的 CD Server 可以簡單地請求 Pilot,而不是單獨與每個虛擬機通信。
我們的新流程如下所示:
我們將 Pilot 稱為容器編排器。其實這就是 Kubernetes! 你剛剛設計了一個迷你版的 Kubernetes!
另外,Kubernetes 在希臘語中就是 Pilot 的意思。這是不是巧合?
從哪里開始?
我們一起討論了不少工具。這是我的最后一點。有沒有想過為什么 DevOps 的空間如此分散?
如果你仔細想想,有這么多的工具,讓你很難決定:什么是正確的選擇,或者你應該從哪里開始?
每個組織都有自己的做事方式和流程,因而他們使用的工具也不同。你的工作不是找出哪種工具是最好的。你的工作就是找出最適合你的流程。一旦你明白了這一點,這些工具就只需要谷歌搜索了。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。