kollama deploy
kollama deploy
命令用于将 Model
部署到 Kubernetes 集群。它是通过操作 CRD 资源与 Ollama Operator 交互的基本封装和工具类型 CLI。
用例
部署存储于 registry.ollama.ai 镜像仓库上的模型
kollama deploy phi
部署到特定命名空间(namespace)
kollama deploy phi --namespace=production
部署存储于自定义镜像仓库上的模型
kollama deploy phi --image=registry.example.com/library/phi:latest
部署带有暴露 NodePort 服务的 Model
以供外部访问
kollama deploy phi --expose
了解 Model
使用的 NodePort 端口号...
kubectl get svc --selector model.ollama.ayaka.io/name=<model name> -o json | jq ".spec.ports[0].nodePort"
配置期望分配的 NodePort 端口号...
kollama deploy phi --expose --node-port=30000
部署带有暴露 LoadBalancer 服务的 Model
以供外部访问
kollama deploy phi --expose --service-type=LoadBalancer
部署有着资源限制的 Model
下面的示例部署了 phi
模型,并限制 CPU 使用率为 1
个核心,内存使用量为 1Gi
。
kollama deploy phi --limit=cpu=1 --limit=memory=1Gi
选项
--namespace
如果配置了该参数,将会在指定的命名空间中部署 Model
。
--image
默认:registry.ollama.ai/library/<model name>:latest
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 资源都遵循这个格式:
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
:
kollama deploy phi --limit=nvidia.com/gpu=1
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 GPU
使用 amd.com/gpu
可以限制 AMD GPU 的数量,在使用 kollama deploy
时,你可以使用 --limit amd.com/gpu=1
来指定 AMD GPU 的数量为 1
。
kollama deploy phi --limit=amd.com/gpu=1
最终会渲染为:
resources:
limits:
amd.com/gpu: 1 # requesting a GPU
你可以在这里阅读更多:调度 GPUs | Kubernetes
我已经部署过 Model
,但是我想要更改资源限制...
当然可以,用 kubectl set resources
命令来可以更改资源限制:
kubectl set resources deployment -l model.ollama.ayaka.io/name=<model name> --limits cpu=4
改内存限制:
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
kollama deploy phi --storage-class=standard
要给 Model
部署服务关联的 PersistentVolumeClaim
使用的 StorageClass
。
如果没有指定,则会使用 默认的 StorageClass
。
--pv-access-mode
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
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
kollama deploy phi --expose --service-type=NodePort
默认:NodePort
暴露所部署的 Model
服务时所连带创建的 Service
类型。有且仅有当 --expose
被指定时,该参数才会生效。
如果没有指定该参数,那么创建时,将会默认使用 NodePort
类型的服务。
了解有多少服务与 Model
相关联...
kubectl get svc --selector ollama.ayaka.io/type=model
可以指定为 LoadBalancer
来暴露一个 LoadBalancer
类型的服务。
--service-name
kollama deploy phi --expose --service-name=phi-svc-nodeport
默认:ollama-model-<model name>-<service type>
如果未指定,则将使用 Model
名称作为服务名称,并将 -nodeport
作为 NodePort
类型的服务的后缀。
--node-port
kollama deploy phi --expose --service-type=NodePort --node-port=30000
默认:随机协商的端口
了解 Model
使用的 NodePort
端口号...
kubectl get svc --selector model.ollama.ayaka.io/name=<model name> -o json | jq ".spec.ports[0].nodePort"
并不可以随便指定端口号哦!
有这么几个限制是存在的:
- 默认情况下
30000-32767
是 Kubernetes 集群中的NodePort
端口范围。如果你想要使用这个范围之外的端口,你需要在集群中配置--service-node-port-range
参数。 - 你不能使用已经被其他服务占用的端口号。
有关自己选择端口号的更多信息,请参考 Kubernetes 官方文档有关 nodePort
的章节。
暴露 Model
为 NodePort
类型的服务时所使用的指定的 nodePort
端口号。
如果没有指定,将分配一个随机端口。该参数有且仅有在 --expose
指定,或者 --service-type
设置为 NodePort
时才有效。