你所不了解的DevOps
本文摘自人民郵電出版社非同步社區《DevOps開發運維訓練營》一書,點擊查看http://www.epubit.com.cn/book/details/7709
關注微信公眾號【非同步社區】每周送書
DevOps開發運維訓練營
一旦建立了創新的文化,即使那些並非科學家或者工程師的人——詩人、演員、記者——也能以團體的形式,接受科學文化的意義。他們信奉創新文化的概念。他們以促進這種文化的方式投票。他們不會反對科學,也不會反對技術。
——Neil deGrasse Tyson
在本文中,我們討論如何快速地從更高的層面理解DevOps,介紹準備改變文化的最佳實踐。我們將討論DevOps的目標以及從組織管理層得到支持的方法,為DevOps的概念打下基礎。我們將試著從根本上介紹使應用程序生命期管理簡單、高效的DevOps實踐。
DevOps不是一種框架、工具或者技術,理解這一點非常重要。它更多的是與組織的文化有關。DevOps還是人們在組織中使用預先定義的過程、利用自動化工具,使日常工作更加高效、手工工作更少的一種方法。
為了理解DevOps的重要性,我們在本文中將包含如下主題:
- DevOps的必要性;
- 如何發展DevOps文化;
- PPT(人、過程和技術)的重要性;
- 為什麼DevOps不全和工具有關;
- DevOps評估問題。
1.1 DevOps的必要性
Harriet Tubman有一段名言,可以在http://harriettubmanbiography.com上找到:
每個偉大的夢想都源於夢想家。永遠銘記,你擁有的力量、耐心和熱情,可以令你摘星攬月、改變世界。
改變是生命的法則,也適用於組織機構。如果任何組織或者個人只盯著過去或者現有的模式、文化或實踐,他們就肯定會錯失未來的最佳實踐。在動態的IT世界中,我們必須趕上技術革新的步伐。
我們可以參考喬治?蕭伯納的名言:
不改變就不可能進步,無法改變自己的想法,就不能改變任何東西。
現在,我們關注的是應用程序生命期管理方法的改變。重要的是,我們是否真的需要這種改變?我們是否真的需要經歷改變的痛苦?
答案是肯定的。
人們可能會說,這種業務或者文化的改變不能是強制性的。
同意。
讓我們在圖1-1的幫助下,理解現代世界中組織在應用程序生命期管理中面對的痛點。
考慮到業務中不斷變化的模式和競爭環境,改善應用程序生命期管理是當務之急。
在現代,有什麼因素能夠幫助我們改善應用程序生命期管理?
是的,雲計算改變了遊戲規則,為許多開創性的解決方案和創新打開了大門。讓我們來理解雲計算的真正意義,以及DevOps和自動化等術語在企業中所起的重要作用。
1.1.1 雲計算概述
從計算革命來看,雲計算是下一個合乎邏輯的步驟。從傳統數據中心和虛擬化,到混合環境、私有雲、公共雲和混合雲服務,雲計算是向雲消費者按需提供多租戶或者專用計算資源(如計算、存儲和網路)的計算類型。雲計算有多種不同風格,包括不同的雲部署模型和雲服務模型。最重要的是其定價模型——現收現付。
雲部署模型是雲資源部署的方式。
1)私有云:私有雲由防火牆後專門用於特定組織的場內雲資源組成。
2)公共云:公共雲由可用於所有組織及個人的雲資源組成。
3)混合云:混合雲由可用於一組有類似興趣或者類似需求類型的組織的雲資源組成。
4)社區云:社區雲由組合兩種或者更多部署模型的雲資源組成。
雲服務模型描述了向各類客戶(個人、小型組織、大型企業)提供雲資源的方式。
雲服務模型包括:雲客戶或者最終用戶可以訪問和控制虛擬機的純基礎設施——基礎設施即服務(IaaS);提供運行時服務,雲服務提供者提供和管理運行應用所需的所有軟體安裝及配置的平台——平台即服務(PaaS);雲服務提供者提供整個應用程序,負責基礎設施和平台的軟體即服務(SaaS)。
近幾年湧現了許多服務模型,但是IaaS、PaaS和SaaS是基於美國國家標準與技術學會(NIST)的定義,如圖1-2所示。
雲計算有一些重要的特性,如多租戶,類似於電力或者煤氣的現收現付模式,提供更高計算、存儲和網路資源利用率的按需自助服務和資源池化,用於根據需要自動擴展和收縮資源的快速伸縮,以及用於計費的可度量服務。
多年以來,不同雲部署模型的使用根據用例而改變。最初,公共雲用於非關鍵應用,而私有雲用於關注安全性的關鍵應用。混合雲和公共雲的使用隨著時間的推移以及對雲服務提供商所提供服務的經驗及信心而發展。同樣地,不同雲服務模型的使用也根據用例和靈活性而有所不同。IaaS在早期最受歡迎,但是PaaS則憑藉其成熟度和自動伸縮、支持多語言和支持端到端應用程序生命期管理工具的易用性而後來居上。
1.1.2 DevOps概述
DevOps與發展開發和IT運營團隊之間的協作,以比現有方式更高效地管理應用程序生命期的組織文化、過程和技術有關(見圖1-3)。我們在工作中往往傾向於根據模式,從類似的問題或者挑戰中找出可重用解決方案。
多年之後,成功與失敗的試驗、最佳實踐、自動化腳本、配置管理工具和方法論已經成為DevOps文化中不可分割的一部分。
DevOps有助於定義設計方法、開發方法、測試方法、安裝方法、環境管理方法、配置管理方法、應用部署方法、反饋收集方法、代碼改善方法和創新方法。
下面是開展DevOps實踐的一些明顯好處。
DevOps是一系列創新,以高效的方法將開發與運營團隊整合在一起,這些方法包括持續構建集成、持續測試、雲資源配給、持續交付、持續部署、持續監控、持續反饋、持續改善和持續創新,按照敏捷方法論的要求,更快地交付應用程序。文化的發展不是一夜之間就能完成的,需要很長的時間。但是,對於DevOps究竟是什麼仍存在概念上的混淆,人們往往將單獨的持續集成或者配置管理實踐當成DevOps實踐,這就像盲人摸象,每個人都將觸摸到的一部分當成大象的整體,如圖1-4所示。
但是,DevOps涉及的不僅是開發和運營團隊。在現有文化的發展中,涉及測試團隊、業務分析人員、構建工程師、自動化團隊、雲團隊和許多其他利益相關方。
DevOps和組織文化沒有太大區別,它們有共同的價值和行為特徵,需要調整心態和過程,與新的技術和工具相匹配。
開發和運營團隊面臨的挑戰
正因為現實中的一些挑戰,使DevOps呈向上的趨勢,並成為所有信息技術相關討論中的熱門話題。
開發團隊面臨的挑戰
開發人員渴望採用新技術和新方法解決問題。但是,他們面對許多挑戰。
- 競爭激烈的市場造成了按時交付的壓力。
- 他們不得不負責生產就緒代碼管理和新功能的實現。
- 發行周期往往很長,因此,開發團隊必須在應用部署最終進行之前做出假設。在這種情況下,修復在模擬環境或者生產環境中部署期間發生的問題需要花費更多的時間。
運營團隊面臨的挑戰
運營團隊對資源變化、新技術或新方法的使用總是小心翼翼,因為他們需要穩定性。但是,他們也面對許多挑戰。
- 資源爭用:難以處理日益增長的資源需求。
- 重新設計或者調整:這是在生產環境中運行應用程序的需要。
- 診斷和改正:他們應該在應用程序部署與外界隔絕的情況下診斷和改正問題。
IT團隊面臨的挑戰
IT團隊向各個團隊提供運營所需的資源。
- 基礎設施配給:提供基礎設施和具備合適安裝軟體包的運行時環境。
- 配置管理:根據工具或者技術的可供更新,升級現有基礎設施或者軟體包。
考慮到開發和運營團隊面對的所有挑戰,我們應該如何改善現有過程、利用自動化工具提高過程的效率、改變人們的思維方式?在下一小節,我們將了解如何在組織中發展DevOps文化,改善效率和效能。
1.2 如何發展DevOps文化
低效的估算、進入市場的時間過長以及其他問題導致了瀑布模型的改變,產生了敏捷模型。文化的演變不是有固定時限或者一夜之間可以完成的過程,它可能是一個步進式的分階段過程,可以在不依賴其他階段的情況下完成。
我們可以在不使用雲配給的情況下實現持續集成,可以在不實現配置管理的情況下實現雲配給。我們也可以在沒有任何DevOps實踐的情況下實現持續測試。圖1-5所示是實現DevOps實踐的不同階段。
1.2.1 敏捷開發
敏捷開發或基於敏捷的方法論對應用程序構建很有用,這種方法將權力下放,鼓勵互動,重視可工作軟體、客戶協作——利用反饋改善後續步驟——並以高效的方式響應變化。
敏捷開發最吸引人的好處之一是在短時間內(敏捷術語中叫作「衝刺」)持續交付。這樣,應用開發的敏捷方法、技術上的改進、破壞性創新和方法在開發和運營團隊之間造成了一條鴻溝。
1.2.2 DevOps
DevOps試圖通過發展開發和運營團隊之間的夥伴關係,彌合這條鴻溝。DevOps活動強調軟體開發人員和IT運營部門之間的溝通、協作和整合。
DevOps促進協作,通過自動化和編排改善過程為協作提供方便。換言之,DevOps本質上將敏捷活動的持續開發目標擴展到持續集成和發行。DevOps是利用雲解決方案的優勢,將敏捷實踐與過程組合起來。敏捷開發和測試方法幫助我們實現應用程序的持續集成、開發、構建、部署、測試和發行目標。
構建自動化
自動化構建運用Gradle、Apache Ant和Apache Maven等構建自動化工具,幫助我們創建應用程序構建。
自動化構建過程包括將源代碼編譯成類文件或者二進位文件、提供第三方庫文件引用、提供配置文件路徑、將類文件或者二進位文件打包成包文件、執行自動化測試用例、在本地或遠程機器上部署包文件和減少包文件創建中的手工作業等活動。
持續集成
簡言之,持續集成(CI)是一種軟體工程實踐,在這種方法中,開發人員的每次簽入(Check-in)都使用如下任一種方法驗證。
- 「拉」機制:在計劃的時間點執行自動化構建。
- 「推」機制:在存儲庫中保存更改時執行自動化構建。
這一步之後,對源代碼庫中最新的更改執行一次單元測試。持續集成是一種流行的DevOps方法,要求開發人員將代碼每天數次整合為Git和SVN等代碼庫,以驗證代碼的完整性。
然後,自動化構建驗證每次簽入,使團隊可以及早發現問題。
CI(甚至CD)是公司同步DevOps存檔的基線。在組織中如果沒有很好地實施CI和CD,就無法實施DevOps。
雲配給
在本章前面,我們已經介紹了雲計算的基本知識。雲配給為架構即代碼(Infrastructure as Code ,IAC)敞開了大門,使整個過程變得極其高效,因為我們在很大的程度上將涉及人工干預的過程自動化了。
現收現付的計費模式使所需的資源更加容易承受,不僅對大型組織,對中小規模組織和個人也是如此。
雲配給有助於改進和創新,因為以前的資源約束從成本和維護的角度阻礙了組織的進一步發展。一旦我們在基礎設施資源上擁有了敏捷性,就可以考慮自動化運行應用程序所需軟體包的安裝和配置。
配置管理
配置管理(CM)系統中的更改,更具體地說,就是伺服器運行時環境。我們可以使用市場上的許多工具實現配置管理。流行工具包括Chef、Puppet、Ansible、Salt等。
讓我們來考慮一個需要管理多個同類配置伺服器的例子。
例如,我們需要在每個伺服器上安裝Tomcat。如果需要改變所有伺服器上的埠、更新某些軟體包或者為某些用戶提供許可權,該怎麼辦?這種情形下的任何修改都是人工的,也就是一種容易出錯的過程。因為所有伺服器都使用相同的配置,可以利用自動化手段。
持續交付
持續交付和持續部署是可以互換使用的術語。但是,兩者之間還是有一些小的差別。
持續交付是在任何環境中以自動化方式部署一個應用程序並提供持續反饋以改善其質量的過程。持續交付和持續部署中的自動化方法不會改變。但是批准過程和其他小細節可能改變。
持續測試和部署
持續測試是端到端應用程序生命期管理過程中很重要的階段,包括功能測試、性能測試、安全性測試等。
Selenium、Appium、Apache JMeter和許多其他工具都可以用於相同的目的。另一方面,持續部署是部署應用程序,包含對生產環境的最新更改。
持續監控
持續監控是端到端交付流水線的骨幹,開源監控工具就像冰淇淋勺的頭部。
如圖1-6所示,在幾乎每個階段都設置監控,獲得所有過程的透明度是十分可取的做法。這還能夠幫助我們快速檢修故障。監控應該在深思熟慮的計划下執行。
圖1-6描述了持續方法的全部過程。
我們必須理解,這是一種分階段的方法,不一定要一次性完成各個階段的自動化工作。每次選擇一種DevOps實踐、實施並理解其好處,然後再實施另一個,這是更有效的做法。
這樣,我們可以安全地評估組織文化改變帶來的改善,消除應用程序生命期管理中的手工勞動。
1.3 PPT——人、過程和技術——的重要性
PPT在任何組織中都是一個重要的詞。等等!我們說的可不是PowerPoint演示。這裡,我們關注的是人、過程和工具/技術。讓我們來了解一下,為什麼這些因素在改變任何組織的文化時很重要。
1.3.1 人
引用Jack Cranfield的名言:
不管周圍發生什麼,成功的人總是積極地看待人生。他們著眼於過去的成功而不是過去的失敗,聚焦於使他們更接近目標的下一步行動,而不是生活中令他們分心的其他事務。
為什麼說人很重要?這是一個有趣的問題。如果我們想要用一句話來回答,那就是:因為我們試圖改變文化。
那麼又如何?
人是任何文化的重要組成部分,只有人能夠驅動文化的改變,或者改變自己以適應新過程、定義新過程、學習新工具或者技術。
讓我們用變革方程式來理解。
按照維基百科的說法,David Gleicher在20世紀60年代初創造了變革方程式。Kathie Dannemiller在1980年對方程式進行了完善。這個方程式提供了一個模型,以評估影響組織變革倡議成功概率的相對優勢。
Gleicher(原始)版本為:C = (ABD) > X,其中C=變革,A=對現狀的不滿意度,B=希望得到的明確狀態,D=達到理想狀態的實際步驟,X=變革的代價。
Dannemiller的版本:D×V×F > R,其中D、V和F必須存在,組織變革才能進行:D=對現狀的不滿意度,V=對可能目標的願景,F=可用於實現願景的前幾個具體步驟。如果這3個因素的乘積大於R(阻力),那麼變革就是可能成功的。
本質上說,這個公式表示,必須有對現有事務或者過程的不滿,對新趨勢、技術和市場方案創新的願景,以及實現願景所採取的具體步驟。
關於變革方程式的更多細節,可以訪問維基百科網頁:https://en.wikipedia.org/wiki/Formula_for_change#cite_note-myth-1。
作為經驗分享,我認為培訓人員適應新的文化非常重要,這是一場需要耐心的博弈。我們不能在一夜之間改變人們的思維方式,在改變文化之前首先需要理解。
在行業中往往能看到,文化的改變從DevOps知識或者DevOps工程師開始,但是在理想狀況下,這些不應該是「舶來品」,而應該逐步改變現有環境,並在其中訓練人員,以控制阻力。我們不需要一個專門的DevOps團隊,需要的是開發人員、測試團隊、自動化實現人員和雲或基礎設施團隊之間的更多溝通和協作。
讓所有人都理解彼此的痛點是必不可少的步驟。在我工作過的機構里,我們習慣於有一個卓越中心(COE)來管理新技術、創新或者文化。作為自動化實現者和DevOps團隊的一員,我們只應該擔當促進者的角色,而不是與世隔絕的「豎井」中的一員。
1.3.2 過程
Tom Peters曾有一段名言:
幾乎所有質量改進都來源於對設計、製造…布局、過程和規程的簡化。
在處理文化的發展時,質量極其重要。我們需要過程和策略,以正確的方式完成工作,並標準化各個項目,使操作的順序、約束、規則等都有完備的定義,以便對成功與否進行度量。
我們需要為以下任務建立過程。
- 敏捷規劃。
- 資源規劃和配給。
- 配置管理。
- 對雲資源和自動化中使用的其他工具的基於角色訪問控制。
- 編程語言的靜態代碼分析規則。
- 測試方法論與工具。
- 發行管理。
這些過程對於度量DevOps文化發展的成功也很重要。
1.3.3 技術
史蒂夫?喬布斯有如下的名言:
技術並不重要,重要的是你對人們有信心,他們都很好、很聰明,如果給他們工具,他們就能做了不起的事。
科技幫助人和組織產生創意、完成創新,同時改變文化。沒有科技,在日常例行的自動化操作中,就很難實現速度和效率。雲計算、配置管理工具和構建流水線在資源配給、安裝運行時環境和編排中很有用處。它們從根本上提高了應用程序生命期管理中不同方面工作的速度。
1.4 為什麼說DevOps不全和工具有關
是的,工具什麼都不是,在任何組織的文化變革中,它們都不是重要的因素。原因很簡單。不管我們使用哪一種技術,都必須實施持續集成、雲配給、配置管理、持續交付、持續部署、持續監控等。
按照類別,可以使用不同的工具集,但是所有工具執行的都是類似的操作。工具執行某個操作的方式可能不同,但結果是相同的。表1-1所示是按照分類列出的一些工具。
讓我們來看看在不同運營工作的不同階段使用的不同工具。這可能根據不同組織中的環境數量或者DevOps實踐數量而變化,如圖1-7所示。
如果我們需要根據不同的DevOps最佳實踐分類工具,可以將其分類為開源和商業。表1-2所示為一些例子。
在本書中,我們將聚焦於開源和商業工具。我們將在所有重要的自動化和編排相關活動中使用Jenkins和Visual Studio Team Services。
1.5 DevOps評估問題
DevOps是一種文化,我們對此已經很了解。但是,在實施自動化、制定過程和發展文化之前,我們必須理解組織文化的現狀,以及是否有必要引入新過程或者自動化工具。
我們必須非常清楚,我們需要的是使現有文化變得更加高效,而不是輸入文化。在本書的篇幅中可能很難容納一整個評估框架,但是我們將儘力提供一些問題和提示,並以此為基礎,創建一個評估框架就會更容易。
創建需要提出的問題類別,並根據具體應用得出答案。
下面是幾個問題的例子。
1.你是否遵循敏捷原則?
2.你是否使用源代碼庫?
3.你是否使用靜態代碼分析工具?
4.你是否使用構建自動化工具?
5.你使用場內基礎設施還是基於雲的基礎設施?
6.你使用配置管理工具、安裝應用程序軟體包的腳本還是運行時環境?
7.你是否使用自動化腳本在生產和非生產環境中部署應用程序?
8.你是否使用應用程序生命期管理的編排工具或者腳本?
9.你是否使用功能測試、負載測試、安全性測試和移動測試的自動化工具?
10.你是否使用應用程序和基礎設施監控工具?
一旦問題就緒,就準備答案,並根據上述問題的每個答案確定等級。
保證框架的靈活性,即使我們改變任何類別中的一個問題,也能夠自動地管理。
評出等級之後,在框架中引入不同的條件和智能,捕捉答案並計算總體等級。
創建各個分類的最終等級,根據最終等級創建不同類型的圖表,使其更容易理解。在這裡,需要注意的是,組織在應用程序生命期管理各領域中的專業能力。這將為評估框架提供一個新的維度,以增加智能,使其更為高效。
1.6 小結
在本文中,我們設定了本書要實現的許多目標。我們介紹了持續集成、雲環境中的資源配給、配置管理、持續交付、持續部署和持續監控。
設計目標是將願景清晰化的第一步。
——Tony Robbins
我們已經看到,雲計算是如何改變過去對創新的認知方法,它現在已經變成了切實可行的方案。我們還簡要介紹了DevOps的必要性和各種不同的DevOps實踐。人、過程和技術在改變組織現有文化的過程中也很重要。我們試圖指出它們的重要性。工具很重要,但不能止步於此;可以利用任何工具集,改變文化並不需要特定的工具集。我們也簡要地討論了DevOps的評估框架,它將幫助你沿著文化變革的道路前進。
信念,就是在你還沒有看到整個樓梯的時候走出第一步。
——馬丁?路德?金
在下一章中,我們將邁出本次旅程的第一步——持續集成。我們將使用Jenkins和Microsoft Visual Studio Team Services實施持續集成,驗證如何用不同的工具實施CI,而又無須面臨重大的挑戰。
本文僅用於學習和交流目的,不代表非同步社區觀點。非商業轉載請註明作譯者、出處,並保留本文的原始鏈接。
本文摘自:《DevOps開發運維訓練營》
簡明實用的DevOps參考圖書
輕鬆部署DevOps的自學指南
本書按照「每天1章,總計8天」的訓練營模式提供了一些實用的學習模塊,你需要完成每天的所學任務,並以此來培養DevOps文化。
第1天以DevOps基礎概念為主。第2天關注的是持續集成。第3天的重點是Docker容器以及創建一個Tomcat容器。第4天則是在AWS和Microsoft Azure中創建和配置用來部署應用程序的環境,其中會用到基礎設施即服務(IaaS)以及開源的配置管理工具Chef。第5天是持續交付,其重點是應用程序的自動部署,並使用VSTS配置持續交付。第6天則是學習自動化測試的概念。第7天是使用各種方法來實現應用程序生命期管理的自動化,其中還會涉及如何在Jenkins和VSTS中創建流水線,這樣當成功實現持續集成之後,能立即開啟持續交付並部署應用程序。第8天關注的是安全和監控問題。
作者簡介
Mitesh Soni是一位熱心的學習者,在IT 行業已有10 年的經驗。他擁有SCJP、SCWCD、VCP、IBM Urbancode 認證,是IBM Bluemix 認證專家。他熱愛DevOps 和雲計算,對Java 編程也有興趣,覺得設計模式十分迷人。他相信「一圖勝千言」。
延伸推薦
點擊關鍵詞閱讀更多新書:
Python|機器學習|Kotlin|Java|移動開發|機器人|有獎活動|Web前端|書單
在「非同步圖書」後台回復「關注」,即可免費獲得2000門在線視頻課程;推薦朋友關注根據提示獲取贈書鏈接,免費得非同步圖書一本。趕緊來參加哦!
點擊閱讀原文,查看本書更多信息
掃一掃上方二維碼,回復「關注」參與活動!
點擊閱讀原文,查看《DevOps開發運維訓練營》
推薦閱讀:
※如何看待南山滑雪事故的一審判決?
※開鎖公司開鎖用的什麼技術?
※作為平民,為應對恐怖襲擊,未發生時、發生時、發生後,我可以做些什麼?
※如果政府發現數天後是世界末日,會不會告知人民?
※如何評價微博上千萬不要踩電梯踏板的專家建議?
TAG:安全 |