目标

我们对这项计划有几个核心目标:

  1. 易于横向扩展
  2. 易于部署、升级、维护
  3. 云服务商的广泛支持
  4. 初步支持 Kubernetes 和 Helm,未来可以灵活支持其它调度器

Scheduler

我们即将发布对 Kubernetes 的支持,Kubernetes 已经非常成熟而且很多行业都已广泛支持。作为我们设计的一部分,我们将尽量避免做出会排除其他调度器支持的决策。这对于像 OpenShift 这样的下游 Kubernetes 项目来说尤其正确。未来,也可能支持其他调度器,如Docker Swarm。

我们的目标是支持 Kubernetes 的扩展和自我修复能力:

  • Readiness 和健康检查以确保 Pod 正常运行,如果没有,则回收它们
  • 跟踪支持金丝雀和滚动部署的
  • 自动缩放

我们将尝试利用标准的 Kubernetes 功能:

  • 用于管理配置的 ConfigMaps。 然后这些将被映射或传递到 Docker 容器
  • 敏感数据的 secret

由于我们可能也在使用 Consul,因此可以使用它来与其他安装方法保持一致。

Helm Charts

创建一个 Helm chart 来管理每个 GitLab 特定容器/服务的部署。然后,我们还将包含捆绑 chart,以使整体部署更容易。这对于这项工作尤为重要,因为 Docker 和 Kubernetes 层的复杂性将远高于基于一体化 Omnibus 的解决方案。 Helm 可以帮助管理这种复杂性,并提供一个简单的顶层接口,来通过 values.yaml 文件管理设置。

我们计划提供一套三层 Helm Charts。

Helm Chart Structure