2021年DevOps之終極進化
本文轉載自微信公眾號「新鈦云服」,作者徐磊 翻譯。轉載本文請聯系新鈦云服公眾號。
一、文檔說明
DevOps顧名思義,是讓機器自動處理軟件部署和運維生命周期中的重復性工作,以便操作員可以更快,更有效的實現代碼更新和部署迭代,更可靠的運行他們的系統。
自2009年創造DevOps一詞以來,自動化已經從開發、集成和交付工作的自動化發展到當今運維方面的前沿,在那里我們看到了自動化可觀察性、可靠性和修復的新工具。
二、為什么要實現 DevOps ?
從開發人員的角度來看,DevOps 工具賦予開發團隊權力并提高他們的效率。通過減少跨團隊依賴性、避免手動配置發布流程,開發人員可以提高發布頻率并更快地收到反饋,從而改善他們的整體體驗。
從業務角度來看,DevOps 自動化縮短了部署功能的準備時間。自動化會減少由人為錯誤導致的問題、環境不一致引起的故障來提高平臺的可靠性和可用性。此外,它消除了對大型團隊的需求,最大限度地減少了來自不同開發團隊的重復工作,并減少了跨團隊摩擦。
自動化如何開始?
如果您正在尋找將自動化工作重點放在何處,我們建議您從最大的瓶頸所在開始。
- 事件響應的自動化
- 資源可按需提供給開發人員
- 應用程序是基于業務手段重新架構的
- 安全團隊參與設計和開發
為此,建設一系列自動化階段,解決一路上的常見問題,包括緩慢的服務供應(過于復雜或需要太多工作和跨團隊協作)以及設置測試和部署管道的困難。
一旦實現了自動化,大大加快了流程中的構建速度,他們就會開始研究在維護階段,當軟件投入生產并提供業務價值時,他們可以自動化什么。
這些任務被描述為手動、重復、可自動化且缺乏持久價值。減少重復、可循環的工作可以使工程師做更有意義的工作。
如何自動化 DevOps 流程
處理好您的自動化問題后,確定現有哪些工具可以解決您的問題。
作為一般規則,使用現成的工具和標準通常比構建和維護自己的工具和標準更有效。
在向您的技術堆棧中添加新工具時,請考慮:
- 直接成本(許可和托管)
- 推廣工作(初始投資)
- 維護工作(持續投資)
- 系統增加了復雜性
- 可靠性和支持要求
- 該工具還可以幫助您解決哪些其他問題
理想情況下,您正在尋找一種工具,它不僅足夠靈活以解決您當前的問題,而且對未來的挑戰也很有價值。您正在尋找可以在流程中代替工程師實現自動構建和部署的工具,而不會為維護或使用它的團隊帶來很多負擔。您應該能夠決定自己托管哪些工具以及更喜歡將哪些工具用作 SaaS。
CI/CD
DevOps 的原則之一是能夠以一致的方式安全且可重復地將工件部署到所有環境。因此,最成熟和最流行的 DevOps 工具類別是安全一致地構建代碼和部署工件所需的 CI/CD 編排器,例如Jenkins、GoCD等,也就不足為奇了。
CI/CD 工具允許您創建一個部署管道,該管道從Git或 SVN等版本控制系統中的提交開始,根據幾種不同的質量檢查工具(代碼檢查、單元測試、集成和端到端測試)對其進行評估),如果所有質量檢查都通過,則將該版本部署到生產中。部署管道包括持續集成 (CI)、持續交付 (CD) 和基礎設施配置,具體取決于您的架構。
功能標記工具也是該組的一部分,因為它們用于以安全和可控的方式將代碼快速部署到生產中。
每個公司都應該使用 CI/CD 工具。可以讓您為您的場景選擇最佳工具的問題包括:
- 將工具配置和維護需要多少工作?
- 支持和維護您的管道需要付出多少工作量?
- 為開發團隊創建管道是否便捷?
- 為多個團隊創建共享管道模板是否便捷?
- 您的工具需要哪些安全功能?
配置和基礎設施即代碼工具
將所有基礎設施、配置和應用程序代碼存儲在版本控制系統中是 DevOps 自動化的另一個重要組成部分。將基礎設施和配置定義為代碼的能力,允許工程師對基礎設施代碼進行與對應用程序代碼相同的審查和審計。
有幾種不同類型的工具:
- 基礎設施供應:用于從代碼供應基礎設施組件(例如網絡組件、托管服務、虛擬機)的工具。實例包括Terraform,Pulumi,CloudFormation
- 配置管理:用于配置機器內的操作系統、軟件需求、包依賴和系統文件。示例包括Chef、Puppet、Ansible、Packer
- 容器技術:用于提供與供應商無關的容器編排器來運行容器化應用程序。示例包括Kubernetes、OpenShift、Nomad
- 無服務器功能:用于輔助無服務器功能的部署。示例包括serverless, chalice, CDK
成熟的 DevOps 團隊使用工具組合來實現基礎設施和配置即代碼。工具因技術堆棧和業務需求而異。在評估工具時,確保您的團隊安全、輕松地部署基礎設施,同時輕松共享模板和標準。
可觀察性和監控工具
監控和可觀察性是一類較新的工具,不如用于 CI/CD 的工具成熟??捎^察性和監控領域的工具包括應用程序日志服務,如ELK 堆棧、數據收集代理以及指標和儀表數據的可視化工具。其中一些示例包括Prometheus、Grafana、Datadog和New Relic。它還包括監控系統,用于在平臺未根據指標、日志或運行狀況檢查(Sensu、Nagios、Dynatrace、CloudWatch)性能狀態并根據自定義的規則生成告警通知到相關人員。
彈性和可靠性
從長遠來看,依靠人為干預來確??煽啃?無論是識別問題還是補救)是不可持續的。有很多創新管理、事件過程管理和補救的組織事件正在實現自動化。
DevOps 經典案例
讓我們考慮一個虛構的環境,其中使用 Terraform 將所有基礎基礎設施作為代碼進行管理。
創建新應用程序時,通過使用其Jenkinsfile 中的共享庫定義的,該庫自動包含所有默認步驟和所需的質量檢查,以及向公司通信工具(例如,釘釘、飛書)發送構建通知。應用程序存儲庫還包含具有一些基本配置(例如,內存和 CPU 要求以及健康檢查端點)的 Terraform 文件,并使用所有應用程序共享的模塊。該模塊包含所需的 DNS、負載均衡器和容器配置,以及一些自動監控。
開發人員不需要設置他們的管道或默認基礎設施,因為這些都由共享代碼控制。如果他們需要額外的資源(如數據存儲),他們可以輕松地向 Terraform 文件添加額外的資源。
存儲庫提交后,Jenkins 運行新管道。在運行代碼 linting、單元測試和集成測試的命令后,管道會觸發 Terraform 部署到暫存環境并運行端到端測試。釘釘通知提醒開發人員檢查結果并進一步運行他們想要的任何手動測試。如果開發人員對結果滿意,他們可以通過手動批在 Jenkins 中推廣構建,觸發 Terraform 部署到生產。
在為外部客戶開啟功能標志之前,工程師確保監控和彈性是足夠的。一旦代碼在生產中生效,運營團隊就可以構建自動化來處理常見問題。例如,創建一個作業來自動調整空間不足的磁盤的大小,或者創建一個作業來識別即將到期的 TLS 證書并使用 HashiCorp Vault 自動更新它們。Terraform 也存儲操作自動化。
結論:
自動化測試和部署的工具,如 CI/CD 和 Terraform,現在已經非常成熟,大大減少了交付代碼所需的時間(和勞動)。隨著我們優化和替代生產企業中操作軟件的重復性工作,大大提高了業務可靠性和客戶滿意度。
自動化已成為新一代互聯網生產鏈的趨勢,盡快的實現自動化架構,從公司的運營,人力成本和效率等方面都會得到很大的改善。
原文:https://dzone.com/articles/what-is-devops-automation-in-2021