全部產品
Search
文件中心

Container Service for Kubernetes:在 Knative 中基於 AI 推理網關實現 LLM 服務部署與智能路由

更新時間:Feb 04, 2026

ACK Gateway with Inference Extension 組件基於 Kubernetes Gateway API 及 Inference Extension 規範實現。結合 Knative Serverless 架構,該方案能夠簡化產生式 AI 推理服務的管理流程,支援在多個推理服務工作負載之間進行高效的七層路由和負載平衡,並根據請求並發數實現 GPU 資源的Auto Scaling。

工作原理

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 綁定的公網Server Load Balancer執行個體將產生流量費用。

詳見雲產品資源費用

相關文檔

支援在 Knative 中部署 A2A部署 MCP Server,以利用其Serverless架構優勢,實現AI服務的按需擴縮容、事件驅動等進階特性。