跳到主要内容

安装部署

快速安装

使用下述命令可以快速部署一个可用的csghub环境。

# <domain>: like example.com
curl -sfL https://raw.githubusercontent.com/OpenCSGs/csghub-installer/refs/heads/main/helm-chart/install.sh | bash -s -- <domain>

# If enable Nvidia GPU
curl -sfL https://raw.githubusercontent.com/OpenCSGs/csghub-installer/refs/heads/main/helm-chart/install.sh | ENABLE_NVIDIA_GPU=true bash -s -- <domain>

手动安装

安装 KNative Serving

注意:如果最终部署实例的集群并非此 Kubernetes 集群,请安装 KNative Serving 到目标集群。

KNative Serving 是 CSGHub 创建 Space 等应用所必须的组件。如果您是云环境,可以考虑使用云提供的类似组件。

安装核心组件

  1. 安装自定义资源

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.15.2/serving-crds.yaml

    # 如果无法正常拉取 gcr.io 镜像,请使用如下命令
    kubectl apply -f https://raw.githubusercontent.com/OpenCSGs/CSGHub-helm/main/knative/serving-crds.yaml
  2. 安装核心组件

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.15.2/serving-core.yaml

    # 如果无法正常拉取 gcr.io 镜像,请使用如下命令
    kubectl apply -f https://raw.githubusercontent.com/OpenCSGs/CSGHub-helm/main/knative/serving-core.yaml

安装网络组件

这里选择 Kourier作为默认网络组件。

  1. 安装 kourier controller

    kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.15.1/kourier.yaml

    # 如果无法正常拉取 gcr.io 镜像,请使用如下命令
    kubectl apply -f https://raw.githubusercontent.com/OpenCSGs/CSGHub-helm/main/knative/kourier.yaml
  2. 配置 Knative Serving 使用 Kourier 作为默认网络组件

    kubectl patch configmap/config-network \
    --namespace knative-serving \
    --type merge \
    --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
  3. 获取对外访问地址

    # 使用 NodePort (如果需要)
    kubectl patch service kourier -n kourier-system -p '{"spec": {"type": "NodePort"}}'

    # 查看资源状态
    kubectl --namespace kourier-system get service kourier

    注意:如果您是本地 Kubernetes 集群,请修改服务类型为 NodePort 。

  4. 验证安装

    kubectl get pods -n knative-serving

配置 DNS

通常情况下 Knative Serving 服务可以使用Magic DNS或者Real DNS等解析内部地址,但是此处由于多集群管理集成的特性,仅能通过Real DNS方式进行配置。

# Replace knative.example.com with your domain suffix
kubectl patch configmap/config-domain \
--namespace knative-serving \
--type merge \
--patch '{"data":{"app.internal":""}}'

自动缩放

kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.15.2/serving-hpa.yaml

# 如果无法正常拉取 gcr.io 镜像,请使用如下命令
kubectl apply -f https://raw.githubusercontent.com/OpenCSGs/CSGHub-helm/main/knative/serving-hpa.yaml

创建 KubeConfig Secret

同样由于 CSGHub 需要具备对接多 Kubernetes 集群的能力,因此仅能通过 .kube/config 文件连接多集群,而无法使用 serviceAccount。为了保证 .kube/config 的安全性,需要您自行创建 secrets 并提供给 helm。

创建之前请将您所有对接的所有 Kubernetes 集群的 config 文件放置于目标文件下,例如 .kube 目录,您可以使用不同的 config 文件名,例如对文件名进行编号。

kubectl create ns csghub 
kubectl create secret generic kube-configs --from-file=/root/.kube/ --namespace=csghub

以上命令会将 .kube 目录下所有 config 文件创建到 kube-configs Secret 资源中。

安装 CSGHub Helm Chart

在进行如下操作前,以上操作您必须要准备就绪。

  • 添加 helm 仓库

    helm repo add csghub https://opencsgs.github.io/CSGHub-helm
    helm repo update
  • 安装 Chart

    默认服务暴露使用 NodePort 的方式,因为本地测试环境大多不具备 LoadBalancer 能力。

    # global.ingress.hosts: Replace with your own second-level domain name
    # global.builder.internal[0].domain: The internal domain name configured above
    # global.builder.internal[0].service.host: The external address of the kourier service
    # global.builder.internal[0].service.port: Kourier service external port

    helm install csghub csghub/csghub \
    --namespace csghub \
    --create-namespace \
    --set global.ingress.hosts=example.com \
    --set global.builder.internal[0].domain=app.internal \
    --set global.builder.internal[0].service.host=192.168.18.18 \
    --set global.builder.internal[0].service.port=30463

    提示:

    • 待资源就绪后,即可根据 helm 输出提示登录 csghub。需要进一步说明的是,部分功能因为启用复杂性,在当前 helm chart 中并未完全准备好,需要进行进一步配置,例如模型推理、模型微调,功能已经启用,但是可能仍然需要一些配置才能正常运行实例等。详细请联系工程师。

    • 如果您使用的是外部的使用自签证书的 Container Registry(暂不支持非加密的 Registry),请按照标签解析进一步配置 KNative Serving,此步骤后面会在 helm chart 中进行封装。

      详细操作如下:

      1. 创建包含自签 CA 证书的 TLS Secret

        kubectl -n knative-serving create secret generic customca --from-file=ca.crt=/root/ca.crt

        # 如果使用的是内置的 registry,暂时也需要手动执行以上类似步骤。
        kubectl -n csghub get secret csghub-registry-tls-secret -ojsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
        kubectl -n knative-serving create secret generic customca --from-file=ca.crt=/root/ca.crt
      2. Patch KNative Serving Controller Deploymnet

        kubectl -n knative-serving patch deploy controller -p '[
        {
        "op": "add",
        "path": "/spec/template/spec/containers/0/env/-",
        "value": {
        "name": "SSL_CERT_DIR",
        "value": "/opt/certs/x509"
        }
        },
        {
        "op": "add",
        "path": "/spec/template/spec/containers/0/volumeMounts/-",
        "value": {
        "name": "custom-certs",
        "mountPath": "/opt/certs/x509"
        }
        },
        {
        "op": "add",
        "path": "/spec/template/spec/volumes/-",
        "value": {
        "name": "custom-certs",
        "secret": {
        "secretName": "customca"
        }
        }
        }
        ]' --type=json
  • 安装后配置

    此 helm chart 虽然内置了简易的提供测试的 Container Registry 程序,但并不提供可靠的加密访问。您仍然需要通过更多配置才能正常从 Registry 中拉镜像。生产环境请自行准备 Registry。

    • 配置 containerd 允许访问采用非安全加密的 Registry。

      配置前请确认配置文件/etc/containerd/config.toml是否存在,如果不存在可以通过如下命令进行创建。

      mkdir -p /etc/containerd/ && containerd config default >/etc/containerd/config.toml
      1. 配置 config_path

        • containerd 2.x
        version = 3

        [plugins."io.containerd.cri.v1.images".registry]
        config_path = "/etc/containerd/certs.d"
        • Containerd 1.x
        version = 2

        [plugins."io.containerd.grpc.v1.cri".registry]
        config_path = "/etc/containerd/certs.d"

        此配置需要重启containerd服务。

      2. 配置 hosts.toml

        mkdir /etc/containerd/certs.d/registry.example.com:32500 # 此端口为此 helm 内置 NodePort 端口,可以通过--set global.registry.service.nodePort=32500 进行修改

        cat <<EOF > /etc/containerd/certs.d/registry.example.com:32500/hosts.toml
        server = "https://registry.example.com:5000"

        [host."http://192.168.170.22:5000"]
        capabilities = ["pull", "resolve", "push"]
        skip_verify = true
        EOF

        注意:此配置直接生效,无须重启

      3. 测试配置

        ctr images pull --hosts-dir "/etc/containerd/certs.d" registry.example.com:5000/image_name:tag