使用 Istio Gateway 安装
本指南提供了在 Kubernetes 上使用 Istio Gateway 部署 vLLM Semantic Router (vsr) 的分步说明。Istio Gateway 底层使用 Envoy,因此可以与 vsr 配合使用。但是,不同的基于 Envoy 的 Gateway 处理 ExtProc 协议的方式有所不同,因此这里描述的部署与其他基于 Envoy 的 Gateway 部署有所不同。将 Istio Gateway 与 vsr 结合有多种架构选项。本文档描述其中一种选项。
架构概览
部署包含以下组件:
- vLLM Semantic Router:为基于 Envoy 的 Gateway 提供智能请求路由和处理决策
- Istio Gateway:Istio 的 Kubernetes Gateway API 实现,底层使用 Envoy 代理
- Gateway API Inference Extension:通过 ExtProc 服务器扩展 Gateway API 用于推理的附加 API
- 两个 vLLM 实例各服务一个模型:此拓扑中用于演示 Semantic Router 的示例后端 LLM
前置条件
开始之前,请确保已安装以下工具:
minikube 或 kind 都可以用于部署本练习所需的本地 kubernetes 集群,因此您只需要其中一个。我们在下面的描述中使用 minikube,但相同的步骤在创建集群后也适用于 Kind 集群。
我们还将在本练习中部署两个不同的 LLM 以更清楚地说明 Semantic Router 和 model routing 功能,因此理想情况下您应该在支持 GPU 的机器上运行本练习,以运行两个模型并具有足够的内存和存储空间。您也可以在较小的服务器上使用等效步骤,在基于 CPU 的服务器上运行较小的 LLM,无需 GPU。
步骤 1:创建 Minikube 集群
通过 minikube(或等效地通过 Kind)创建本地 Kubernetes 集群。
# 创建集群
$ minikube start \
--driver docker \
--container-runtime docker \
--gpus all \
--memory no-limit \
--cpus no-limit
# 验证集群就绪
$ kubectl wait --for=condition=Ready nodes --all --timeout=300s
步骤 2:部署 LLM 模型
在本练习中,我们部署两个 LLM,即 llama3-8b 模型 (meta-llama/Llama-3.1-8B-Instruct) 和 phi4-mini 模型 (microsoft/Phi-4-mini-instruct)。我们使用两个独立的 vLLM 推理服务器 实例在 kubernetes 集群的 default 命名空间中服务这些模型。您可以选择任何其他推理引擎,只要它们暴露 OpenAI API 端点。首先为之前存储在环境变量 HF_TOKEN 中的 HuggingFace 令牌安装密钥,然后如下所示部署模型。请注意,本指南中示例 kubectl 命令中使用的文件路径名称预期从此仓库的顶层文件夹执行。
kubectl create secret generic hf-token-secret --from-literal=token=$HF_TOKEN
# 创建运行 llama3-8b 的 vLLM 服务
kubectl apply -f deploy/kubernetes/istio/vLlama3.yaml
第一次运行时可能需要几分钟(10+)来下载模型,直到运行此模型的 vLLM pod 处于 READY 状态。同样地部署第二个 LLM (phi4-mini) 并等待几分钟直到 pod 处于 READY 状态。
# 创建运行 phi4-mini 的 vLLM 服务
kubectl apply -f deploy/kubernetes/istio/vPhi4.yaml
完成后,您应该能够使用以下命令看到两个 vLLM pod 都处于 READY 状态并正在服务这些 LLM。您还应该看到 Kubernetes 服务暴露了这些模型服务的 IP/端口。在下面的示例中,llama3-8b 模型通过服务 IP 为 10.108.250.109 和端口 80 的 kubernetes 服务提供服务。
# 验证运行两个 LLM 的 vLLM pod 处于 READY 状态并正在服务
kubectl get pods
NAME READY STATUS RESTARTS AGE
llama-8b-57b95475bd-ph7s4 1/1 Running 0 9d
phi4-mini-887476b56-74twv 1/1 Running 0 9d
# 查看这些模型服务的 Kubernetes 服务 IP/端口
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36d
llama-8b ClusterIP 10.108.250.109 <none> 80/TCP 18d
phi4-mini ClusterIP 10.97.252.33 <none> 80/TCP 9d
步骤 3:安装 Istio Gateway、Gateway API、Inference Extension CRDs
我们将在本练习中使用较新版本的 Istio,以便也可以选择使用 Gateway API Inference Extension CRDs 和 EPP 功能的 v1.0.0 GA 版本。
按照 Gateway API Inference Extensions 文档中描述的过程部署 1.28(或更新)版本的 Istio 控制平面、Istio Gateway、Kubernetes Gateway API CRDs 和 Gateway API Inference Extension v1.0.0。但是,不要从该指南安装任何 HTTPRoute 资源或 EndPointPicker,只使用它来部署 Istio gateway 和 CRDs。如果正确安装,您应该使用以下命令看到 gateway api 和 inference extension 的 api CRDs 以及 Istio gateway 和 Istiod 的运行 pods。
kubectl get crds | grep gateway
kubectl get crds | grep inference
kubectl get pods | grep istio
kubectl get pods -n istio-system
步骤 4:更新 vsr 配置
文件 deploy/kubernetes/istio/config.yaml 将在下一步安装 vsr 时用于配置它。确保配置文件中的模型与您使用的模型匹配,并且文件中的 vllm_endpoints 与您正在运行的 llm kubernetes 服务的 ip/端口匹配。通常最好从 vsr 的基本功能开始,如提示词分类和模型路由,然后再尝试其他功能如 PromptGuard 或 ToolCalling。