如何才能成為一名優(yōu)秀的 DevOps 工程師?
就目前的IT市場而言,DevOps領域是IT從業(yè)者薪資和職業(yè)發(fā)展的最佳選擇之一。也因此,我經常會被問到的一個問題就是:"如何才能成為一名DevOps工程師?"在本博客中,我將嘗試用自己在不同組織中實踐DevOps的經驗來回答這一問題。
現(xiàn)在,業(yè)界的每個人都習慣用"DevOps工程師"這個術語,但只要你理解了DevOps的理念,就會發(fā)現(xiàn)關于DevOps的真正含義有很多誤解。其中一個誤解是"自動化就是DevOps"。要想成為DevOps工程師,僅僅掌握自動化相關的技能是不夠的。
維基百科上提到:
DevOps(開發(fā)和運維的縮寫)是一種文化、運動或實踐,它強調軟件開發(fā)人員和其他信息技術(IT)專業(yè)人員的協(xié)作和溝通,同時自動化軟件交付及基礎設施變更的過程。
從上面的定義來看,很明顯DevOps與任何工具或技術無關。這是一種理念,讓不同的IT團隊一起協(xié)作,通過持續(xù)反饋來更好更快地交付成果。
下面是一個有趣的趨勢圖,它顯示了過去五年DevOps受歡迎的程度。
從工具的角度來看,對系統(tǒng)、自動化工具、CI工具、版本控制系統(tǒng)、網絡以及對使用項目管理工具[1]的經驗有很好的理解,將能鋪平DevOps采用的道路。
此外,團隊設計的管道也應該在沒有太多人工干預的情況下交付小的更新或發(fā)布。只有當團隊工作方式發(fā)生文化的轉變時,這種情況才會發(fā)生。例如,自動化重復的任務,并將更多的時間花費在創(chuàng)新和工程上。
在成為一名DevOps工程師之前,你必須要了解這樣一個事實:DevOps并不是特定于開發(fā)人員或系統(tǒng)工程師的。它是為那些對不斷發(fā)展的實踐、技術充滿熱情并愿意在一個協(xié)作的環(huán)境中工作的人準備的,在這個環(huán)境中,一切都是自動化的。
下面,我將向你具體分享如何成為一名DevOps工程師。
注意:在這篇文章中,我介紹了許多垂直領域。初學者不可能樣樣精通。然而,擁有這些領域的大量知識將有助于你成為一名DevOps工程師。
1.了解DevOps文化
要想成為一名DevOps工程師,首先要做的就是了解DevOps文化:不同團隊為了共同目標而共同協(xié)作。換句話說,不同的IT團隊之間不應該有任何相互指責的文化。
在使用DevOps工具集之前,IT領導及決策者應該確保整個團隊都得到了DevOps實踐文化方面的指導,這樣可以避免團隊中的許多混亂。一旦大家了解到項目的交付出現(xiàn)延遲或問題時,參與項目的每個人都應負同樣的責任,這樣大家就會停止隱藏事實,并且不再因為任何問題而責怪他人。
一旦你實踐了DevOps文化,你就不會再說"CI/CD和自動化就是DevOps了"。
2.學習*nix系統(tǒng)
我們所處的時代離不開Linux/Unix系統(tǒng)。你應該更好地理解和使用各種組織(RHEL、Centos、Ubuntu、CoreOS等)都高度使用的Linux發(fā)行版本知識。
根據Linux基金會的案例研究[2],90%的公共云工作負載運行在Linux上。
下面是來自Redhat的另一個有趣的研究,它展示了在公共云中使用的不同Linux發(fā)行版本。
現(xiàn)在已經有足夠的理由來說明你為什么應該專注于Linux了。
需要注意的是,GUI在*nix世界中并不太受歡迎。你可以使用虛擬機(Virtualbox)[3]或AWS/GCP/Azure來啟動Linux服務器。
具體來說你可以從以下幾點內容開始學起:
- 了解Linux的啟動過程
- 安裝和配置Web服務器(Apache、Nginx、Tomcat等),并學習Web服務器的工作原理。
- 學習Linux進程的工作原理。
- 學習SSH的工作原理。
- 學習不同的文件系統(tǒng)。
- 學習卷(Volume)在Linux中的工作方式。
- 學習有關系統(tǒng)日志、監(jiān)控和故障排除的信息。
- 學習重要的協(xié)議(SSL、TLS、TCP、UDP、FTP、SFTP、SCP、SSH)
- 學習管理服務,并嘗試自己創(chuàng)建服務(Initd、Systemd)
- 在Web服務器上托管靜態(tài)/動態(tài)網站。
- 設置負載均衡器和反向代理(Nginx、HA代理等)
- 搞一些破壞,并學習故障排除。
3.了解基礎設施組件的工作原理
任何組織的基礎構件都是其基礎設施,它可以是云上也可以是內部的數據中心。
對于想要在DevOps環(huán)境中進行實踐或工作的人來說,必須要全面了解基礎設施的組件。如果你對以下的內容有一個基本的了解,對你來說將會有所幫助。
4.獲得云上認證
當我說"獲得認證"時,請不要使用考試題庫來通過認證,因為它給你帶來的價值要少得多。對于組織來說,向客戶展示他們擁有經過認證的云工程師可能會很有用。
目前,AWS占有大部分的公共云市場份額。這是來自Businesswire的報告[4]。
選擇任何一種公共云(最好是AWS),并了解其所有的核心基礎設施服務,親身體驗所有的核心服務并了解它的工作原理。
觀看AWS重新發(fā)明的視頻[5],了解其他組織是如何使用AWS服務托管其應用程序的。相信我,你會從這些視頻中學到很多東西,并且也沒有哪個線上培訓能提供這么多關于如何在AWS上運行生產工作負載的信息了。此外,如果你打算獲得GCP認證,請觀看谷歌Next視頻[6]。
5.學習自動化
當前,自動化已經成為每個組織的重要方向之一。根據Redhat的一份報告[7],許多組織都在投資他們的自動化計劃,以下這些數據可以證實這一點。
從配置服務器、應用程序配置、部署,一切都應該是自動化的。你可以學習以下任何滿足你需要的DevOps工具集[8]。
6.容器、分布式系統(tǒng)及服務網格
容器的使用越來越廣泛,即便你所在的組織可能現(xiàn)在還沒有使用容器,你最好也要掌握像Docker這樣的容器技術的實際操作知識。這能使你在同行中獲得一些競爭優(yōu)勢。一旦你掌握了Docker[9],你就可以嘗試使用它的集群和編排工具,如Kubernetes[10]、DockerSwarm等。
下面是來自Datadog[11]的一個有趣的Kubernetes使用趨勢。
以下是Kubernetes五年來不斷增長的搜索趨勢。
另外,許多工程師對學習Kubernetes也表現(xiàn)出了興趣。2021年將會有許多工程師獲得Kubernetes(CKA、CKAD和CKS)認證[12]。
在分布式系統(tǒng)領域內,服務網格(ServiceMesh)[13]是一個高級主題。如果你是容器工具集的初學者,那么你可以在充分了解基于微服務的架構之后再學習它。
7.日志與監(jiān)控
日志和監(jiān)控是基礎設施的基本方面。部署在基礎設施中的大多數應用程序都將生成日志和度量指標?;诩軜嫼驮O計,日志被推送并存儲在日志基礎設施中。
每家公司都會有一個日志和監(jiān)控基礎設施。常用的日志棧是Splunk和ELK。此外,也有少量的像Loggly這樣提供日志基礎設施的SaaS公司。對于監(jiān)控,有諸如Prometheus[14]、Nagios之類的開源工具和諸如AppDynamics、Datadog[15]、SignalFx之類的企業(yè)工具。
開發(fā)人員、運維團隊和安全團隊使用日志系統(tǒng)來對應用程序和基礎設施進行監(jiān)控、故障排除和審計。此外,對于AIOps,日志數據也起著關鍵作用。
在每個組織中,使用監(jiān)控儀表板對任務關鍵型應用程序進行24/7全天候監(jiān)控。通常,儀表板使用來自日志源的數據或應用程序生成的度量指標。此外,還會在監(jiān)控系統(tǒng)中配置報警規(guī)則以搭建報警系統(tǒng)來進行報警。
例如,報警可以觸發(fā)Slack通知、Jira通知單、電子郵件報警、ServiceNow故障通知單或xMatters電話。報警工作流因組織而異。
作為一名DevOps工程師,你應該能夠在非生產(non-prod)和生產(prod)環(huán)境中查看日志并進行故障排除。此外,了解正則表達式對于在任何日志工具中查詢日志都非常重要。
8.了解安全的最佳實踐(DevSecOps)
DevSecOps是在DevOps的每個階段集成安全實踐的另一個領域。
維基百科中提到:
DevSecOps是DevOps的一個擴展,允許將安全實踐集成到DevOps方法中。傳統(tǒng)的集中式安全團隊模型必須采用一個聯(lián)合模型,允許每個交付團隊能夠將正確的安全控制因素考慮到他們的DevOps實踐中。
2020安全調查顯示,不同地區(qū)存在不同的網絡攻擊。
??
在云環(huán)境中,加密挖掘是一種常見的攻擊。這種情況通常發(fā)生在云訪問密鑰維護不當,從而使黑客能夠訪問它。當談到DevOps時,應用程序和基礎設施組件的密鑰管理應該遵循標準的安全實踐。
下圖展示了Redhat發(fā)布的主要DevSecOps標準實踐。
圖片來源:Redhat.com
9.學習編碼和腳本
為了更好地協(xié)作,你需要盡可能地了解開發(fā)人員的世界。要想做到這一點,你需要先了解一個典型的開發(fā)流程是如何工作的。這意味著,你要對編程、API等有一個很好的理解,因為它們能幫助你更好地進行故障排除和協(xié)作。
我的建議是選擇一種編程語言,從頭開始構建一個應用程序。在此過程中,你將了解應用程序開發(fā)所涉及的流程和組件。一旦你了解了這一點,你就可以有效地與開發(fā)人員和其他團隊進行互動了。
而且,在當今世界,我們把一切都當作代碼。即使有足夠的工具來自動化一切,你可能仍需要一些工具所不能提供的自定義功能。在這種情況下,編碼/腳本可以方便地實現(xiàn)這些功能。例如,Jenkins管道即代碼(JenkinsPipelineAsCode)需要理解Groovy,Ansible自定義模塊需要理解Python,編寫Kubernetes操作需要有Golang經驗。
你可以學習以下常用的腳本語言:
- Bash/Shell
- Python
- Golang
其中,Golang在DevOps領域非常流行?,F(xiàn)在很多DevOps工具都是使用Golang完成的。事實上,像Kubernetes、Terraform這樣的工具都是用Go編寫的。
JFrog在GopherCon期間調查了Golang的使用情況,有18%的受訪者表示他們在DevOps相關的工作中使用了Golang。
10.學習Git及相關文檔,了解GitOps
Git是很好的版本控制工具,Git上有很多可用的教程,能幫助你縮短學習時間。你可以從GitHub或Bitbucket作為你的遠程代碼庫開始。
注意:Git分支策略是任何應用程序發(fā)布過程的一個重要方面。
一旦你理解了Git,就可以學習GitOps了。
那么,GitOps到底是什么呢?這是gitops.tech給出的關于GitOps的解釋:
GitOps是一種為云原生應用程序實現(xiàn)持續(xù)部署的方法。它通過使用開發(fā)人員已經熟悉的工具(包括Git和持續(xù)部署工具),在操作基礎設施時,重點關注以開發(fā)人員為中心的體驗。
你需要記錄你所做的每件事,每個存儲庫都必須有一個README文件,該文件能夠以更好的方式解釋你的代碼。好的文檔不僅對你有幫助,而且對嘗試使用你的代碼的人也有幫助。
11.了解端到端應用程序交付生命周期
當談到應用程序交付生命周期時,有三個重要的概念需要注意:
- 持續(xù)集成(ContinuousIntegration)
- 持續(xù)交付(ContinuousDelivery)
- 持續(xù)部署(ContinuousDeployment)
你需要學習使用CI/CD工具,如Jenkins、TravisCI、GoCD等。
下面是來自bmc的一個很好的CI/CD流程示意圖。
12.DevOps與SRE
SRE是DevOps社區(qū)中另一個不斷發(fā)展的主題。
SRE是谷歌提出的一系列實踐和理念。以下是谷歌對DevOps和SRE的說明:
DevOps和SRE并不是兩種相互競爭的軟件開發(fā)和運維方法,而是旨在打破組織障礙以更快地交付更好的軟件的密友。
如果你想進一步了解SRE,可以閱讀下面這些官方文檔:
- 什么是SRE?
- SRE與DevOps的關系
- SRE與DevOps:相互競爭的標準還是親密的朋友?
13.不同類型的 "DevOps團隊"
如今,每個組織都將與基礎設施/CI-CD打交道的人稱為“DevOps工程師”,并使他們成為“DevOps團隊”的一部分。然而,他們的職責卻因所在團隊而異。對于“DevOps工程師”來說,有一種誤解認為“他們要對一切負責”。但其實這句話可能只適用于小型團隊。
實際上,如果你被聘為“DevOps工程師”,那么你可能屬于組織中如下的任何一個團隊。
- 中臺團隊(CentralPlatformTeam):負責按需提供基礎設施。他們不負責應用程序,而是負責底層平臺。通過持續(xù)的平臺支持和監(jiān)控來確保生產系統(tǒng)24×7全天候可用。此外,他們將致力于新的工具和自動化,以滿足未來的需要。這個團隊的最終用戶將是開發(fā)或AppOps團隊。所以它更多的是共同責任。
- DevOps團隊:雖然"DevOps團隊"沒有任何意義,但是組織用它來命名運維團隊。這個團隊通常與開發(fā)人員密切合作,并為多個開發(fā)團隊提供服務。他們負責端到端的應用程序交付。
- AppOps團隊:這個團隊是特定工程團隊的一部分,在一個對特定領域有很好了解的組織中,與特定項目密切合作。例如,支付團隊。該團隊負責部署和管理支付應用程序。平臺管理將由中臺團隊或DevOps團隊負責
- SRE團隊:該團隊負責自動化、可用性、延遲、性能、效率、變更管理、監(jiān)控、應急響應和容量規(guī)劃。他們與開發(fā)人員密切合作,解決運維問題。該團隊由具有開發(fā)背景的基礎設施工程師組成。
- 專門的支持團隊:支持團隊負責解決/處理生產支持問題,并根據嚴重程度指導相應團隊的問題解決。
14.閱讀,閱讀,再閱讀
沒有什么比讀書更能獲得知識的了,要想成為DevOps工程師,至少需要閱讀一篇與工程相關的DevOps技術博客。此外,你也可以關注所有工程博客,如Netflix、Twitter、Google等,了解他們是如何使用正確的工具集的,以及他們的部署策略和最新的開源項目。也可以在LinkedIn、Reddit、Medium、Quora等網站上關注志趣相投的人。
資源:
最佳DevOps博客和資源列表[16]
15.寫博客
你可以在博客上發(fā)布教程、學習內容和經驗。這種方式可以幫助到別人,也能為自己創(chuàng)造個人品牌。建立一個WordPress博客或Medium博客只需不到30分鐘的時間。每當你學到新東西,你都可以寫下來。這對你和其他人都是一個參考。
結論
DevOps中涉及的工具和流程并不僅限于本文中所提到的內容。不過,這些都是常用的開源工具和技術,你可以從它們開始,成為DevOps工程師。