部署指导

在执行 helm install 之前,您需要就如何运行极狐GitLab 做出一些决定。使用 Helm 的 --set option.name=value 命令行选项可以指定选项值。参考完整的 命令行选项列表。本指南将涵盖所需的值和常用选项。

选择配置项

在每个部分中,将与 helm install 结合使用的配置项。

Secrets

一些 Secrets 需要被创建(例如 SSH keys)。默认情况下会自动生成,但是如果您想要对它们进行自定义配置,您可以遵循 secrets 指导

网络和 DNS

默认情况下,chart 依赖于 Kubernetes 中具有 type: LoadBalancerService 对象,使用配置了 Ingress 对象的基于名称的虚拟服务器,来对外暴露极狐GitLab 服务。您需要指定一个域名,包含将 gitlabregistryminio(如果已启用)解析为 chart IP 的记录。

在您的 Helm 安装命令行中包含以下选项:

--set global.hosts.domain=example.com

举个例子:

启用自定义域名支持后,*.<pages domain> 子域,默认为 <pages domain>,变为 pages <global.hosts.domain>,需要解析到分配给 Pages 的外部 IP(通过 --set global.pages.externalHttp--set global.pages.externalHttps)。要使用自定义域名,GitLab Pages 可以使用 CNAME 记录将自定义域名指向相应的 <namespace>.<pages domain> 域名。

external-dns 动态 IP

如果您计划使用自动 DNS 注册服务,例如 external-dns,您不需要对极狐GitLab 进行额外配置,但您需要在集群中部署。如果您选择了 external-dns,项目页面会为每个支持的提供商显示完整指导

note如果您启用了 GitLab Pages 的自定义域名支持,external-dns 不再适用于 Pages 的域名(默认为 pages.<global.hosts.domain>),您需要手动配置 DNS 记录将域名指向 Pages 的专用外部 IP。

如果您使用仓库中的脚本配置了 GKE 集群,external-dns 已在您的集群中安装。

固定 IP

如果您计划手动配置 DNS 记录,他们应全部指向一个固定 IP。例如您拥有 example.com 和固定 IP 10.10.10.10,则 gitlab.example.com, registry.example.comminio.example.com (如果使用 MinIO)应全部解析到 10.10.10.10

如果您使用 GKE,配置固定 IP 和 DNS。在配置过程中,请查阅云提供商和 DNS 提供商的文档获取更多帮助。

在 Helm 安装命令行中包含以下选项:

--set global.hosts.externalIP=10.10.10.10

持久化

默认情况下,chart 将创建 Volume Claims,预期存在动态 provisioner 提供底层持久卷。如果您想自定义 storageClass 或手动创建挂载 volumes,请查看存储文档

重要提示: 在首次安装后,更改存储设置需要手动编辑 Kubernetes 对象,所以最佳方式是在安装生产实例之前,预先做好计划以避免额外的存储迁移工作。

TLS 证书

您应该使用 https 并配置 TLS 证书来运行极狐GitLab。chart 默认安装并配置 cert-manager 获得免费 TLS 证书。 如果您拥有通配符证书,您已安装 cert-manager,或有其它获取 TLS 证书的方法,请查阅 TLS 选项文档

对于默认配置,您必须指定 email 地址去注册您的 TLS 证书。

在 Helm 安装命令行中包含以下选项:

--set certmanager-issuer.email=me@example.com

PostgreSQL

chart 默认提供集群内建的 PostgreSQL 数据库,仅适用于试用目的。

说明:该配置不推荐在生产环境中使用。

  • bitnami/PostgreSQL 默认提供单个 StatefulSet。
  • 对于 4.0.0 版本的 chart,副本在内部可用,但 未默认开启。该功能未在极狐GitLab 实例上测试过。

如果您已有准备好的外部 PostgreSQL 数据库,可以使用以下命令配置 chart 使用该数据库。

在 Helm 安装命令行中包含以下选项:

--set postgresql.install=false
--set global.psql.host=production.postgress.hostname.local
--set global.psql.password.secret=kubernetes_secret_name
--set global.psql.password.key=key_that_contains_postgres_password

Redis

所有 Redis 配置设置已移动且合并到 全局配置文档 页面。

说明:该配置不推荐在生产环境中使用。

  • bitnami/Redis 默认提供单个 StatefulSet。
  • 对于 4.0.0 版本的 chart,副本在内部可用,但 未默认开启。该功能未在极狐GitLab 实例上测试过。

MinIO

该 chart 默认提供集群内建的 MinIO 实例,用于提供对象存储 API。

说明:该配置不推荐在生产环境中使用。

  • MinIO fork 提供了一个单实例、非弹性部署的 Deployment。

Prometheus

我们使用上游 Prometheus chart,不要覆盖其它默认文件的值,除了自定义的 prometheus.yml 文件,该文件用于限制收集 Kubernetes API 的指标数据,以及由极狐GitLab chart 创建资源的指标数据。默认禁用 alertmanagernodeExporterpushgateway

prometheus.yml 文件控制 Prometheus 从具有 gitlab.com/prometheus_scrape annotation 的资源中收集指标。此外,也可以使用 gitlab.com/prometheus_pathgitlab.com/prometheus_port annotations 配置指标的收集方式。每一个 annotation 与 prometheus.io/{scrape,path,port} annotation 相似。

对于正在或想要使用 Prometheus 监控极狐GitLab 应用的用户,原始的 prometheus.io/* annotation 仍添加到适当的 Pods 和 Services 中。这样允许已有用户持续收集指标,且可以提供在同一个 Kubernetes 集群中,同时抓取极狐GitLab 应用指标和其它应用指标的能力。

参考 Prometheus chart 文档,了解配置选项的详尽列表。prometheus 是我们使用的必需 chart,确保其中的配置项是 prometheus 的子项。

对于实例,持久存储的请求由以下配置内容控制:

prometheus:
  alertmanager:
    enabled: false
    persistentVolume:
      enabled: false
      size: 2Gi
  pushgateway:
    enabled: false
    persistentVolume:
      enabled: false
      size: 2Gi
  server:
    persistentVolume:
      enabled: true
      size: 8Gi

外发电子邮件

Outgoing email 默认禁用。如果要启用,使用 global.smtpglobal.email 设置提供您的 SMTP 服务器的详细信息。您可以在 命令行选项文档中查看相关信息。

如果您的 SMTP 服务器需要认证,确保阅读 secrets 文档 中关于提供密码的相关部分。您可以使用 --set global.smtp.authentication="" 禁用认证。

如果您的 Kubernetes 集群部署在 GKE,请注意 SMTP 端口 25 被关闭

接收电子邮件

了解该配置请参考 mailroom chart 文档

服务台电子邮件

了解该配置请参考 mailroom chart 文档

RBAC

该 chart 默认创建和使用 RBAC。如果您的集群未启用 RBAC,您需要禁用以下设置:

--set certmanager.rbac.create=false
--set nginx-ingress.rbac.createRole=false
--set prometheus.rbac.create=false
--set gitlab-runner.rbac.create=false

CPU and 内存资源需求

Chart 中的资源请求和组件副本数量,默认设置为满足小型生产部署。适用于具有至少 8vCPU 和 30GB 内存的集群。如果您尝试部署非生产实例,您可以减小默认值以适用于更小的集群。

最小 GKE 示例值文件提供了调整资源的示例,以适应 3vCPU 12GB 内存的集群。

最小 Minikube 示例值文件提供了调整资源的示例,以适应 2vCPU 4GB 内存的 Minikube 实例。

使用 Helm 部署

一旦收集了所有配置选项,可以获取任何依赖项并运行 Helm。在示例中,我们将 Helm 版本命名为 gitlab,chart 版本为 5.6.2。

helm repo add gitlab-jh https://charts.gitlab.cn
helm repo update
helm upgrade --install gitlab gitlab-jh/gitlab \
  --version 5.6.2 \
  --timeout 600s \
  --set global.hosts.domain=example.com \
  --set global.hosts.externalIP=10.10.10.10 \
  --set certmanager-issuer.email=me@example.com 

说明如下:

  • 所有 Helm 命令指定使用 Helm v3 语法。
  • Helm v3 要求将发布名称指定为命令行上的位置参数,除非使用了 --generate-name 选项。
  • Helm v3 要求指定一个数字作为持续时间,并在值后面附加一个单位(例如 120s = 2m and 210s = 3m30s)。--timeout 选项可处理为使用秒为单位,设置时可以_不_指定单位。
  • --timeout 选项具有一定迷惑性,在应用了 --timeout 选项时,Helm 在安装或升级过程中部署多个组件。--timeout 的值单独应用于每个组件的安装,而不是所有组件的安装。因此,当使用 --timeout=3m 设置在 3 分钟后中止 Helm 安装时,仍可能导致 Helm 安装在 5 分钟后完成,因为所有已安装组件的安装时间都不超过 3 分钟。

如果您想要安装指定版本的实例,您也可以使用 --version <installation version> 选项。

了解 chart 和极狐GitLab 之间的版本对照,请查看文档

监控部署

部署完成后将输出安装的资源列表,这可能需要 5-10 分钟。

运行 helm status gitlab 命令,可以检查部署的状态。部署进行时,您可以在另一个终端运行该命令。

首次登录

您可以通过访问安装时指定的域名,来访问极狐GitLab 实例。默认域名为 gitlab.example.com,除非更改了 全局 host 设置。如果您手动创建了初始 root 密码的 Secret,您可以使用它,以 root 用户身份登录。如果没有,极狐GitLab 将自动为 root 用户创建一个随机密码,您可以通过以下命令获取(用版本名称替换 <name>,如果您使用了以上案例中的命令,<name>gitlab)。

kubectl get secret <name>-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo