自動化運維經驗談,以及為什麼Docker是革命性的

2022-02-15 01:23:09 字數 2345 閱讀 2691

網際網路+的需要

在資訊越來越繁雜的網際網路時代,公司所執行的專案越來越多,專案相關服務繁多,服務之間存在複雜的依賴關係,運維與管理任務越來越繁重,手工交付需要花費很多的人力與時間,且安全性和時效性均無法保證。對於多資源型分布/分離式部署專案,udeployer應運而生。

隨著企業對版本上線質量和速度的要求越來越高,敏捷開發、devops的接受度越來越高

傳統的交付方式因為專案之間缺少依賴、環境不一致、版本不一致、人為操作失誤等情況使得專案交付過程中問題不斷,而網際網路企業發展節奏快、版本發布頻率高,上線出故障影響面廣、影響度高,因而企業對於敏捷開發、持續整合、自動發布都有強烈的需求。

自動化從構建和測試開始

運維自動化的關鍵在於標準化。當你有乙個成熟的團隊,有標準化的流程,那麼運維自動化就水到渠成了。而如果你什麼都沒有,那就需要先設定優先順序。

我們的目標當然是將所有的流程標準化,而哪些要放在前面做?做起來比較簡單的,和比較重要的。我認為構建和測試的流程是最基本的第一步。這對於交付產品的公司來說容易一些,對網際網路公司來說更複雜一些,而測試比構建也要複雜一些,但這是基礎。構建和測試的流程標準化做好了,就可以準備做自動化的工作了。

不過我見過的很多公司連git都還沒有,仍然在用最原始的ftp push來更新**。我的觀點是,如果你還沒有用上git這樣的工具,那根本就不用考慮什麼自動化的問題,因為條件完全不成熟。

所以,我們假設你的團隊能夠很好的使用git,然後你建立了構建和測試的標準化流程,然後你就可以用工具來實現自動化。這可能是jenkins這樣的工具,不過jenkins比較複雜,如果你只是乙個很簡單的**,那麼自己寫一些指令碼來實現自動化是更合適的。

到此為止,我們說的還不是自動化運維,而是自動化工具鏈。工具鏈就是開發工具鏈,從ide,到**提交,**審查,構建,到測試,仍然屬於開發的範疇。在這之後才是運維的範疇,就是往生產環節部署。

部署

運維自動化最關鍵的部分是執行環境的定義。我們的目標是讓各個階段的**完全一樣,即開發者在自己筆記本上寫的**,到整合階段的**,到線上環境的**,都是一致的。為什麼docker這麼火,就是因為它幫助開發者很簡單的就讓自己的開發環境跟生產環境一致。環境的標準化,意味著目錄、路徑、配置檔案、儲存使用者名稱密碼的方式、訪問許可權、網域名稱等種種細節的一致和差異處理的標準化。這涉及到很多方面,也是自動化運維最困難的一部分。

這裡要注意的是,像puppet這樣的工具並不是魔法。你需要自己為你的環境定義一套描述的方式,工具是無法為你完成這項工作的。無論是puppet還是jenkins,都是根據你的定義來管理你的環境。你決定使用者名稱和密碼如何儲存,你決定配置檔案的路徑。開發者很喜歡把各種配置和url之類的引數硬編碼到**裡,這很快;他們還喜歡東搞西搞的用一些亂七八糟的手段讓軟體通過測試,但是如果要構建乙個真正的系統,這些小把戲根本沒用。你必須強迫他們採用標準的方式寫**,比如強制他們把使用者名稱和密碼寫在固定的地方,然後你才能跟puppet說,配置檔案在這裡,測試環境用這個配置,生產環節用那個配置。到這裡就很簡單了。

線上環境問題排查

對於線上環境的問題發現與解決,大部分基礎的問題都能用工具來自動發現並提醒,比如磁碟空間不夠,比如mysql崩潰,比如訪問**的時候出現錯誤頁面等等,有很多現成的工具可以抓到它們錯誤的資訊。

比較困難的是排查**為什麼變慢這樣的效能問題。我們經常看到客戶的開發團隊提交新**後引入問題。在測試做得不好的時候這很常見,事實上很多東西是很難測試的,尤其是效能;而網際網路公司又尤其沒有測試的文化,網際網路開發人員大多關注特性的實現,而不像傳統企業級開發那樣有很多測試的工具和流程。

理想的情況下,每個人提交**前都應該測試。但既然反正也沒人這樣做,那麼用工具來幫忙還是很有用的。比如new relic這樣的工具就很強大,它可以發現**層面的問題。我們有時候也用我們的工具幫客戶做測試,包括負載測試。效能測試是挺困難的一件事,既不容易用起來,也不容易讓別人用起來,一般來說你需要乙個專門的團隊才能做效能測試,但網際網路公司基本沒有(除了google、facebook這樣的),就算想有也找不到人。所以要善用工具。

docker的意義

docker很有意思,很火,很新,當然也很多問題。它目前沒多少大型部署案例,所以人們不斷的發現問題也是很正常的事情。

總體來說,docker是乙個對開發者非常友好的東西:簡單的實現不同機器上的環境標準化,可以輕鬆拿來拿去,而且在不同的雲平台上都支援。而把docker用起來對運維而言則是很大的挑戰,我們幫乙個客戶做乙個規模較大的docker部署,乙個有經驗的devops團隊也花費了幾個月的時間。為什麼?

推薦閱讀:

docker swarm 搭建及跨主機網路互連案例分析

教你分分鐘搞定docker私有倉庫registry

使用spring cloud和docker的微服務架構

自動化運維為什麼是必須的?

運維團隊負責最大限度提高效率 降低成本,這也意味著他們往往承受著巨大的壓力,需要解決在不增加員工的情況下,最大限度產出價值的問題。達成這樣的要求,僅靠人工是很難的,採用自動化運維則是靠譜的選擇。我們不妨總結一下自動化運維帶來的好處 消除無效率 運維工作的手動工作,如果可以實現自動化,將顯著提公升效率...

什麼是運維自動化

運維自動化是指將it運維中日常的 大量的重複性工作自動化,把手工執行的工作,通過梳理分析,進行邏輯分解,借助平或工具轉為自動化操作。自動化是it運維工作的昇華,it運維自動化不單純是乙個維護過程,更是乙個管理的提公升過程,是運維的更高層次,也是未來的發展趨勢。1 版本控制 git svn 等 2 部...

什麼是運維自動化 左撇子

什麼是運維自動化?運維自動化是指將it運維中日常的 大量的重複性工作自動化,把手工執行的工作,通過梳理分析,進行邏輯分解,借助平或工具轉為自動化操作。自動化是it運維工作的昇華,it運維自動化不單純是乙個維護過程,更是乙個管理的提公升過程,是運維的更高層次,也是未來的發展趨勢。運維自動化常用工具介紹...