全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:在 Knative 中基于 AI 推理网关实现 LLM 服务部署与智能路由

更新时间:Feb 03, 2026

ACK Gateway with Inference Extension 组件基于 Kubernetes Gateway API 及 Inference Extension 规范实现。结合 Knative Serverless 架构,该方案能够简化生成式 AI 推理服务的管理流程,支持在多个推理服务工作负载之间进行高效的七层路由和负载均衡,并根据请求并发数实现 GPU 资源的弹性伸缩。

工作原理

Gateway with Inference Extension 通过以下 CRD 扩展了 Gateway API 的能力,以适应 AI 推理场景。

  • InferencePool:逻辑上对 AI 模型服务资源进行分组。代表一组共享相同计算配置、加速器类型、基础模型和模型服务器的 Pod。一个 InferencePool 可跨越多个节点,提供高可用性。

  • InferenceObjective:定义模型服务的属性和目标。指定了 InferencePool 中 Pod 提供服务的模型名称以及关键性等级(Criticality)。标记为 Critical 的工作负载将获得优先处理。

在 Knative 中,通过启用 AI 网关Annotation,Knative Service 将自动对接上述能力,实现流量的智能调度。

准备工作

  • 已创建ACK托管集群Pro版且符合以下要求:

  • 创建OSS Bucket

    建议选择与集群相同的地域,可免内网流量费用,同时减少跨地域传输延迟。

步骤一:在 Knative 中开启 Gateway API 支持

修改 Knative 的网络配置,指定使用 Gateway API 作为 Ingress 控制器。

  1. 编辑config-network 的 ConfigMap。

    kubectl edit configmap config-network -n knative-serving
  2. data 字段下,修改ingress.class,然后保存修改。

    apiVersion: v1
    data:
      ...
      # 修改ingress.class,使用Gateway API作为Ingress Controller
      ingress.class: gateway-api.ingress.networking.knative.dev 
      ...
    kind: ConfigMap
    metadata:
      name: config-network
      namespace: knative-serving
      ...

    image

  3. 查看修改是否生效。

    kubectl get configmap config-network -n knative-serving -o yaml | grep "ingress.class"

    预期输出:

      ingress.class: gateway-api.ingress.networking.knative.dev

步骤二:创建推理网关资源

创建 Gateway 资源以监听外部请求。本示例配置网关监听 8888 端口。

  1. 创建网关配置文件knative-gateway.yaml

    kind: Gateway
    apiVersion: gateway.networking.k8s.io/v1
    metadata:
      name: knative-gateway
      namespace: knative-serving
    spec:
      gatewayClassName: ack-gateway
      listeners:
      - name: default
        port: 80
        protocol: HTTP
        allowedRoutes:
          namespaces:
            from: All
      - name: llm-gw
        protocol: HTTP
        # 推理服务监听端口
        port: 8888  
        allowedRoutes:
          namespaces:
            from: All
  2. 部署网关资源。

    kubectl apply -f knative-gateway.yaml
  3. 查看网关状态。

    kubectl get gateway knative-gateway -n knative-serving

    输出中,确保 PROGRAMMEDTrue 且已分配 IP 地址(ADDRESS字段)。

    NAME              CLASS         ADDRESS        PROGRAMMED   AGE
    knative-gateway   ack-gateway   47.XX.XX.198   True         22s

步骤三:准备模型数据并配置存储

为避免容器启动时重复下载模型,建议使用 OSS 静态存储卷挂载模型数据。

1. 下载模型并上传至 OSS

本步骤以 Qwen1.5-4B-Chat 模型为例。可临时购买一台ECS实例用于准备模型数据并在使用完成后释放

  1. 下载模型到本地

    # 安装 Git LFS
    sudo yum install -y git git-lfs
    git lfs install
    
    # 克隆模型仓库(跳过校验以加速)
    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
    
    # 下载实际的大文件
    cd Qwen1.5-4B-Chat
    git lfs pull
  2. 使用 ossutil 将模型上传至 OSS Bucket。

    请将<Bucket-Name>替换为实际 OSS Bucket 名称。

    如需安装ossutil,请参见安装ossutil
    # 创建目录
    ossutil mkdir oss://<Bucket-Name>/models/Qwen1.5-4B-Chat
    
    # 上传文件(-r 表示递归上传)
    ossutil cp -r ./ oss://<Bucket-Name>/models/Qwen1.5-4B-Chat

2. 配置PV和PVC

为提高模型加载性能,本示例创建 OSS 静态存储卷。操作详见使用ossfs 1.0静态存储卷

  1. 创建 OSS 访问凭证(Secret)。

    请替换 <AccessKey-ID> 和 <AccessKey-Secret> 为实际信息。

    kubectl create secret generic oss-secret \
      --from-literal=akId='<AccessKey-ID>' \
      --from-literal=akSecret='<AccessKey-Secret>' \
      --namespace default
  2. 创建文件 oss-storage.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: llm-model
      labels:
        alicloud-pvname: llm-model
    spec:
      capacity:
        storage: 30Gi
      # 访问模式
      accessModes:
        - ReadWriteMany            
      persistentVolumeReclaimPolicy: Retain
      storageClassName: oss
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: llm-model
        # 通过Secret对象来获取AccessKey信息
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          # 请替换为实际OSS Bucket 名称
          bucket: "<Your-Bucket-Name>"         
          # Bucket所在地域的Endpoint
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com" 
          # OSS 中的相对路径
          path: "/models/Qwen1.5-4B-Chat"     
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: llm-model
      namespace: default
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: oss
      resources:
        requests:
          # 声明存储容量,不能大于存储卷总量
          storage: 30Gi
      selector:
        matchLabels:
          # 通过PV标签精确匹配PV
          alicloud-pvname: llm-model
  3. 部署PV和PVC。

    kubectl apply -f oss-storage.yaml

步骤四:部署 Knative 推理服务

创建 Knative Service,启用 AI 网关功能,并配置 vLLM 引擎进行推理。

  1. 创建服务配置文件qwen-service.yaml

    关键配置说明:

    • knative.aliyun.com/ai-gateway: inference:启用推理网关扩展。

    • autoscaling.knative.dev/metric: "concurrency":基于并发请求数进行自动伸缩。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: qwen
      namespace: default
      annotations:
        # 启用 AI 推理网关
        knative.aliyun.com/ai-gateway: inference          
        knative.aliyun.com/ai-gateway-inference-priority: "1"
      labels:
        release: qwen
    spec:
      template:
        metadata:
          annotations:
            # 弹性指标:并发数
            autoscaling.knative.dev/metric: "concurrency" 
            # 目标并发数
            autoscaling.knative.dev/target: "2"           
            # 最大实例数
            autoscaling.knative.dev/max-scale: "3"        
            # 最小实例数。大模型容器启动耗时较长,建议保留至少 1 个常驻实例,避免请求超时
            autoscaling.knative.dev/min-scale: "1"        
          labels:
            release: qwen
        spec:
          containers:
          - name: vllm-container
            image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04
            command:
            - sh
            - -c
            - python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --model /models/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 8192 --dtype half
            ports:
            - containerPort: 8080
            readinessProbe:
              tcpSocket:
                port: 8080
              initialDelaySeconds: 15
              periodSeconds: 5
            resources:
              limits:
                cpu: "32"
                memory: 64Gi
                # 申请 GPU 资源
                nvidia.com/gpu: "1" 
              requests:
                cpu: "8"
                memory: 32Gi
                nvidia.com/gpu: "1"
            volumeMounts:
            # 挂载路径需与启动命令中的 model 参数一致
            - mountPath: /models/Qwen1.5-4B-Chat 
              name: llm-model
          volumes:
          - name: llm-model
            persistentVolumeClaim:
              claimName: llm-model
  2. 部署服务。

    kubectl apply -f qwen-service.yaml
  3. 查看部署进度(等待 ReadyTrue)。

    kubectl get ksvc qwen -n default

步骤五:验证推理服务

服务部署成功后,通过网关地址访问推理接口。

  1. 获取网关 IP。

    export GATEWAY_HOST=$(kubectl -n knative-serving get gateway/knative-gateway -o jsonpath='{.status.addresses[0].value}')
    echo "网关地址: $GATEWAY_HOST"
  2. 发送测试请求。

    本步骤模拟一个 OpenAI 格式的对话请求。

    curl http://${GATEWAY_HOST}:8888/v1/chat/completions \
      -H "Host: qwen.default.example.com" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "/models/Qwen1.5-4B-Chat/",
        "messages": [
          {"role": "user", "content": "请用一句话介绍Kubernetes"}
        ],
        "max_tokens": 50
      }'

    终端应返回包含 choices 字段的 JSON 数据,其中 content 包含模型的回答内容。

计费说明

Knative组件本身不产生额外费用。但在使用过程中产生的计算资源、网络资源等费用,由各云产品收取。例如:

  • GPU 实例:GPU 实例价格较高,建议配合节点伸缩使用以控制成本。

  • OSS:包括OSS存储费用、请求费用。如果涉及公网访问,还会产生外网流出流量费用。

  • CLB:Gateway 绑定的公网负载均衡实例将产生流量费用。

详见云产品资源费用

相关文档

支持在 Knative 中部署 A2A部署 MCP Server,以利用其Serverless架构优势,实现AI服务的按需扩缩容、事件驱动等高级特性。