GitOps-在同一个仓库中还是在另一个仓库中进行配置?

时间:2020-07-31 00:49:21

标签: git github kubernetes monorepo gitops

首先,这是在Kubernetes中运行的Mono-repo应用程序的上下文中。

在GitOps中,我的理解是所有内容都是声明性的,并用YAML等配置文件编写。这允许在git中有完整的更改历史记录。分支代表环境。例如:

  • BRANCH开发可能是已部署的质量检查或临时环境
  • BRANCH功能/ foo-bar可以是已部署的功能分支以进行评估
  • TAG v1.2.0可能是生产环境中运行的最新版本 这对我来说很有意义,所有分支都可以部署为应用程序的运行版本。

问题 我记得读过……某处……配置应该位于主存储库之外,在另一个“配置存储库”中。从内存的角度来看,应用程序不应该知道特定的配置...仅如何使用配置?

这是真的吗?我应该有一个应用程序仓库和一个应用程序配置仓库吗?例如

  • 应用回购:foo-organisation/bar-application
  • 配置存储库:foo-organisation/bar-application-config

针对不同环境的config分支模型位于该存储库中的何处?为什么有什么优势?

否则,它应该只位于应用程序存储库的目录中吗?

1 个答案:

答案 0 :(得分:2)

除了应该在git repo中表示与环境有关的所有内容外,没有其他硬性规定(例如,停止将配置存储在Jenkins env变量Steve!中)。配置所在的地方更多是实现细节。

如果将您的应用程序作为单仓库管理,那么为什么不对部署使用相同的设置?通常最好与您现有的发行流程配合,而不是创建新的东西。

一个陷阱是,单个版本的应用程序通常需要支持多个部署,并且在应用程序发布后,部署配置通常可以更改。因此,无论文件,目录,分支还是存储库,都需要一个与多个配置关系相关的应用程序。只要版本化/发布,它们都可以工作。

另一个发行注意事项是应用程序构建。对于小型部署更新,您不想构建和发布完整的新应用程序映像。最好仅应用配置并重用现有的工件。通常,这是单独的部署/配置存储库的驱动程序,因此,关注点是完全分开的。

安全可以发挥作用。您可能在部署配置中具有所有开发人员都不需要访问的系统信息,或者甚至不想将其放入容器映像中的机会。这也促使使用单独的存储库。

基础设施的规模是另一个。如果我要管理多个应用程序,则通用系统配置将不会存储在应用程序存储库中。