快速开始指南

本指南提供了一个简洁但完整的文档,介绍如何将具有默认值的极狐GitLab chart 安装到 Google Kubernetes Engine (GKE) 上。 本文以使用 GKE 为例,以使其尽可能直接和简单。

默认情况下,极狐GitLab chart 包括集群内 PostgreSQL、Redis 和 MinIO 部署。仅供试用,不建议在生产环境中使用。如果您希望在持续负载下将这些 chart 部署到生产环境中,您应该遵循完整的安装指南

先决条件

要完成本指南,您必须具备以下条件:

  • 您拥有的域名,您可以向其中添加 DNS 记录。
  • 一个 Kubernetes 集群。
  • 有效的 kubectl 安装。
  • 有效的 Helm v3 安装。

可用域名

您需要有权访问可在其中添加 DNS 记录的 Internet 可访问域名。可以是一个子域名,例如poc.domain.com,但是 Let’s Encrypt 服务器必须能够解析地址才能颁发证书。

为了本指南,我们假设这是在 Google 的 Cloud DNS 中。可以使用其它服务,但此处未涵盖。

创建 Kubernetes 集群

建议使用总共 8vCPU 和 30GB RAM 或更多的集群。

本指南不打算涵盖如何创建或获取 Kubernetes 集群。

您可以参考官方的 GKE 集群创建指南

安装 kubectl

参考安装 kubectl 的官方 Kubernetes 文档。 它很简单,涵盖了大多数操作系统,还涵盖了您在上一步中可能已安装的 Google Cloud SDK。

创建集群后,您必须先配置 kubectl,然后才能从命令行与集群交互。

安装 Helm

本文中,我们将使用 Helm v3 的最新版本(v3.5.2 或更新版本)。参考完善的官方安装说明

添加 GitLab Helm 仓库

首先,我们必须能够安装 gitlab-jh/gitlab。为此,我们必须将仓库添加到 helm 的配置中:

helm repo add gitlab-jh https://charts.gitlab.cn

安装 GitLab

只需一个命令即可安装,并配置 SSL。

为了正确配置 chart,我们需要以下配置:

  1. 将在其下运行极狐GitLab 的域名或子域。
  2. 您的电子邮件地址,Let’s Encrypt 可以颁发证书。

安装 chart 的 helm install 命令示例如下,以安装 5.6.2 版本 chart 为例(应用版本为 14.6.2):

helm install gitlab gitlab-jh/gitlab \
  --version 5.6.2 \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=me@example.com \

此步骤可能需要一段时间才能分配所有资源、启动服务并提供访问权限。

完成此步骤后,我们可以继续收集为已安装的 NGINX Ingress 动态分配的 IP 地址。

检索 IP 地址

我们可以使用 kubectl 来获取由 GKE 动态分配给我们刚刚安装并配置为 GitLab chart 一部分的 NGINX Ingress 的地址。

kubectl get ingress -lrelease=gitlab

此输出应类似于以下内容:

NAME               HOSTS                 ADDRESS         PORTS     AGE
gitlab-minio       minio.domain.tld      35.239.27.235   80, 443   118m
gitlab-registry    registry.domain.tld   35.239.27.235   80, 443   118m
gitlab-webservice  gitlab.domain.tld     35.239.27.235   80, 443   118m

您会注意到有 3 个条目,它们都具有相同的 IP 地址。 您需要使用此 IP 地址,并将其添加到您选择使用的域名的 DNS 中。 您可以添加 3 个单独的 A 类型的记录,但为了简单起见,我们建议添加单个“通配符”记录。在 Google Cloud DNS 中,这是通过创建一个 A 记录来完成的,但名称为 *。我们还建议您将 TTL 设置为 1 分钟而不是 5 分钟。

登录极狐GitLab

你可以通过 gitlab.domain.tld 访问极狐GitLab。例如,如果您设置global.hosts.domain=my.domain.tld,那么您将访问 gitlab.my.domain.tld

为了登录,我们需要收集 root 用户的密码。 这是在安装时自动生成的,并存储在 Kubernetes Secret 中。我们可以从 secret 中获取该密码,并对其进行解码:

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

我们现在可以使用用户名 root 登录极狐GitLab,并检索密码。 您可以在登录后通过用户首选项更改此密码,我们只生成它,以便您确保首次登录的安全。

故障排查

如果您在本指南中遇到问题,以下是一些可以确保正常工作的事项:

  1. gitlab.my.domain.tld 解析为您检索到的 Ingress 的 IP 地址。
  2. 如果收到证书警告,则Let’s Encrypt出现问题, 通常与DNS有关,或者需要重试。

有关更多故障排查提示,请参阅我们的故障排查指南。

Helm 安装返回 roles.rbac.authorization.k8s.io "gitlab-shared-secrets" is forbidden

在运行以下命令后:

helm install gitlab gitlab-jh/gitlab  \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=user@example.com

您可能会看到类似于以下内容的错误:

Error: failed pre-install: warning: Hook pre-install templates/shared-secrets-rbac-config.yaml failed: roles.rbac.authorization.k8s.io "gitlab-shared-secrets" is forbidden: user "some-user@some-domain.com" (groups=["system:authenticated"]) is attempting to grant RBAC permissions not currently held:
{APIGroups:[""], Resources:["secrets"], Verbs:["get" "list" "create" "patch"]}

这意味着您用于连接到集群的 kubectl 上下文没有创建 RBAC 资源所需的权限。