安装前配置

准备 GitLab 服务

在 Alauda AI 中,GitLab 是模型管理的核心组件。部署 Alauda AI 之前,您必须准备一个 GitLab 服务。

部署选项

1. GitLab 服务要求

无论采用何种部署方式,所有 GitLab 实例必须满足:

  • 版本:必须是 v15 或更高版本
  • 协议:必须使用 HTTPS。配置说明请参考 配置 HTTPS
  • Git LFS:必须启用。配置说明请参考 使用 LFS 管理大文件
  • 托管方式:必须是自托管(不支持公有云托管的 GitLab 服务)。
  • 访问令牌禁用访问令牌的过期时间

2. 使用平台提供的插件

使用 ‘Alauda Build of GitLab’ 插件部署新的 GitLab 服务。详细操作请参考:部署 Alauda Build of GitLab

3. 使用自有 GitLab 服务

或者,您也可以使用自管理的 GitLab 实例,但必须满足 GitLab 服务要求

GitLab 配置

在部署 Alauda AI 之前,获取服务后请完成以下 GitLab 配置步骤。

1. 禁用访问令牌的过期时间

如果 GitLab 版本为 v17.0 或更高版本,需要禁用访问令牌的过期时间

WARNING

如果访问令牌的过期时间未禁用,管理员令牌至少需要每年手动刷新一次,否则 Alauda AI 可能会停止工作。

禁用新访问令牌过期时间的步骤:

  1. 在左侧边栏底部选择 Admin
  2. 选择 Settings > General
  3. 展开 Account and limit
  4. 取消勾选 Personal / Project / Group access token expiration 复选框。
  5. 点击 Save changes

2. 生成新令牌

生成管理员的模拟令牌步骤:

  1. 在左侧边栏底部选择 Admin
  2. 选择 Overview > Users
  3. 选择管理员用户(例如 Administrator)。
  4. 在顶部导航栏选择 Impersonation Tokens
  5. 点击 Add new token
  6. 在弹出表单中:
    1. 输入 Alauda AI 的 Token name(例如 aml-root)。
    2. 移除 Expiration Date(点击“x”图标移除过期时间)。
    3. 勾选 所有 权限范围(特别是 api 权限)。
  7. 点击 Create impersonation token
  8. 保存弹窗中显示的新生成令牌,后续需要使用。
WARNING

请务必保存新生成的令牌——之后无法再次查看。

3. 为管理员令牌创建 kubernetes secret

接着,在 cpaas-system 命名空间下创建名为 aml-gitlab-admin-token 的 secret:

# 请将 ${TOKEN} 替换为之前保存的真实令牌
kubectl create secret generic aml-gitlab-admin-token \
  --from-literal="password=${TOKEN}" \
  -n cpaas-system
  1. 创建名为 aml-gitlab-admin-token 的 GitLab 管理员令牌 secret。
  2. 令牌保存在 password 键中,请将 ${TOKEN} 替换为之前保存的真实令牌。
  3. secret 创建在 cpaas-system 命名空间下。

常见问题解答(FAQ)

1. 如何优化 GitLab 18.5 及以上版本以支持大容量 LFS 对象?

问题描述:
向 GitLab 18.5 及以上版本推送大容量 LFS 对象时,可能会遇到 HTTP 413 错误。AI 模型管理中,通常需要通过 LFS 上传超出 Nginx ingress 控制器默认 proxy-body-size 限制(通常为 512M)的超大模型文件(这些 Nginx ingress 注解通常与版本无关,也适用于其他遇到 LFS 上传大小限制的 GitLab 版本)。

以下是 Git LFS 客户端的真实诊断输出,%!!(string=...) 片段为 Go 语言格式化残留,可忽略,重点关注 HTTP 413 响应错误。

 git push origin main
Locking support detected on remote "origin". Consider enabling it with:
  $ git config lfs.https://gitlab-18-5-aml.alaudatech.net/mlops-demo-ai-test/amlmodels/qa.git/info/lfs.locksverify true
LFS: Client error &{%!!(string=https) %!!(string=) %!!(*url.Userinfo=<nil>) %!!(string=gitlab-18-5-aml.alaudatech.net) %!!(string=/mlops-demo-ai-test/amlmodels/qa.git/gitlab-lfs/objects/fdf756fa7fcbe7404d5c60e26bff1a0c8b8aa1f72ced49e7dd0210fe288fb7fe/988097824) %!!(string=) %!!(bool=false) %!!(bool=false) %!!(string=) %!!(string=) %!!(string=)}s(MISSING) from HTTP 413
Uploading LFS objects:   0% (0/1), 0 B | 0 B/s, done.
error: failed to push some refs to 'https://gitlab-18-5-aml.alaudatech.net/mlops-demo-ai-test/amlmodels/qa.git'

解决方案:
为支持大文件上传并提升整体性能,需要在 GitLab 服务的 Nginx Ingress 上配置特定注解。

Ingress 注解参数

以下是推荐的 Ingress 参数及其功能说明:

参数推荐值说明
nginx.ingress.kubernetes.io/proxy-body-size"0"关闭客户端请求体大小限制,允许上传任意大小文件(对 AI 模型至关重要)。
nginx.ingress.kubernetes.io/proxy-buffering"off"关闭代理缓冲,提升大请求响应速度,允许数据直接流向客户端/服务器。
nginx.ingress.kubernetes.io/proxy-read-timeout"3600"将读取代理服务器响应的超时时间设置为 1 小时,防止长时间操作超时。
nginx.ingress.kubernetes.io/proxy-request-buffering"off"关闭客户端请求体缓冲,数据直接传递给上游服务器,减少 ingress 控制器内存占用。
nginx.ingress.kubernetes.io/proxy-send-timeout"3600"将向代理服务器发送请求的超时时间设置为 1 小时,支持长时间上传。

配置步骤

您可以通过更新 GitLabOfficial 自定义资源(CR)来应用这些优化。

1. 通过 kubectl patch 命令应用

使用以下命令直接更新 GitLabOfficial CR 中的 ingress 注解:

# 更新 GitLabOfficial CR,添加优化的 ingress 注解
# [!code callout:1,2]
kubectl patch gitlabofficial your-instance-name -n your-instance-namespace --type=merge -p '{
  "spec": {
    "helmValues": {
      "global": {
        "ingress": {
          "annotations": {
            "nginx.ingress.kubernetes.io/proxy-body-size": "0",
            "nginx.ingress.kubernetes.io/proxy-buffering": "off",
            "nginx.ingress.kubernetes.io/proxy-read-timeout": "3600",
            "nginx.ingress.kubernetes.io/proxy-request-buffering": "off",
            "nginx.ingress.kubernetes.io/proxy-send-timeout": "3600"
          }
        }
      }
    }
  }
}'
  1. your-instance-name 替换为您的 GitLabOfficial 实例名称(例如 gitlab-aml)。
  2. your-instance-namespace 替换为您的 GitLabOfficial 实例所在命名空间(例如 gitlab-system-aml)。

2. YAML 结构参考

以下为 GitLabOfficial CR specingress.annotations 的层级结构示例:

apiVersion: gitlab.alauda.io/v1alpha1
kind: GitLabOfficial
metadata:
  name: gitlab-aml
  namespace: gitlab-system-aml
spec:
  # ... 其他配置 ...
  helmValues:
    global:
      ingress:
        annotations:
          nginx.ingress.kubernetes.io/proxy-body-size: "0"
          nginx.ingress.kubernetes.io/proxy-buffering: "off"
          nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
          nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
          nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
  1. 这些优化确保 GitLab 18.5 能顺利处理通过 Git LFS 上传的大型 AI 模型文件,并提升整体数据传输稳定性。
  2. 强烈建议在 GitLab 初次部署时应用这些配置,避免后期运维问题。