设置 GitLab Orbit
Tier: 专业版,旗舰版
Offering: 私有化部署
GitLab Orbit 作为 Helm release 与您的极狐GitLab 实例一起运行。
先决条件:
- 数据复制正在运行,并且数据行已到达数据湖。
- 一个 ClickHouse 管理员账号。
- 极狐GitLab 的管理员访问权限。
请按以下顺序设置 GitLab Orbit:
- 在极狐GitLab 中开启 GitLab Orbit。
- 创建密钥。
- 安装 GitLab Orbit。
- 为群组开启索引。
在极狐GitLab 中开启 GitLab Orbit
极狐GitLab 和 GitLab Orbit 使用一个共享密钥进行认证,该密钥由极狐GitLab 持有。请先在极狐GitLab 中开启 GitLab Orbit,以便在将密钥复制到集群之前该密钥已存在。
极狐GitLab 连接到端口 50054 上的 gRPC 端点,以 tls:// 开头的端点使用 TLS。如需改用服务网格进行加密,请参阅使用明文连接。
-
编辑 /etc/gitlab/gitlab.rb:
rubygitlab_rails['orbit_enabled'] = true gitlab_rails['orbit_grpc_endpoint'] = 'tls://orbit.example.com:50054' -
重新配置极狐GitLab:
shellsudo gitlab-ctl reconfigure -
复制极狐GitLab 生成的密钥。请勿重新编码或裁剪该密钥:
shellsudo cat /var/opt/gitlab/gitlab-rails/etc/gitlab_knowledge_graph_secret
如果您运行多个 Rails 节点,或者使用 Ansible 等工具替换 /etc/gitlab/gitlab-secrets.json, 请将 gitlab_rails['orbit_secret'] 设置为 gitlab.rb中的密钥。 否则,重新配置可能会生成新密钥,导致 GitLab Orbit 拒绝所有请求。
在您安装 GitLab Orbit 之前,极狐GitLab 会持续记录连接错误。
创建密钥
GitLab Orbit 从 Kubernetes 密钥中读取极狐GitLab 密钥和 ClickHouse 密码。 chart 的设置 hook 使用管理员密码创建 GitLab Orbit 用户。
要创建密钥:
-
创建命名空间:
shellkubectl create namespace gitlab-orbit -
创建密钥:
shell1kubectl -n gitlab-orbit create secret generic orbit-secrets \ 2 --from-literal=gitlab-jwt-verifying-key='<gitlab_key>' \ 3 --from-literal=gitlab-jwt-signing-key='<gitlab_key>' \ 4 --from-literal=admin-password='<clickhouse_admin_password>' \ 5 --from-literal=datalake-password='<siphon_reader_password>' \ 6 --from-literal=graph-password='<writer_password>' \ 7 --from-literal=graph-read-password='<reader_password>'替换以下值:
- <gitlab_key>:来自在极狐GitLab 中开启 GitLab Orbit的密钥。
- <clickhouse_admin_password>:ClickHouse 管理员账号的密码。
- <siphon_reader_password>、<writer_password> 和 <reader_password>:为 gkg_siphon_reader、gkg_writer 和 gkg_reader 用户设置的新密码。
-
如果 Web 服务器终止 TLS,请为 gRPC 端点创建 TLS 密钥:
shellkubectl -n gitlab-orbit create secret tls orbit-webserver-tls --cert=<cert_file> --key=<key_file>
在生产环境中,请从您的密钥管理器同步密钥,例如使用 External Secrets Operator。pod 在启动时读取密钥,因此更改后请重启它们:
shellkubectl -n gitlab-orbit rollout restart deployment
安装 GitLab Orbit
要安装 GitLab Orbit:
-
将以下内容保存为 orbit-values.yaml:
yaml1secrets: 2 gitlabJwtVerifyingKey: {secretName: orbit-secrets} 3 gitlabJwtSigningKey: {secretName: orbit-secrets} 4 datalakePassword: {secretName: orbit-secrets} 5 graphPassword: {secretName: orbit-secrets} 6 graphReadPassword: {secretName: orbit-secrets} 7 8clickhouseSetup: 9 enabled: true 10 adminSecret: 11 secretName: orbit-secrets 12 13clickhouse: 14 datalake: 15 host: <clickhouse_host> 16 database: gitlab_clickhouse_main_production 17 user: gkg_siphon_reader 18 graph: 19 host: <clickhouse_host> 20 database: orbit 21 user: gkg_writer 22 readUser: gkg_reader 23 24dispatcher: 25 enabled: true 26 27nats: 28 url: nats://nats.nats.svc.cluster.local:4222 29 30gitlab: 31 # The GitLab address the cluster reaches, such as an internal address or load balancer. 32 # If it differs from the certificate host name, set resolveHost. See Networking. 33 baseUrl: https://gitlab.example.com 34 # resolveHost: gitlab.internal 35 36tls: 37 enabled: true 38 existingSecret: orbit-webserver-tls将 <clickhouse_host> 替换为您的 ClickHouse 服务器的主机名。
-
安装 chart:
shellhelm upgrade --install orbit oci://registry.gitlab.com/gitlab-org/orbit/orbit-helm-charts/orbit \ --namespace gitlab-orbit --values orbit-values.yaml -
确认 Web 服务器、索引器和调度器 pod 均处于 Running 状态:
shellkubectl -n gitlab-orbit get pods
请根据您的环境调整这些值:
- 对于通过 TLS 连接的 ClickHouse(例如 ClickHouse Cloud),请为两个 ClickHouse 连接都添加 httpPort: 8443 和 ssl: true。
- 如果 ClickHouse 证书来自您自己的 CA,请将该 CA 证书添加到 trust.extraCAs。
- 如果由负载均衡器或服务网格处理 TLS,请移除 tls 块。
- 如果 NATS 需要密码,请设置 nats.username,将 nats-password 添加到密钥中,并将 natsPassword 添加到 secrets,同时开启 nats.tls,以免密码以明文形式在网络上传输。
- Snowplow 分析默认关闭。要开启它,请设置 analytics.enabled: true。
有关 TLS、私有证书颁发机构、NATS TLS 和明文连接的信息,请参阅 GitLab Orbit 的网络配置。 有关所有值及其默认值,请参阅 GitLab Orbit Helm chart。 有关 pod 规格,请参阅 GitLab Orbit 容量规划。
为群组开启索引
GitLab Orbit 为顶级群组及其子群组和项目建立索引。
要为群组开启索引:
- 在右上角,选择管理员。
- 前往 /admin/orbit 上的 GitLab Orbit 配置页面。
- 在顶级群组下,找到您的群组并选择开启 GitLab Orbit。
- 确认。
要为所有顶级群组建立索引,请开启自动为所有顶级群组开启 GitLab Orbit。
您也可以通过 API 开启索引:
shellcurl --request PUT \ --header "PRIVATE-TOKEN: <your_access_token>" \ --url "https://gitlab.example.com/api/v4/admin/knowledge_graph/namespaces/<group_id>"
首次索引需要几分钟到几小时不等。每小时执行一次的扫描会补上索引遗漏的任何数据。
验证安装
为您已开启索引的群组中的项目查询图谱。该查询使用 GQL,支持的极狐GitLab 版本默认接受该查询。
要验证安装:
-
将查询保存为 query.gql:
gqlMATCH (p:Project) WHERE p.full_path STARTS WITH 'your-group/' RETURN p.name, p.full_path LIMIT 10将 your-group/ 替换为您群组的完整路径,并在其后加上 /。
-
发送查询:
shelljq -Rs '{query: ., response_format: "raw"}' query.gql | curl --request POST \ --header "Authorization: Bearer <your_access_token>" \ --header "Content-Type: application/json" \ --data @- \ --url "https://gitlab.example.com/api/v4/orbit/query"将 <your_access_token> 替换为您的个人访问令牌。
首次索引完成后,该查询会返回数据行。在此之前,pod 状态和 /-/readiness 端点就已通过检查,因此它们不能确认索引已完成。
升级 GitLab Orbit
升级会复用图谱数据库。当某个版本更改了 schema 时,GitLab Orbit 会在当前活动版本旁边构建新版本,并在索引完成后切换。请为图谱的第二份副本规划 ClickHouse 磁盘空间。
要升级 GitLab Orbit:
- 运行安装 GitLab Orbit中的 helm upgrade 命令。
- 运行验证安装中的查询。
升级极狐GitLab
升级极狐GitLab 时,请同时升级 Siphon 和 GitLab Orbit。
要升级极狐GitLab:
-
升级极狐GitLab。
-
在 siphon-values.yaml中,将 global.gitlabVersion 设置为新的极狐GitLab 版本,然后升级 Siphon。
-
在 Linux 软件包上,确认极狐GitLab 中的密钥与 Kubernetes 密钥中存储的值一致:
shellsudo cat /var/opt/gitlab/gitlab-rails/etc/gitlab_knowledge_graph_secretshellkubectl -n gitlab-orbit get secret orbit-secrets -o jsonpath='{.data.gitlab-jwt-verifying-key}' | base64 -d