1. 程式人生 > >DevOps--Chef/Puppet

DevOps--Chef/Puppet

本文摘抄自:DevOps的概念與實踐  

目錄

Chef/Puppet 只是DevOps工具鏈中的可選工具

僅靠Chef/Puppet本身無法實現Full-Stack部署自動化

兩種實現方式

基於PaaS的實現方式 (以Cloud Foundry為例)

Netflix的實現方式


DevOps不僅僅是工具

DevOps是Agile的延伸,Agile依靠Dev & Biz部門緊密協作,通過增量交付的方式來解決需求多變的難題。DevOps則進一步延伸到IT運維,通過Dev & Ops的緊密協作提高軟體交付的質量和頻率。 人的重要性大於流程,流程的重要性大於工具。 這個結論適應於Agile,也適用於DevOps。 工具帶來的影響是短期的、片面的,流程和人產生的影響是長期而全面的。

 

Chef/Puppet 只是DevOps工具鏈中的可選工具

 DevOps的目的是打造標準化的、可重複的、完全自動化的Delivery Pipeline,其範圍涵蓋需求、設計、開發、構建、部署、測試、釋出。除了需求、設計和開發,其他都是可以自動化的,自動化是提高可測試性、一致性、穩定性和交付頻率的核心。

DevOps流程所需要用到的工具和環境有:

  1. 原始碼版本控制工具: SVN、Git等

  2. 持續整合工具: Jenkins、 Bambo等

  3. Artifact儲存倉庫:持續整合構建後的artifact 都統一放在一個倉庫中,比如Nexus/Artifactory,也可以是FTP、S3等

  4. 配置和部署工具:Chef/Puppet/CFEngine, Fabric/ControlTier,也包括Docker等

  5. Cloud Provision工具:在雲環境下,由於任何IT Infra資源都以程式設計介面提供,意味著Full-Stack Automation成為了可能。Cloud Provision工具可以自己通過API構建,也可以直接使用IaaS服務商提供的擴充套件服務,也可以使用第三方工具,相當一部分 ,Cloud Provision本身也集成了Chef/Puppet來實現後續的部署和配置。

  6. 測試工具:傳統測試工具,模擬Infra災難、驗證系統健壯性的工具,如Netflix的Chao Monkey

  7. 釋出工具:一般情況下,需要DTAP四個環境:開發、測試、Staging、生產。每種環境的作用、部署方式、程式碼版本等是不一樣的。

  8. 雲基礎設施:包括AWS/Azure等公有云,CLoudstack/OpenStack等私有云

 

僅靠Chef/Puppet本身無法實現Full-Stack部署自動化

如果要實現Full-Stack Automation,需要實現環境建立自動化、軟體安裝和配置自動化、應用部署和配置自動化、監控和告警自動化、故障檢測和恢復自動化、擴充套件自動化。

  1. 環境建立:建立VMs、網路、儲存、負載均衡,協調不同角色VMs的建立過程和配置

  2. 軟體安裝和配置:作業系統配置,基礎軟體安裝和配置,這些軟體的特點是變動不頻繁。對Chef/Puppet來說,這個步驟的自動化是最擅長的,提供大量現成的Recipes,並抽象各種異構系統之間的差異

  3. 應用部署和配置:部署應用程式碼,這部分程式碼的變動是頻繁的。另外,對於複雜的系統來說,如果保證升級期間系統的可用性,系統的各個應用元件需儘量是無狀態和鬆耦合的。如果系統的元件之間是有依賴的,那麼升級期間必須動態地協調、控制好相關元件的行為。

  4. 監控和告警:包括OS級別和應用級別的可用性和效能監控。如果發現異常,需要能夠自動發出告警資訊。

  5. 健康檢查和恢復:為了應付雲基礎設施故障,系統需要Design By Failure。在異常發生時,系統可以發現並進行自動處理。

  6. 自動伸縮:一般情況下,業務存在高峰期和低估期。為了節約成本,系統應該是可以自動伸縮的。

每一步都有工具來實現自動化,但實現Full-Stack 部署自動化不是通過簡單的拼湊工具就可以的。

兩種實現方式

基於PaaS的實現方式 (以Cloud Foundry為例)

  1. 環境建立:使用者不需要建立物理資源環境,Cloud Foundry 會自動建立並分配資源給各個租戶,使用者無法控制底層OS等
  2. 軟體安裝和配置:使用者不需要軟體安裝,Cloud Foundry已經安裝好相關軟體,但支援的型別和版本有限。
  3. 應用部署和配置:Cloud Foundry提供介面,使用者呼叫介面進行應用部署和配置。應用型別必須是Cloud Foundry支援的,只能進行有限的配置,如Tomcat的配置引數等
  4. 監控和告警:Cloud Foundry提供監控服務,但Metric型別有限,無法支援自定義Metric
  5. 健康監測和恢復:Cloud Foundry 提供Container級別的健康監測和恢復
  6. 自動伸縮:基於Cloud Foundry提供的monitoring介面和應用控制介面,可以實現instance級別的自動伸縮

Cloud Foundry基本實現了所有自動化步驟,應用開發人員只需專注應用邏輯本身的開發,但Cloud Foundry也限制了使用者的選擇權和控制權,特別是大型的、複雜的、分散式系統,開發人員需要的是Full-Stack可控制性

Netflix的實現方式

  1.  環境建立:通過自己研發的Asgard管理和部署工具實現
  2. 軟體安裝和配置:基礎軟體和配置都打包成AMI,基於Netflix自己的打包工具Aminator
  3. 應用部署和配置:同上,應用程式碼和配置也打包進AMI
  4. 監控和告警:Leverage AWS Cloudwatch, 同時也將通過自己開發的Servo Lib將custom metric傳送至Cloudwatch
  5. 健康監測和恢復:Leverage Atoscaling group, 健壯性測試有Netflix自己開發的Chaos Monkey工具
  6. 自動伸縮:Leverage AWS AutoScaling group

Netflix除了Leverage AWS的CloudWatch/Auto Scaling Group/ ELB等服務外,自己也開發了一系列工具完成Full-Stack部署自動化。這些工具通過Asgard這個視覺化雲管理和部署控制檯整合起來。 另外,Deployable image這種部署模式雖可簡化部署並確保一致性,但一部分複雜性轉移到了應用層面。系統的各個元件是無狀態和鬆耦合,同時還需要Eureka這種服務來實現中間層的負載和failover。

Cloud Foundry和Netflix都沒有用到Chef/Puppet。