Skip to content

kollama deploy ​

kollama deploy 命令用于将 Model 部署到 Kubernetes 集群。它是通过操作 CRD 资源与 Ollama Operator 交互的基本封装和工具类型 CLI。

用例 ​

部署存储于 registry.ollama.ai 镜像仓库上的模型 ​

shell
kollama deploy phi

部署到特定命名空间(namespace) ​

shell
kollama deploy phi --namespace=production

部署存储于自定义镜像仓库上的模型 ​

shell
kollama deploy phi --image=registry.example.com/library/phi:latest

部署带有暴露 NodePort 服务的 Model 以供外部访问 ​

shell
kollama deploy phi --expose

了解 Model 使用的 NodePort 端口号...

shell
kubectl get svc --selector model.ollama.ayaka.io/name=<model name> -o json | jq ".spec.ports[0].nodePort"

配置期望分配的 NodePort 端口号...

shell
kollama deploy phi --expose --node-port=30000

部署带有暴露 LoadBalancer 服务的 Model 以供外部访问 ​

shell
kollama deploy phi --expose --service-type=LoadBalancer

部署有着资源限制的 Model ​

下面的示例部署了 phi 模型,并限制 CPU 使用率为 1 个核心,内存使用量为 1Gi。

shell
kollama deploy phi --limit=cpu=1 --limit=memory=1Gi

选项 ​

--namespace ​

如果配置了该参数,将会在指定的命名空间中部署 Model。

--image ​

默认:registry.ollama.ai/library/<model name>:latest

shell
kollama deploy phi --image=registry.ollama.ai/library/phi:latest

要部署的模型镜像。

  • 如果未指定,将使用 Model 名称作为镜像名称(如果未指定镜像仓库(Registry),这个时候会默认从 registry.ollama.ai/library/<model name> 拉取)。例如,如果 Model 名称是 phi,最终获取的镜像名称将是 registry.ollama.ai/library/phi:latest。
  • 如果没有指定,标签将会使用 latest 的。

--limit(支持多次使用) ​

多次使用该选项可指定多个资源限制。

为即将部署的 Model 指定资源限制。这对于没有足够多资源的集群,或者是希望在有限资源的集群中部署多个 Model 是非常有用的。

对于 NVIDIA、AMD GPU 的资源限制...

在 Kubernetes 中,任何 GPU 资源都遵循这个格式:

yaml
resources:
  limits:
    gpu-vendor.example/example-gpu: 1 # requesting 1 GPU

使用 nvidia.com/gpu 可以限制 NVIDIA GPU 的数量,因此,在使用 kollama deploy 时,你可以使用 --limit nvidia.com/gpu=1 来指定 NVIDIA GPU 的数量为 1:

shell
kollama deploy phi --limit=nvidia.com/gpu=1
yaml
resources:
  limits:
    nvidia.com/gpu: 1 # requesting 1 GPU #

有关配合 nvidia/k8s-device-plugin 使用资源标签的文档

使用 amd.com/gpu 可以限制 AMD GPU 的数量,在使用 kollama deploy 时,你可以使用 --limit amd.com/gpu=1 来指定 AMD GPU 的数量为 1。

shell
kollama deploy phi --limit=amd.com/gpu=1

最终会渲染为:

yaml
resources:
  limits:
    amd.com/gpu: 1 # requesting a GPU  #

关于配合 ROCm/k8s-device-plugin 使用 Label 的 YAML 配置文件的示例

你可以在这里阅读更多:调度 GPUs | Kubernetes

我已经部署过 Model,但是我想要更改资源限制...

当然可以,用 kubectl set resources 命令来可以更改资源限制:

shell
kubectl set resources deployment -l model.ollama.ayaka.io/name=<model name> --limits cpu=4

改内存限制:

shell
kubectl set resources deployment -l model.ollama.ayaka.io/name=<model name> --limits memory=8Gi

格式是 <resource>=<quantity>.

比如:--limit=cpu=1 --limit=memory=1Gi.

--storage-class ​

shell
kollama deploy phi --storage-class=standard

要给 Model 部署服务关联的 PersistentVolumeClaim 使用的 StorageClass。

如果没有指定,则会使用 默认的 StorageClass。

--pv-access-mode ​

shell
kollama deploy phi --pv-access-mode=ReadWriteMany

用于给 Ollama Operator 所创建的 image store 的 StatefulSet 资源所关联的 PersistentVolume 所使用的 访问模式(Access mode)。

如果未指定,则默认使用 ReadWriteOnce 作为访问模式(Access mode)的值。

如果你会将 Model 部署到 Ollama Operator 默认支持的 kind 和 k3s 集群,你应该保持其当前的默认值 ReadWriteOnce。有且仅有当你部署到一个自托管的集群的时候,且 StorageClass 支持时,就可以指定访问模式为 ReadWriteMany。

--expose ​

默认:false

shell
kollama deploy phi --expose

是否通过服务公开 Model 所暴露的接口供外部访问,使其方便与 Model 交互。

其实创建 Model 资源时,也会创建一个 ClusterIP 类型的服务

在没有指定 --expose 情况下,在为 Model 创建资源时,Ollama Operator 也默认将为 Model 创建一个用于集群中其他服务内部直接请求到 Model 的关联服务,方便其他服务直接与之进行集成,其类型为 ClusterIP,名称与 Model 所关联的 Deployment 的名称(也就是 ollama-model-<model name>)相同。

默认情况下,--expose 参数包含在内时,将会创建一个类型为 NodePort 的 Service。

你可以使用 --service-type 参数加上 LoadBalancer 值(也就是 --service-type=LoadBalancer)来创建一个 LoadBalancer 类型的 Service。

--service-type ​

shell
kollama deploy phi --expose --service-type=NodePort

默认:NodePort

暴露所部署的 Model 服务时所连带创建的 Service 类型。有且仅有当 --expose 被指定时,该参数才会生效。

如果没有指定该参数,那么创建时,将会默认使用 NodePort 类型的服务。

了解有多少服务与 Model 相关联...

shell
kubectl get svc --selector ollama.ayaka.io/type=model

可以指定为 LoadBalancer 来暴露一个 LoadBalancer 类型的服务。

--service-name ​

shell
kollama deploy phi --expose --service-name=phi-svc-nodeport

默认:ollama-model-<model name>-<service type>

暴露 Model 所使用的 Service 的名称。

如果未指定,则将使用 Model 名称作为服务名称,并将 -nodeport 作为 NodePort 类型的服务的后缀。

--node-port ​

shell
kollama deploy phi --expose --service-type=NodePort --node-port=30000

默认:随机协商的端口

了解 Model 使用的 NodePort 端口号...

shell
kubectl get svc --selector model.ollama.ayaka.io/name=<model name> -o json | jq ".spec.ports[0].nodePort"

并不可以随便指定端口号哦!

有这么几个限制是存在的:

  1. 默认情况下 30000-32767 是 Kubernetes 集群中的 NodePort 端口范围。如果你想要使用这个范围之外的端口,你需要在集群中配置 --service-node-port-range 参数。
  2. 你不能使用已经被其他服务占用的端口号。

有关自己选择端口号的更多信息,请参考 Kubernetes 官方文档有关 nodePort 的章节。

暴露 Model 为 NodePort 类型的服务时所使用的指定的 nodePort 端口号。

如果没有指定,将分配一个随机端口。该参数有且仅有在 --expose 指定,或者 --service-type 设置为 NodePort 时才有效。

贡献者

The avatar of contributor named as Neko Ayaka Neko Ayaka

页面历史