如何才能成爲一名 DevOps 工程師?

作者 | Bibin Wilson

策劃 | 凌敏

就目前的 IT 市場而言,DevOps 領域是 IT 從業者薪資和職業發展的最佳選擇之一。也因此,我經常會被問到的一個問題就是:“如何才能成爲一名 DevOps 工程師?” 在本博客中,我將嘗試用自己在不同組織中實踐 DevOps 的經驗來回答這一問題。

現在,業界的每個人都習慣用 “DevOps 工程師” 這個術語,但只要你理解了 DevOps 的理念,就會發現關於 DevOps 的真正含義 有很多誤解。其中一個誤解是“自動化就是 DevOps”。要想成爲 DevOps 工程師,僅僅掌握自動化相關的技能是不夠的。

維基百科上提到,

DevOps(開發和運維的縮寫)是一種文化、運動或實踐,它強調軟件開發人員和其他信息技術(IT)專業人員的協作和溝通,同時自動化軟件交付及基礎設施變更的過程。

從上面的定義來看,很明顯 DevOps 與任何工具或技術無關。這是一種理念,讓不同的 IT 團隊一起協作,通過持續反饋來更好更快地交付成果。

下面是一個有趣的趨勢圖,它顯示了過去五年 DevOps 受歡迎的程度。

從工具的角度來看,對系統、自動化工具、CI 工具、版本控制系統、網絡以及對使用項目管理工具的經驗有很好的理解,將能鋪平 DevOps 採用的道路。

此外,團隊設計的管道也應該在沒有太多人工干預的情況下交付小的更新或發佈。只有當團隊工作方式發生文化的轉變時,這種情況纔會發生。例如,自動化重複的任務,並將更多的時間花費在創新和工程上。

在成爲一名 DevOps 工程師之前,你必須要了解這樣一個事實:DevOps 並不是特定於開發人員或系統工程師的。它是爲那些對不斷髮展的實踐、技術充滿熱情並願意在一個協作的環境中工作的人準備的,在這個環境中,一切都是自動化的。

下面,我將向你具體分享如何成爲一名 DevOps 工程師。

注意:在這篇文章中,我介紹了許多垂直領域。初學者不可能樣樣精通。然而,擁有這些領域的大量知識將有助於你成爲一名 DevOps 工程師。

1 瞭解 DevOps 文化

要想成爲一名 DevOps 工程師,首先要做的就是了解 DevOps 文化:不同團隊爲了共同目標而共同協作。換句話說,不同的 IT 團隊之間不應該有任何相互指責的文化。

在使用 DevOps 工具集之前,IT 領導及決策者應該確保整個團隊都得到了 DevOps 實踐文化方面的指導,這樣可以避免團隊中的許多混亂。一旦大家瞭解到項目的交付出現延遲或問題時,參與項目的每個人都應負同樣的責任,這樣大家就會停止隱藏事實,並且不再因爲任何問題而責怪他人。

一旦你實踐了 DevOps 文化,你就不會再說 “CI/CD 和自動化就是 DevOps 了”。

2 學習 *nix 系統

我們所處的時代離不開 Linux/Unix 系統。你應該更好地理解和使用各種組織(RHEL、Centos、Ubuntu、CoreOS 等)都高度使用的 Linux 發行版本知識。

根據 Linux 基金會的案例研究,90% 的公共雲工作負載運行在 Linux 上。

下面是來自 Redhat 的另一個有趣的研究,它展示了在公共雲中使用的不同 Linux 發行版本。

現在已經有足夠的理由來說明你爲什麼應該專注於 Linux 了。

需要注意的是,GUI 在 * nix 世界中並不太受歡迎。你可以使用虛擬機(Virtual box) 或 AWS/GCP/Azure 來啓動 Linux 服務器。

具體來說你可以從以下幾點內容開始學起:

3 瞭解基礎設施組件的工作原理

任何組織的基礎構件都是其基礎設施,它可以是雲上也可以是內部的數據中心。

對於想要在 DevOps 環境中進行實踐或工作的人來說,必須要全面瞭解基礎設施的組件。如果你對以下的內容有一個基本的瞭解,對你來說將會有所幫助。

4 獲得雲上認證

當我說 “獲得認證” 時,請不要使用考試題庫來通過認證,因爲它給你帶來的價值要少得多。對於組織來說,向客戶展示他們擁有經過認證的雲工程師可能會很有用。

目前,AWS 佔有大部分的公共雲市場份額。這是來自 Businesswire 的報告。

選擇任何一種公共雲(最好是 AWS),並瞭解其所有的核心基礎設施服務,親身體驗所有的核心服務並瞭解它的工作原理。

觀看 AWS 重新發明的視頻,瞭解其他組織是如何使用 AWS 服務託管其應用程序的。相信我,你會從這些視頻中學到很多東西,並且也沒有哪個線上培訓能提供這麼多關於如何在 AWS 上運行生產工作負載的信息了。此外,如果你打算獲得 GCP 認證,請觀看谷歌 Next 視頻。

5 學習自動化

當前,自動化已經成爲每個組織的重要方向之一。根據 Redhat 的一份報告,許多組織都在投資他們的自動化計劃,以下這些數據可以證實這一點。

從配置服務器、應用程序配置、部署,一切都應該是自動化的。你可以學習以下任何滿足你需要的 DevOps 工具集。

6 容器、分佈式系統及服務網格

容器的使用越來越廣泛,即便你所在的組織可能現在還沒有使用容器,你最好也要掌握像 Docker 這樣的容器技術的實際操作知識。這能使你在同行中獲得一些競爭優勢。一旦你掌握了 Docker,你就可以嘗試使用它的集羣和編排工具,如 Kubernetes、Docker Swarm 等。

下面是來自 Datadog 的一個有趣的 Kubernetes 使用趨勢。

以下是 Kubernetes 五年來不斷增長的搜索趨勢。

另外,許多工程師對學習 Kubernetes 也表現出了興趣。2021 年將會有許多工程師獲得 Kubernetes(CKA、CKAD 和 CKS)認證。

在分佈式系統領域內,服務網格(Service Mesh) 是一個高級主題。如果你是容器工具集的初學者,那麼你可以在充分了解基於微服務的架構之後再學習它。

7 日誌與監控

日誌和監控是基礎設施的基本方面。部署在基礎設施中的大多數應用程序都將生成日誌和度量指標。基於架構和設計,日誌被推送並存儲在日誌基礎設施中。

每家公司都會有一個日誌和監控基礎設施。常用的日誌棧是 Splunk 和 ELK。此外,也有少量的像 Loggly 這樣提供日誌基礎設施的 SaaS 公司。對於監控,有諸如 Prometheus、Nagios 之類的開源工具和諸如 AppDynamics、Datadog、SignalFx 之類的企業工具。

開發人員、運維團隊和安全團隊使用日誌系統來對應用程序和基礎設施進行監控、故障排除和審計。此外,對於 AIOps,日誌數據也起着關鍵作用。

在每個組織中,使用監控儀表板對任務關鍵型應用程序進行 24/7 全天候監控。通常,儀表板使用來自日誌源的數據或應用程序生成的度量指標。此外,還會在監控系統中配置報警規則以搭建報警系統來進行報警。

例如,報警可以觸發 Slack 通知、Jira 通知單、電子郵件報警、ServiceNow 故障通知單或 xMatters 電話。報警工作流因組織而異。

作爲一名 DevOps 工程師,你應該能夠在非生產(non-prod)和生產(prod)環境中查看日誌並進行故障排除。此外,瞭解正則表達式對於在任何日誌工具中查詢日誌都非常重要。

8 瞭解安全的最佳實踐(DevSecOps)

DevSecOps 是在 DevOps 的每個階段集成安全實踐的另一個領域。

維基百科中提到:

DevSecOps 是 DevOps 的一個擴展,允許將安全實踐集成到 DevOps 方法中。傳統的集中式安全團隊模型必須採用一個聯合模型,允許每個交付團隊能夠將正確的安全控制因素考慮到他們的 DevOps 實踐中。

2020 安全調查顯示,不同地區存在不同的網絡攻擊。

在雲環境中,加密挖掘是一種常見的攻擊。這種情況通常發生在雲訪問密鑰維護不當,從而使黑客能夠訪問它。當談到 DevOps 時,應用程序和基礎設施組件的密鑰管理應該遵循標準的安全實踐。

下圖展示了 Redhat 發佈的主要 DevSecOps 標準實踐。

圖片來源:Redhat.com

9 學習編碼和腳本

爲了更好地協作,你需要儘可能地瞭解開發人員的世界。要想做到這一點,你需要先了解一個典型的開發流程是如何工作的。這意味着,你要對編程、API 等有一個很好的理解,因爲它們能幫助你更好地進行故障排除和協作。

我的建議是選擇一種編程語言,從頭開始構建一個應用程序。在此過程中,你將瞭解應用程序開發所涉及的流程和組件。一旦你瞭解了這一點,你就可以有效地與開發人員和其他團隊進行互動了。

而且,在當今世界,我們把一切都當作代碼。即使有足夠的工具來自動化一切,你可能仍需要一些工具所不能提供的自定義功能。在這種情況下,編碼 / 腳本可以方便地實現這些功能。例如,Jenkins 管道即代碼(Jenkins Pipeline As Code )需要理解 Groovy, Ansible 自定義模塊需要理解 Python,編寫 Kubernetes 操作需要有 Golang 經驗。

你可以學習以下常用的腳本語言:

其中,Golang 在 DevOps 領域非常流行。現在很多 DevOps 工具都是使用 Golang 完成的。事實上,像 Kubernetes、Terraform 這樣的工具都是用 Go 編寫的。

JFrog 在 GopherCon 期間調查了 Golang 的使用情況,有 18% 的受訪者表示他們在 DevOps 相關的工作中使用了 Golang。

10 學習 Git 及相關文檔,瞭解 GitOps

Git 是很好的版本控制工具,Git 上有很多可用的教程,能幫助你縮短學習時間。你可以從 GitHub 或 Bitbucket 作爲你的遠程代碼庫開始。

注意:Git 分支策略是任何應用程序發佈過程的一個重要方面。

一旦你理解了 Git,就可以學習 GitOps 了。

那麼,GitOps 到底是什麼呢?這是 gitops.tech 給出的關於 GitOps 的解釋:

GitOps 是一種爲雲原生應用程序實現持續部署的方法。它通過使用開發人員已經熟悉的工具(包括 Git 和持續部署工具),在操作基礎設施時,重點關注以開發人員爲中心的體驗。

你需要記錄你所做的每件事,每個存儲庫都必須有一個 README 文件,該文件能夠以更好的方式解釋你的代碼。好的文檔不僅對你有幫助,而且對嘗試使用你的代碼的人也有幫助。

11 瞭解端到端應用程序交付生命週期

當談到應用程序交付生命週期時,有三個重要的概念需要注意:

你需要學習使用 CI/CD 工具,如 Jenkins、Travis CI、GoCD 等。

下面是來自 bmc 的一個很好的 CI/CD 流程示意圖。

12DevOps 與 SRE

SRE 是 DevOps 社區中另一個不斷髮展的主題。

SRE 是谷歌提出的一系列實踐和理念。以下是谷歌對 DevOps 和 SRE 的說明:

DevOps 和 SRE 並不是兩種相互競爭的軟件開發和運維方法,而是旨在打破組織障礙以更快地交付更好的軟件的密友。

如果你想進一步瞭解 SRE,可以閱讀下面這些官方文檔:

13 不同類型的 “DevOps 團隊”

如今,每個組織都將與基礎設施 /CI-CD 打交道的人稱爲 “DevOps 工程師”,並使他們成爲“DevOps 團隊” 的一部分。然而,他們的職責卻因所在團隊而異。對於 “DevOps 工程師” 來說,有一種誤解認爲“他們要對一切負責”。但其實這句話可能只適用於小型團隊。

實際上,如果你被聘爲 “DevOps 工程師”,那麼你可能屬於組織中如下的任何一個團隊。

14 閱讀,閱讀,再閱讀

沒有什麼比讀書更能獲得知識的了,要想成爲 DevOps 工程師,至少需要閱讀一篇與工程相關的 DevOps 技術博客。此外,你也可以關注所有工程博客,如 Netflix、Twitter、Google 等,瞭解他們是如何使用正確的工具集的,以及他們的部署策略和最新的開源項目。也可以在 LinkedIn、Reddit、Medium、Quora 等網站上關注志趣相投的人。

 資源

最佳 DevOps 博客和資源列表

https://devopscube.com/list-of-devops-blogs-and-resources/

15 寫博客

你可以在博客上發佈教程、學習內容和經驗。這種方式可以幫助到別人,也能爲自己創造個人品牌。建立一個 WordPress 博客或 Medium 博客只需不到 30 分鐘的時間。每當你學到新東西,你都可以寫下來。這對你和其他人都是一個參考。

16 結論

DevOps 中涉及的工具和流程並不僅限於本文中所提到的內容。不過,這些都是常用的開源工具和技術,你可以從它們開始,成爲 DevOps 工程師。

原文鏈接:

https://devopscube.com/become-devops-engineer

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/WkQgq_iwyJEBa_uGQVq3sA