部署指导

在执行 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
note如果您为 GitLab Pages 启用自定义域名支持,*.<pages domain> 子域名(默认情况下,<pages domain>pages.<global.hosts.domain>)应解析到专用于 Pages 的任何外部 IP(通过 global.pages.externalHttpglobal.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

配置极狐版镜像

需要配置使用极狐GitLab 镜像源中的组件镜像,替换 gitlab/gitlab chart 中的相应组件镜像。

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

      --set gitlab.migrations.image.repository=gitlab-jh.tencentcloudcr.com/cng-images/gitlab-toolbox-jh
      --set gitlab.sidekiq.image.repository=gitlab-jh.tencentcloudcr.com/cng-images/gitlab-sidekiq-jh
      --set gitlab.toolbox.image.repository=gitlab-jh.tencentcloudcr.com/cng-images/gitlab-toolbox-jh
      --set gitlab.webservice.image.repository=gitlab-jh.tencentcloudcr.com/cng-images/gitlab-webservice-jh
      --set gitlab.workhorse.image.repository=gitlab-jh.tencentcloudcr.com/cng-images/gitlab-workhorse-jh
    
  • 您可以通过将其作为 values.yaml 中的一部分来实现配置。查看使用自定义镜像文档获取更多信息。

    示例如下:

      certmanager:
        install: false
      global:
        ingress:
          configureCertmanager: false
          tls:
            enabled: true
      minio:
        ingress:
          tls:
            enabled: true
            secretName: minio-helm-cdneks-com-ssl
        persistence:
          size: 20Gi
      postgresql:
        persistence:
          size: 20Gi
      prometheus:
        server:
          persistentVolume:
            size: 20Gi
      redis:
        master:
          persistence:
            size: 20Gi
      registry:
        ingress:
          tls:
            secretName: registry-helm-cdneks-com-ssl
      gitlab:
        migrations:
          image:
            repository: gitlab-jh.tencentcloudcr.com/cng-images/gitlab-toolbox-jh
            tag: v14.5.0
        sidekiq:
          image:
            repository: gitlab-jh.tencentcloudcr.com/cng-images/gitlab-sidekiq-jh
            tag: v14.5.0
        webservice:
          image:
            repository: gitlab-jh.tencentcloudcr.com/cng-images/gitlab-webservice-jh
            tag: v14.5.0
          workhorse:
            image: gitlab-jh.tencentcloudcr.com/cng-images/gitlab-workhorse-jh
          ingress:
            tls:
              secretName: gitlab-helm-cdneks-com-ssl 
        task-runner:
          image:
            repository: gitlab-jh.tencentcloudcr.com/cng-images/gitlab-toolbox-jh
            tag: v14.5.0
        workhorse:
          image:
            repository: gitlab-jh.tencentcloudcr.com/cng-images/gitlab-workhorse-jh
            tag: v14.5.0
        gitaly:
          persistence:
            size: 20Gi
    

CPU and 内存资源需求

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

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

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

使用 Helm 部署

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

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

说明如下:

  • 所有 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