安装部署
快速安装
使用下述命令可以快速部署一个可用的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 等应用所必须的组件。如果您是云环境,可以考虑使用云提供的类似组件。
安装核心组件
安装自定义资源
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安装核心组件
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
作为默认网络组件。
安装 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配置 Knative Serving 使用 Kourier 作为默认网络组件
kubectl patch configmap/config-network \
--namespace knative-serving \
--type merge \
--patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'获取对外访问地址
# 使用 NodePort (如果需要)
kubectl patch service kourier -n kourier-system -p '{"spec": {"type": "NodePort"}}'
# 查看资源状态
kubectl --namespace kourier-system get service kourier注意:如果您是本地 Kubernetes 集群,请修改服务类型为 NodePort 。
验证安装
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 中进行封装。
详细操作如下:
创建包含自签 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.crtPatch 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
配置 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
服务。配置 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注意:此配置直接生效,无须重启
测试配置
ctr images pull --hosts-dir "/etc/containerd/certs.d" registry.example.com:5000/image_name:tag