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