什么是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