作爲離“全棧”最近的DevOps人員,我們都該做些什麼?

在本文中,我主要解釋解釋自己的日常工作有哪些內容。順帶一提,我在這一行做了快三年的顧問,但從來沒有認真定義過自己的工作內容和角色定位。

DevOp作爲一個術語,承載着非常廣泛的含義,不同的人或者組織而言對此也有着不同的理解方式。所以我不敢妄言DevOps工程師的所謂規範定義,或者是將其嚴格限定爲某種工作角色/職位或者文化運動。

個人動機

之所以想起寫下這篇文章,是因爲有時候我發現自己也鬧不清在工作裏到底做了什麼。因爲我不是什麼Java專家、不是一線開發者、不是系統管理員,也不同於大家所熟知的任何常見角色。另外,我甚至很難被準確劃入任何一個嚴格限定的知識領域/單一專業方向(在這方面,我可能跟系統管理員有點類似)。

我在Reddit網站的DevOps頻道中看到過一篇文章,受此啓發,我想試試能不能通過一篇博文說清自己的工作到底是什麼。好了,下面進入正題。

作爲DevOps顧問,我到底在做什麼

背景說明

在正式加入目前這家公司之前,我曾在IT領域擁有一些短期從業經歷——前後大約7個月。在這輪夏季實習當中,我拿出了4個月左右積累自己的全棧開發經驗,包括使用APS.NET框架以及Razor後端模板,外加kickout.js以及使用svn作爲SCM等等。在此之後,我把另外3個月花在初級研究員職位上。最終與虛擬化建立關聯,是在一個研究項目當中,當時我們利用西門子的Jailhouse項目探索虛擬化技術在RTOS中的影響。該項目能夠提供虛擬化單元(這是我們自己起的名字),用以訪問無法在其它單元之間共享的硬件。這是我第一次接觸管理程序,瞭解它們的類型以及工作方式。在後來真正走上DevOps/基礎設施崗位之後,憑藉着實際體會,我堅信虛擬化將成爲其中的關鍵概念。

我的DevOps發展路線圖

目前,我在一家諮詢企業負責改進開發流程與工作流程,我們通過基礎設施自動化與整體思維方式的轉變幫助IT企業客戶改善組織流程。

自從接觸工業物聯網環境以來,我獲得了更靈活的施展空間,包括隨意選擇語言、框架——總之,只要對業務架構以及業務需求具有實際意義,我都可以做出自己的決策。

在項目當中,我最終使用python配合flask,這也是我第一次接觸Docker;此外,我還負責管理網絡、工業協議、面向arm設備的交叉編譯、RAM資源優化,以及思考如何加強軟件項目對物理環境下各類挑戰的抵禦能力(例如斷電、網絡中斷等)。與此同時,我還利用Open ERP開發出一個內部項目(名爲ODOO),並利用Python腳本對其進行自動化配置(ODOO同樣使用Python編寫而成)。

從這裏開始,我轉向諮詢崗位,並由此接觸到配置管理以及Ansible。此外,我還利用Vagrant配合LXC(而後轉向Docker)以及Ansible配置機制,確保不同開發結果能夠在開發人員的機器上擁有相同的運行狀態。

配置管理

很多朋友可能擁有配置管理經驗。但爲了避免沒接觸過這方面工作的讀者搞不清狀況,這裏我多解釋幾句。在編寫這類任務時,我們需要擁有完整的基礎設施與開發環境,同時具備操作系統知識、瞭解其特性、熟悉其腳本(從bash等powershell等等)。而最重要的,無疑是軟件架構的全面知識,這是一切DevOps崗位的必然要求。另外,熟悉最新工具——雖然簡歷裏說要求什麼五年的工具使用經驗,但實際上好多工具正式推出才一年左右。當然,大家明白其中的意思就行,包括熟知軟件應該如何工作、瞭解其已知模式以及工具語法等。

由於DevOps崗位跨越整個組織結構,因此我們必須同時瞭解如何編程、瞭解網絡原理、瞭解虛擬化知識、瞭解軟件等等。在日常工作當中,我還把很大一部分時間投入到代碼粘合當中。

CI/CD

使用CI/CD(持續集成/持續交付)工具,並在源代碼管理方面獲取IAC(基礎設施即代碼)以及應用程序代碼。爲了實現這一點,我需要經常用到git以及大量相關工作流程,同時利用groovy構建同事們易於理解的yaml配置,進而實現Jenkins的自動運作與配置。這實際是DevOps工作中的一大日常組成部分,雖然我已經不再像過去那樣經常使用Ansible,CI/CD工具及其流水線仍是個需要經常複習提升的技術方向。

安全與訪問控制

最後,我還經常需要面對身份驗證、授權、使用LDAP、Keycloak(及其所有集成,、SAML、Oauth等);雖然有很多替代性工具,但Keycloak仍然非常重要。畢竟三個A(即授權、認證與訪問管理)解決方案,特別是keycloak,絕對是一類不可或缺的常備工具。

基礎設施即代碼

除了Docker、Vagrant以及Ansible等,我最近也開始拉鉤eTerraform,並短暫使用過一陣子DloudFormation。而且除了使用ESXi的內部環境之外(我還沒對其進行自動化升級),總有某些雲基礎設施需要實現自動化,在這方面我的職能角色開始變得比較模糊。不少企業需要Terraform專家,或者是Azure DevOps管理員乃至AWS負責人之類;但這些都不是最重要的,這些具體的某一種技能不會是DevOps職位的全部。否則,我們需要的只是Terraform專家/Azure管理者這類類似於雲系統管理員的職位,而不是真正的DevOps角色。

負載均衡器與反向代理

再有,大家應該熟悉Nginx、HAProxy或者Traefik的配置方法,及其實例(Docker或其它)格式或安裝技能。我曾經配置過不少負載均衡器,大多數作爲反向代理使用,但我目前還沒遇到過成規模的ELB或者是其Azure配置任務。

哦,對了,在這方面,證書管理也是一類躲不開的常見工作。

應用程序開發

最後但同樣重要的,自然就是開發工作了。我目前在使用Java與JavaScript進行全棧開發。我認爲作爲一名DevOps人員,再加上完整解決方案這一需求背景,我必須成爲一名出色的工程師加程序員。畢竟DevOps的原則就是“誰構建,誰運行”——也就是說,我需要編寫應用代碼行、支持基礎設施代碼、打理負載均衡器、完成應用程序的部署與QA流水線構建工作。

數據庫

好吧,差點忘了數據庫這碼事。ElasticSearch、PostgreSQL、MySQL等都很常見。雖然我不是什麼數據庫管理員,但最終還是得接手相關配置工作,包括管理其連接、ACL、備份等等。當然,我還遠遠稱不是SQL專家,而且也會盡量避免在數據庫或者AWS專家這些方向上把路走窄。

員工心態

到目前爲止,我已經談到很多語言與不同的環境。但在大多數情況下,除了編碼工作之外,我還是得跟同事們打交道。我的一部分重要工作,就是幫助其他工程師建立起DevOps思維模式、簡化工作內容、讓他們的生活更輕鬆並在整個組織之內運行他們的應用程序,最終彌合開發人員與運營團隊之間的差距。

內容總結

如果大家不想浪費時間從頭讀下來,那一句話總結:DevOps人員,需要什麼技術都懂一些。正因爲如此,DevOps有時候會被稱爲萬金油或者架構大師。當然,我覺得自己完全稱不上什麼大師,在成長方面還有很長的路要走。

希望大家喜歡這篇文章,也希望它能幫助大家解決“DevOps人士到底在做些什麼”這個難題。當然,如果各位已經是這個崗位上的一員,那麼您可能正與我經歷類似的工作體驗。

感謝大家的寶貴時間和耐心:)

下面是我整理出的,優秀DevOps人士的發展路線圖:

原文鏈接

What do you do as a DevOps?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章