每个 DevOps 工程师都应该具备的 5 项技能

從技術層面來看,要成為一位現代的 DevOps 工程師,其職責可說是相當複雜。

這要求您熟悉多種常見的程式語言,例如 Node.js、批次處理腳本、Python 或 Shell 腳本。另一個期望是了解如何將自動化測試整合到部署流程中。

作為自動化管道的程式碼整合者,您至少需要對各種雲服務的基本功能有所了解。

儘管技術如此複雜,但技術技能往往並非 DevOps 工程師最欠缺的技能。儘管人們認為掌握技術技能至關重要,但從真正的 DevOps 從業人員收集到的各種見解表明,他們的軟技能往往更為重要。

重要的 DevOps 技能

來源: devopsuniversity.org

觀察 DevOps 工程師在 Scrum 團隊中的互動通常是相當有趣的。大多數時候,他們對團隊其他成員正在實施的故事的具體內容知之甚少,這僅僅是因為涉及團隊故事內部特定功能時的技術資訊。

然而,他們需要能夠將團隊的輸出合併到一個可行的部署管道中,同時執行和驗證各種自動化測試。

這就是僅僅身為一位基層技術專家已經不夠的地方。溝通正在成為成功的關鍵要素。因此,讓我們來探討一下所需的最重要 DevOps 技能。

軟技能

確實,敏捷團隊內部的協作與討論是軟技能的不足成為 DevOps 技能首要原因的主要因素。 如果您仍然想知道原因,以下是一些最合理的論點:

  • 如果 DevOps 工程師無法適應開發團隊的其他成員,就無法高效工作。該團隊正在構建軟體或平台功能的基礎。 DevOps 工程師需要為這一切創建一個即時環境並使其運作。
  • 除了與自己的開發團隊保持同步之外,他們還是努力訪問軟體平台的外部利害關係人的關鍵聯絡人。他們必須能夠理解此類請求,並將自動化雲端環境的所有技術複雜性轉換為非技術等價物,以便利害關係人能夠真正理解它們。並成為開發團隊與外部利害關係人之間的最終中間媒介。
  • 雖然您通常可以建立一個學習系統來獲得特定的技術技能,但要成熟掌握正確的軟技能需要您更深入地了解自己的誠信和個性。學習如何從另一個角度及時審視自己並找出需要成長的領域。這並非每個人都能輕易做到。

網絡

當您審視現代雲平台之技術前景時,您很快就會迷失方向。您需要應對檔案系統服務、多個資料庫服務、後端 API、伺服器或無伺服器架構、前端服務、機器學習模型、混合環境、虛擬專用網路、高可用性負載平衡器、各種即時串流服務以及其他更多。

不可能了解所有事情。但 DevOps 工程師絕對需要知道如何將所有這些連接到一個可運作的軟體平台中。建立強大的網路社群至關重要。

在分散式系統的溝通簡單性與有效性之間找到最佳平衡點,是他們需要意識到並準備為團隊提供解決方案的挑戰。

通常,只有當您開始更認真地處理平台的安全問題與挑戰時,您才會知道您正在構建的基礎設施已經足夠成熟。你猜怎麼著——這又是 DevOps 工程師的範疇。

您需要不斷尋找新的聯絡人,以滿足您的團隊剛剛請求的新服務,而不是堅持使用經過驗證的舊聯絡人。

軟體測試

尤其是在敏捷世界中,軟體發布的靈活性至關重要。您可能會設定為期兩週的衝刺 Scrum。然後,預期每兩週發布一次新產品。

如果您考慮包括規劃、估算、開發、測試和發布的整個專案生命週期,那麼如果沒有盡可能地將這些步驟嚴格自動化,您就不可能實現此目標。

此設定成功的首要前提(並最終加快部署至生產環境的時間)是高度關注測試自動化。更快的部署和自動化測試可以縮短用戶向開發人員提供回饋的時間。

對於 DevOps 工程師來說,這意味著將各個測試團隊的輸出整合到 CI/CD 管道中:

  • 在每次提交儲存庫之後啟用單元測試腳本的執行。如果它們不存在,請與開發人員協商建立它們。
  • 將整合測試案例納入部署到完全整合且一致的測試環境的 CI/CD 管道中。在開發團隊正在使用的每個開發環境上執行整合測試是毫無意義的。整合測試案例必須在所有服務部署的環境中完美運行,且資料一致。
  • 將真實世界的端對端測試案例合併到 CI/CD 管道中。使其成為在整合測試或用戶驗收測試環境中每次主要程式碼部署的強制運行。這確保了所有重要和關鍵的業務流程都可以順利運行。

以不過度但涵蓋所有關鍵流程的方式編寫有效的測試案例是另一個需要掌握的挑戰。DevOps 工程師不一定需要獨自一人處理此處。

業務分析師或品質保證經理可以成為網路的一部分(如果不是直接成為團隊的一部分)來協助解決此問題並定義確切步驟。但 DevOps 工程師的職責是將其轉換為自動化的可執行程式碼。

CI/CD 與基礎設施即程式碼

我們已在好幾個地方談論過它。儘管如此,不可否認的是,IaC(以及隨後通過 CI/CD 管道執行)是 DevOps 工程師的主要產出。這是開發團隊的所有輸入(以各種服務功能的形式)與一些實際的基礎設施環境連接在一起的地方。然後,它們形成可重複部署到不同環境的可用軟體即服務輸出。

難怪這是每位 DevOps 工程師所面臨的主要挑戰之一。更重要的是,如果要求保持與雲端無關,這通常意味著使用 Terraform 語言編寫 IaC 並確保程式碼不包含特定於雲端供應商的細微差別。經驗清楚地表明了這一點。即使對於經驗豐富的工程師來說,切換到與雲端無關的基礎設施程式碼腳本可能也是一項非常困難的任務。

僅使用手動部署步驟來維護雲端基礎設施是完全不可能的。在內部部署期間,這是標準。但同樣,它是通過瀑布式工作方式交付的堅如磐石的標準。在敏捷環境中手動部署是沒有生存機會的。必須進行轉變,而這幾乎總是痛苦的。

但一旦正確完成,您就成功了。

  • 需要生產部署嗎?只需執行包含部署到生產環境的程式碼的發布管道即可。
  • 您是否需要另一個開發環境,以免與團隊內的其他開發工作重疊?然後,找到開發管道並點擊「執行」按鈕。所有開發基礎設施都將自動執行和建立,包括測試資料。
  • 一旦不再需要環境存在,同一開發管道就可以對先前部署到該環境的所有服務執行銷毀命令。

對於成功的敏捷團隊來說,將基礎設施實施為程式碼並將其放置在可以隨時隨地完成工作的 CI/CD 管道中是不可避免的。DevOps 工程師隨時提供服務。

容器化

來源: aws.amazon.com

在大型專案中,快速複製的可能性至關重要。如果沒有容器化環境,同時建立數百個相同環境的副本是不可能的。容器化是一項需要陡峭學習曲線的技能。這也是為什麼只有少數專案真正認真使用它的原因。

容器伺服器是一個範本,可以根據需要經常應用,並且輸出始終是相同的。相同的基礎設施和相同的資料。這是只有 DevOps 工程師才能為團隊構建的資產。他們需要學習如何使用不同的工具來建立它。

容器被設計為易於建立和銷毀。DevOps 工程師應實作容器編排工具,例如 Kubernetes 或 Docker Swarm,它可以自動管理容器的部署、擴展和恢復。

容器共享相同的主機作業系統。如果一個容器受到損害,它可能會損害同一主機上的其他容器。此外,如果容器是從第三方映像建立的,則這些容器的程式碼中可能包含漏洞。DevOps 工程師應努力實作容器隔離、存取控制和漏洞掃描等安全功能來降低這些風險。

可擴展性是容器的另一個原生屬性。您可以輕鬆地水平擴展它們以處理增加的工作量。這可能會導致資源爭用和效能問題。DevOps 工程師應實作 cgroup 或 Kubernetes 資源配額等資源管理工具,這可以限制每個容器可以消耗的資源數量。

DevOps 工程師必須考慮安全性、可擴展性和彈性來實作容器化。在所有其他技術技能中,掌握容器化需要特別陡峭的學習曲線。複雜性太高了。這也是為什麼只有少數專案真正認真使用它的原因。

結論

DevOps 從業者是敏捷團隊中獨特的成員。整個專案中可能只有一兩個,但即便如此,它們對於成功至關重要。

對 DevOps 工程師的期望很高,因為他們需要同時扮演多個角色:

  • 他們必須是實力雄厚的技術開發人員,
  • 充滿同理心、理解力和協作能力的團隊成員,
  • 開發團隊與非技術外部利害關係人之間的有效中間媒介,
  • 連接整個團隊的自動化與程式碼測試驗證,
  • 啟用專案的定期發布,
  • 並不斷建立一個日新月異的專家網路。

儘管技術很複雜,但人為因素在任何 DevOps 計劃的成功中都發揮至關重要的作用。如果您即將成為其中一員,您完全有權為自己的決定感到自豪,並從更廣泛的角度看待教育方法,而不僅僅是將自己局限於技術知識。

接下來,請查看常見的 DevOps 面試問題與答案。