快速开始指南

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

要求

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

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

可用域名

不可以使用 example.com

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

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

获得一个 Kubernetes 集群

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

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

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

安装 kubectl

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

根据官方文档,请务必配置您的 kubectl 以与您新创建的集群通信:

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

安装 Helm v3

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

添加 GitLab Helm 仓库

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

helm repo add gitlab https://charts.gitlab.io/

安装 GitLab

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

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

  1. 将在其下运行极狐GitLab 的域名或子域。
  2. 您的电子邮件地址,Let’s Encrypt 可以颁发证书。
  3. 配置了极狐GitLab 镜像的 values.yaml 文件,可根据需要在其中自定义其它配置。更多信息参考部署指导

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

helm install gitlab gitlab/gitlab \
  --version 5.1.2 \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=me@example.com \
  --values values.yaml
note此步骤可能需要一段时间才能分配所有资源、启动服务并提供访问权限。

完成此步骤后,我们可以继续收集为已安装的 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

注意,其中包含的是 gitlab-gitlab-...

我们现在可以使用用户名 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/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 资源所需的权限。