七種自動化的基礎架構即代碼工具
譯文【51CTO.com快譯】自從十多年前被創建以來,基礎架構即代碼(Infrastructure-as-Code,IaC)一直在改變著各個企業IT架構的設置與管理方式。過去對于IT人員而言,構建新的基礎架構,就意味著在某個功能強大的數據中心內部,堆疊各種物理服務器、配置不同的網絡線纜、以及添置各類硬件設備。
如今單靠軟件配置,我們就可以創建出更高性能、更具成本效益、且更安全的基礎架構了。此外,相對于過去需要幾天才能跑完的傳統變更管理流程,如今企業可以通過采用一致性的變更與配置流程,幫助其團隊在幾分鐘之內,就能推出通過充分驗證的、且無人值守的全新流程。
如今,IaC能夠從源代碼、而不是從手工配置的角度,為開發人員提供豐富的云端服務、以及IT基礎架構的相關工具。在IaC中,我們可以將服務器、網絡和數據庫等云端元素視為不同的軟件資源,進而實現完全自動化的配置。
有了這種將基礎架構視為軟件與數據的處理方式,企業開發團隊便可以進行一系列的DevOps與敏捷(Agile)實踐,并在技術價值流(technology value stream)中推動快速且高質量的工作流程。其中,我們可以參考和利用的實踐包括:持續集成(CI)、持續交付(CD)和測試驅動開發(test-driven development,TDD)等。與此同時,企業也可以通過優化部署編排(orchestration)、自動化測試庫、以及使用版本控制系統(version control systems,VCS),來增強其現有系統的統一性和容錯能力。
可見,在不斷的實踐與快速發展中,IaC通過各種自動化工具,讓企業的各種業務流程與關鍵環境更加容易實現與落地。下面,讓我們細數七種能夠提供此類自動化工具的云端平臺吧。
該集成式的AWS服務是專為那些在AWS云中工作的用戶而設計的。憑借著在云端環境中的市場占有率,AWS CloudFormation有著超過350,000名開發用戶。目前,它已經成功配置了342種AWS資源類型。
CloudFormation允許用戶方便地在JSON(請參見https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.template)或YAML(請參見https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.yaml)模板文件中,通過它所提供的各種模板,來構建不同復雜程度的安全基礎架構模型。與此同時,該服務也能通過自動化的功能,以可重復、可管理的方式幫助用戶部署手頭上的各種資源。而且,您只需要對所使用的資源,而不是服務本身支付費用。因此,您只需要根據自己的應用規范,配置相應的模板,CloudFormation就能為您處理其余的任務。
AWS CloudFormation的參考文檔鏈接為:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html。
作為競品,Microsoft為用戶提供的IaC工具是:Azure Resource Manager。用戶可以通過Azure Resource Manager(ARM)的不同模板,在無縫的周期內,配置出自己的基礎架構、并處理各種依賴項。您既可以在模板中使用那些已在JSON中聲明描述了的資源,也可以在同一個ARM模板中聲明多個Azure資源,以構建整體性的項目環境。
由于ARM模板具有冪等性(idempotent),因此您可以不限次數地重復使用相同的模板,并獲得相同的結果。同時,您也可以使用VSTS(譯者注:Visual Studio Team System,Microsoft開發的一套生命周期開發工具)儀表板,以可視化的方式監控所有的構建與發布,并快速地了解到云端環境的整體運行狀況與模板質量。此外,Resource Manager還支持服務器的實例分組、以及對不同分組的統一管理。
Azure Resource Manager的參考文檔鏈接為:https://docs.microsoft.com/en-us/azure/azure-resource-manager/。
3.Google Cloud Deployment Manager
顧名思義,Google Cloud Deployment Manager(CDM)是基于Google云平臺的配置文件(YAML)和模板(JINJA2或PYTHON)的一種自動化執行工具。它允許用戶自行定義和同步部署各種系統資源。在其Beta和Alpha版的特征中,用戶還可以使用到自動擴展與負載均衡等功能,來編寫所有的部署腳本。
同時,Google CDM也支持預覽功能。這意味著:您在不直接提交更改的情況下,便可以直接了解到部署和變更所帶來的影響。該功能不僅可以幫助用戶避免出現人為的錯誤,而且能夠起到加強與穩定整體基礎架構的作用。
GCDM的參考文檔鏈接為:https://cloud.google.com/deployment-manager/。
上述三種IaC工具都是為特定的云環境所設計的,而Terraform并非如此。它不僅是冪等的,而且是多種云端環境中的“瑞士軍刀”。由HashiCorp開發的(該公司同樣開發出了Vault和Nomad)Terraform獨立于任何云端平臺。它能夠幫助用戶輕松地處理,那些具有復雜分布式應用的大型基礎架構。
憑借著其靈活性,Terraform的自動化具有多種表現形式,并且主要服務于核心規劃與應用周期。一些團隊雖然選擇了在本地運行Terraform,但是他們會使用各種包裝腳本(wrapper scripts)為Terraform的運行設置一致性的工作目錄。而其他的開發團隊,則可能會在諸如Jenkins之類的備用編排工具中,去運行Terraform。
與Google CDM類似,Terraform也支持對于變更和配置的預覽。同時,用戶還能夠是用它來復制各種現有的部署、以及單個服務器的實例。此外,Terraform還深化了其版本控制和遠程狀態管理服務,能夠為遠程團隊的協作,提供集中式的真實信息來源。
Terraform的參考文檔鏈接為:https://learn.hashicorp.com/terraform/。
5.Chef
Chef是一款備受CI/CD人員歡迎的IaC工具。它的優勢在于使用了基于Ruby的領域特定語言(Domain Specific Language,DSL)。它可以通過特有的Cookbook式版本控制,來維持用戶配置的一致性,從而保證了基礎架構能夠跟上,其托管應用的快速增長。
Chef通過在其核心配置中封裝了各種模板與模板集合,以滿足用戶的開箱即用需求。其中,一個Cookbook(一種模板)僅對應一種任務。它能夠基于所涉及到的資源,提供不同的服務器配置。例如,某個帶有數據庫的Web應用程序可以擁有兩個recipes(另一種模板),它們共同實現存儲任務。由于支持那些為云平臺專配的API,因此Chef還能夠很好地與其他IaC工具(包括Terraform、以及其他多種云端環境)配合使用。
Chef的參考文檔鏈接為:https://docs.chef.io/quick_start.html。
6.Ansible
Chef雖然是大多數人的選擇,但是對于Red Hat環境中的用戶而言,他們更喜歡使用Ansible。以自動化為設計初衷的Ansible,專注于提供極其簡化的配置語言,以及在無需修改的情況下管理各種云端實例。不僅限于特定的配置管理,Ansible也能很好地執行諸如零宕機(非中斷)滾動式更新、以及熱補丁(hotfixes)之類的任意IT編排。您不必像過去那樣,將系統作為某系孤立的單元進行管理,而只需要清楚地描述出組件與系統之間的相互關系,Ansible便可幫您打理其余的部分。
作為一款靈活的IaC工具,您不僅可以使用由Ansible提供的既有功能,還能夠通過開發屬于自己的模塊和規則,來滿足各種特定的需求。當然,Ansible也能夠提供友好的GUI設置和監控功能。
Ansible的參考文檔鏈接為:https://www.ansible.com/resources/get-started。
7.Puppet
Puppet采用了更為全面的IaC設置和自動化方法。目前,它正在通過各種先進的接口技術,為Reddit、Dell和Google等大型公司的數據中心、以及各種操作系統的運行提供支持。作為一款老牌的工具,Puppet使用基于Ruby的DSL,來定義基礎架構最終狀態。Puppet通過監控基礎架構,來判斷是否出現了偏離既定狀態的變更,進而自動予以修正。另外,由于擁有大量的企業用戶和社區支持,因此它非常適合于系統管理人員來進行功能性的開發。
總結
綜上所述,您需要根據自己的個人偏好和特定需求,來選擇合適的自動化IaC工具。此外,由于您勢必會需要花費一定的時間去定義相關的內容,因此您在選擇時也需要考慮到自己團隊所使用的編程語言、團隊之間的溝通、以及云端環境的一致性等問題。如果您有興趣深入閱讀的話,請參考《IaC的安全挑戰以及克服方法》一文。
原文標題:The Top 7 Infrastructure-As-Code Tools For Automation,作者:Narendar Nallamala
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】