跳到主要内容

更多配置

1. 概述

默认安装并不能达到生产集的部署要求。可能还会涉及到 TLS 加密、实例规格的定义等后续操作。

2. TLS加密访问

通常情况下,为了提升访问的安全性,会进行 TLS 加密配置,在 CSGHub Helm Chart 中配置 TLS 加密访问较为简单,主要操作步骤如下:

  1. 准备域名证书

​ 根据部署方式不同,所要准备的域名证书不同,详细参考:域名

  1. 创建 TLS Secret
kubectl -n csghub create secret tls csghub-tls-certs \
--cert=fullchain.pem \
--key=privkey.pem
  1. 升级以应用证书
helm upgrade --install csghub csghub/csghub \
--namespace csghub \
--set global.gateway.external.domain="csghub.example.com" \
--set global.gateway.tls.enabled=true \
--set global.gateway.tls.secretName="csghub-tls-certs"

​ 如果这里申请的是多个证书,可以通过如下方式分别指定:

--set portal.gateway.tls.secretName="portal-tls-certs" \
--set minio.gateway.tls.secretName="minio-tls-certs" \
--set casdoor.gateway.tls.secretName="casdoor-tls-certs"

​ 以上服务未尽数列出。

特别说明:*.csghub.example.com泛域名不适用单域名证书。

3. 实例规格定义

在实例就绪后,如果创建模型推理等实例,就需要用到 GPU 资源,在使用 GPU 资源之前需要定义资源规格。

  • 如果是企业版本,直接在管理员后台 资源管理 或者 算力管理 进行添加即可。实际格式可以参考初始化的资源示例。
  • 如果是社区版本需要在后台数据库进行资源的初始化,详细格式参考

4. 配置使用外置基础设施

CSGHUB 在默认安装时会自动启用一组 内置基础服务(PostgreSQL、Redis、MinIO、Registry、Gitaly 等)。

在生产环境中,通常推荐改为使用 外部托管资源(外置数据库、缓存、对象存储等)以获得更高的可用性与性能。

4.1 内置资源禁用与优先级逻辑

禁用逻辑

  • 通过设置:

    global.<component>.enabled=false
  • 即可禁用对应的内置组件(例如 global.postgresql.enabled=false)。

  • 当该字段为 false 时,Helm 会自动跳过该组件的内置部署(无需额外关闭 postgresql.enabled)。

4.2 默认命名规则

  • 数据库名、存储桶(Bucket)名等 都有默认命名规则,默认格式为csghub-{service}

  • 例如:

    • csghub-server
    • csghub-portal
    • csghub-runner
  • 这些名称不需要在 global 中显式配置。

  • 如果需要修改,可以在各服务的局部配置中指定:

server:
objectStore:
bucket: "my-custom-bucket"

4.3 配置优先级

配置的生效顺序如下:

优先级级别示例
🥇 1服务级 (local)server.objectStore.bucket
🥈 2全局级 (global)global.objectStore.external.endpoint

提示:服务级配置总是优先于全局配置。

5. 配置示例

以下示例展示如何使用外部 PostgreSQL、Redis、MinIO、Registry 等资源。

5.1 PostgreSQL(数据库)

global:
postgresql:
enabled: false
external:
host: "postgres.example.com"
port: 5432
user: "csghub"
password: "StrongPassword"
timezone: "Asia/Shanghai"
sslmode: "prefer"

## 以下配置是各资源默认的数据库配置示例,可以通过修改`database`来指定新的数据库名字。
casdoor:
postgresql:
database: "new_casdoor_database"

temporal:
postgresql:
database: "new_temporal_database"

server:
postgresql:
database: "new_server_database"
portal:
postgresql:
database: "new_portal_database"
dataflow:
dataflow:
postgresql:
database: "new_dataflow_database"
labelStudio:
postgresql:
database: "new_label_studio_database"
csgship:
web:
postgresql:
database: "new_csgship_database"

5.2 Redis(缓存)

global:
redis:
enabled: false
external:
host: "redis.example.com"
port: 6379
password: "RedisStrongPassword"

5.3 MinIO / S3(对象存储)

global:
objectStore:
enabled: false
external:
endpoint: "https://s3.amazonaws.com"
accessKey: "AKIAxxxx"
secretKey: "xxxx"
region: "us-east-1"
secure: true
pathStyle: false

## 以下配置是各资源默认的存储桶配置示例,可以通过修改`bucket`来指定新的存储桶名字。
registry:
objectStore:
bucket: "new-registry-bucket"

server:
objectStore:
bucket: "new-server-bucket"

## 除此之外这里还需要另外一个存储桶 `{service}-public`, 根据 service 自动命名,暂不支持自定义
## 因为这个桶需要公开访问,因此定义了`-public`标识
portal:
objectStore:
bucket: "new-portal-bucket"

runner:
objectStore:
bucket: "new-runner-bucket"

## csgship 当前不在 chart 中单独配置 MinIO bucket,对象存储复用全局配置。

5.4 Registry(镜像仓库)

global:
registry:
enabled: false
external:
registry: "registry.example.com"
repository: "csghub"
username: "user"
password: "pass"
insecure: false

5.5 Gitaly(Git 存储)

global:
gitaly:
enabled: false
external:
scheme: "tcp"
host: "gitaly.example.com"
port: 8075
token: "gitaly_token"
storage: "default"
jwtSecret: "signing-key" # gitlab-shell <-> server JWT 鉴权共享密钥

jwtSecret 默认为 signing-key,用于 gitlab-shell 与 server 之间的 JWT 鉴权。仅在使用外置 Gitaly 且需要自定义密钥时修改。

5.6 Dataflow(数据集处理)

global:
dataflow:
enabled: false
external:
host: "dataflow.example.com"
port: 80

5.7 通过 existingSecret 引用外部 Secret

从 chart 公共库 0.2.8 起,PostgreSQL / Redis / Gitaly / ObjectStore 四类组件额外支持 existingSecret 路径:当 enabled=false 时,可直接指定一个已预先创建的 Kubernetes Secret,模板会从该 Secret 的 data 字段读取连接信息,而不再要求把账号密码以明文形式写在 values.yaml 中。

global:
postgresql:
enabled: false
existingSecret: "my-pg-secret"
redis:
enabled: false
existingSecret: "my-redis-secret"
gitaly:
enabled: false
existingSecret: "my-gitaly-secret"
objectStore:
enabled: false
existingSecret: "my-s3-secret"

Secret 必须提前创建在 release 所在命名空间内,且需要包含如下 key(未列出的可选):

组件Secret data keys
PostgreSQLPOSTGRES_HOST / POSTGRES_PORT / POSTGRES_USER / POSTGRES_PASSWORD / [POSTGRES_SSLMODE]
RedisREDIS_HOST / REDIS_PORT / REDIS_PASSWORD / [REDIS_USER] / [REDIS_DATABASE]
ObjectStoreOBJECT_STORE_ENDPOINT / OBJECT_STORE_ACCESS_KEY / OBJECT_STORE_SECRET_KEY / [OBJECT_STORE_REGION] / [OBJECT_STORE_BUCKET]
GitalyGITALY_HOST / GITALY_PORT / GITALY_TOKEN / [GITALY_STORAGE] / [GITALY_SCHEME]
RegistryREGISTRY_HOST / [REGISTRY_REPOSITORY] / [REGISTRY_USERNAME] / [REGISTRY_PASSWORD]

也可以在服务级覆盖全局的 existingSecret,例如:

global:
postgresql:
enabled: false
existingSecret: "shared-pg-secret"

portal:
postgresql:
existingSecret: "portal-pg-secret" # 服务级覆盖全局

注意:

  • existingSecretexternal 二选一即可;当 existingSecret 非空时,模板以 Secret 中的值为准,external.* 仍可保留用于兼容但不会被读取。
  • 数据库名仍由 chart 各服务自行指定,单个共享 Secret 可同时供多个服务使用。
  • enabled=true(内置模式)时,existingSecret 不生效,chart 会部署自己的实例并使用自动生成的密码。

6. 小结

项目关闭方式外部配置路径命名示例
PostgreSQLglobal.postgresql.enabled=falseglobal.postgresql.externalcsghub_<service>
Redisglobal.redis.enabled=falseglobal.redis.external
MinIO / S3global.objectStore.enabled=falseglobal.objectStore.externalcsghub-<service>
Registryglobal.registry.enabled=falseglobal.registry.external
Gitalyglobal.gitaly.enabled=falseglobal.gitaly.external
Dataflowglobal.dataflow.enabled=falseglobal.dataflow.external