使用 Gateway API Inference Extension 安装
本指南提供了将 vLLM Semantic Router (vSR) 与 Istio 和 Kubernetes Gateway API Inference Extension (GIE) 集成的分步说明。这种强大的组合允许您使用 Kubernetes 原生 API 管理自托管的 OpenAI 兼容模型,实现高级的 load-aware routing。
架构概览
部署包含三个主要组件:
- vLLM Semantic Router:基于请求内容对传入请求进行分类的智能核心。
- Istio & Gateway API:网络网格和所有进入集群流量的前门。
- Gateway API Inference Extension (GIE):用于管理和扩展自托管模型后端的 Kubernetes 原生 API 集(
InferencePool等)。
集成优势
将 vSR 与 Istio 和 GIE 集成,为服务 LLM 提供了一个强大的 Kubernetes 原生解决方案,具有以下关键优势:
1. Kubernetes 原生 LLM 管理
使用熟悉的自定义资源定义 (CRD) 通过 kubectl 直接管理您的模型、路由和扩展策略。
2. 智能模型和副本路由
结合 vSR 基于提示词的模型路由与 GIE 的智能负载感知副本选择。这确保请求不仅发送到正确的模型,还发送到最健康的副本,一次高效跳转完成所有操作。
3. 保护模型免受过载
内置调度器跟踪 GPU 负载和请求队列,在高需求时自动卸载流量,防止模型服务器崩溃。
4. 深度可观测性
从高级别 Gateway 指标和详细的 vSR 性能数据(如 token 使 用和分类准确性)获取洞察,以监控和排查整个 AI 堆栈。
5. 安全的多租户
使用标准 Kubernetes 命名空间和 HTTPRoute 隔离租户工作负载。在共享公共安全网关基础设施的同时应用速率限制和其他策略。
支持的后端模型
此架构旨在与任何暴露 OpenAI 兼容 API 的自托管模型配合使用。本指南中的演示模型使用 vLLM 服务 Llama3 和 Phi-3,但您可以轻松地用自己的模型服务器替换它们。
前置条件
开始之前,请确保已安装以下工具:
- Docker 或其他容器运行时。
- kind v0.22+ 或任何 Kubernetes 1.29+ 集群。
- kubectl v1.30+。
- Helm v3.14+。
- istioctl v1.28+。
- 存储在
HF_TOKEN环境变量中的 Hugging Face 令牌,示例 vLLM 部署需要它来下载模型。
您可以使用以下命令验证工具链版本:
kind version
kubectl version --client --short
helm version --short
istioctl version --remote=false
步骤 1:创建 Kind 集群(可选)
如果您没有 Kubernetes 集群,可以创建一个本地集群进行测试:
kind create cluster --name vsr-gie
# 验证集群就绪
kubectl wait --for=condition=Ready nodes --all --timeout=300s
步骤 2:安装 Istio
安装支持 Gateway API 和外部处理的 Istio:
# 下载并安装 Istio
export ISTIO_VERSION=1.29.0
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=$ISTIO_VERSION sh -
export PATH="$PWD/istio-$ISTIO_VERSION/bin:$PATH"
istioctl install -y --set profile=minimal --set values.pilot.env.ENABLE_GATEWAY_API=true
# 验证 Istio 就绪
kubectl wait --for=condition=Available deployment/istiod -n istio-system --timeout=300s
步骤 3:安装 Gateway API & GIE CRDs
安装标准 Gateway API 和 Inference Extension 的自定义资源定义 (CRD):
# 安装 Gateway API CRDs
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
# 安装 Gateway API Inference Extension CRDs
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.1.0/manifests.yaml
# 验证 CRDs 已安装
kubectl get crd | grep 'gateway.networking.k8s.io'
kubectl get crd | grep 'inference.networking.k8s.io'
步骤 4:部署演示 LLM 服务器
部署两个 vLLM 实例(Llama3 和 Phi-3)作为后端。它们将从 Hugging Face 自动下载。
# 为模型创建命名空间和密钥
kubectl create namespace llm-backends --dry-run=client -o yaml | kubectl apply -f -
kubectl -n llm-backends create secret generic hf-token --from-literal=token=$HF_TOKEN
# 部署模型服务器
kubectl -n llm-backends apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/istio/vLlama3.yaml
kubectl -n llm-backends apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/istio/vPhi4.yaml
# 等待模型就绪(可能需要几分钟)
kubectl -n llm-backends wait --for=condition=Ready pods --all --timeout=10m
步骤 5:部署 vLLM Semantic Router
使用官方 Helm chart 部署 vLLM Semantic Router。此组件将作为 ext_proc 服务器运行,Istio 调用它进行路由决策。
helm upgrade -i semantic-router oci://ghcr.io/vllm-project/charts/semantic-router \
--version v0.0.0-latest \
--namespace vllm-semantic-router-system \
--create-namespace \
-f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/ai-gateway/semantic-router-values/values.yaml
# 等待路由就绪
kubectl -n vllm-semantic-router-system wait --for=condition=Available deploy/semantic-router --timeout=10m
步骤 6:部署 Gateway 和路由逻辑
应用最后一组资源来创建面向公众的 Gateway 并将所有组件连接在一起。这包括 Gateway、GIE 的 InferencePools、流量匹配的 HTTPRoutes 和 Istio 的 EnvoyFilter。
# 应用所有路由和网关资源
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/istio/gateway.yaml
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/llmd-base/inferencepool-llama.yaml
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/llmd-base/inferencepool-phi4.yaml
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/llmd-base/httproute-llama-pool.yaml
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/llmd-base/httproute-phi4-pool.yaml
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/istio/destinationrule.yaml
kubectl apply -f https://raw.githubusercontent.com/vllm-project/semantic-router/main/deploy/kubernetes/istio/envoyfilter.yaml
# 验证 Gateway 已被 Istio 编程
kubectl wait --for=condition=Programmed gateway/inference-gateway --timeout=120s