快速开始指南
本指南提供了一个简洁但完整的文档,介绍如何将具有默认值的极狐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 集群创建指南。
安装 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,我们需要以下配置:
- 将在其下运行极狐GitLab 的域名或子域。
- 您的电子邮件地址,Let’s Encrypt 可以颁发证书。
- 配置了极狐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
完成此步骤后,我们可以继续收集为已安装的 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,并检索密码。
您可以在登录后通过用户首选项更改此密码,我们只生成它,以便您确保首次登录的安全。
故障排查
如果您在本指南中遇到问题,以下是一些可以确保正常工作的事项:
-
gitlab.my.domain.tld
解析为您检索到的 Ingress 的 IP 地址。 - 如果收到证书警告,则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 资源所需的权限。