什么是GitOps
持續的GitOps,新時代的DevOps實踐,通過Kubernetes集群來實現基於git的全自動化的流程來提高交付速度。簡單地說,GitOps是使用Git拉請求管理基礎設施部署和軟件部署的藝術和科學。
兩個關鍵概念:
-
軟件的描述表示: 使用Kubernetes,應用程序和底層基礎結構之間的關系純粹是聲明性的。您使用聲明式(YAML)請求您希望從基礎設施中獲得什么。這些YAML的實現細節被底層的Kubernetes集群抽象出來,這些集群具有控制器、調度器、KubeDNS、KubeProxy、操作符等,這使我們能夠從傳統的“基礎結構作為代碼”轉移到“數據描述的基礎結構”。更多信息請訪問GitHub。這里的關鍵是,應用程序所需的每個聲明性標記(來自application Developer / application Operator / Cluster Operator)都被充實到持續交付管道中的YAML中,並最終推入GitOps存儲庫。並且應該對集群中的任何手動YAML更改都零容忍。
-
連續同步:連續同步的意思是,不斷地查看git存儲庫,以將任何狀態更改反映到Kubernetes集群中。這是一個強大的想法,來自一個叫做Flux的工具。Flux試圖將部署自動化從Kubernetes集群外部轉移到使用Kubernetes操作符的集群中。
持續GitOps是四個主要組件的交集,它們共同創造了奇跡:
- Git存儲庫:將應用程序的聲明性定義存儲為YAML的源代碼存儲庫。
- Kubernetes集群:我們部署應用程序的底層集群。
- 同步代理:Kubernetes操作符擴展,它負責將Git存儲庫和應用程序狀態持續同步到集群中。
- 持續部署管道:編排整個自動化流程的連續部署管道。
為什么使用GitOps ?
使用拉請求來管理基礎設施可能看起來有點像一個奇怪的黑客——使用錘子來刷牆或者把車開到水里。
但是當你仔細觀察時,你會發現GitOps背后的實踐是很有意義的。通過將基礎設施管理任務轉化為一系列的拉請求,您可以實現以下目標:
-
您將獲得一個用於控制基礎設施的工具和接口。這樣就不需要使用不同的工具來控制不同類型的基礎設施。
-
您可以獲得對您的配置所做的所有更改的版本控制。這對於回滾更改和審計非常方便。
-
您可以使用diff來檢測更改並自動生成警報。這不僅意味着您有一種不斷監視更改的方法,而且如果實際情況與應該配置的方式不同,那么很容易發現問題。
-
因為您使用的是Git拉請求(大多數軟件開發人員已經很熟悉了),所以您不必為了管理基礎設施而向您的團隊教授新工具。
-
通過持續的部署自動化提高了生產力。
-
通過推動代碼而不是容器來增強開發人員的體驗。
-
由於所有集群更改的自動審計日志,提高了穩定性。
-
更高的可靠性來自Git內置的恢復/回滾和fork,並且來自單一的可靠來源。
-
端到端工作流的一致性和標准化。
-
更強的安全性,因為Git具有強大的正確性和用於跟蹤和管理更改的加密技術。
-
更低的停機時間帶來的成本效益,極大地提高了生產率。
參考:
https://www.weave.works/technologies/gitops/
https://www.atlassian.com/git/tutorials/gitops
https://www.cloudbees.com/gitops/what-is-gitops
https://medium.com/@imarunrk/continuous-gitops-the-way-to-do-devops-in-kubernetes-896b0ea1d0fb