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 默认支持的 kindk3s 集群,你应该保持其当前的默认值 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 参数包含在内时,将会创建一个类型为 NodePortService

你可以使用 --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 的章节

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

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

贡献者

The avatar of contributor named as Neko Ayaka Neko Ayaka

页面历史