對於啟動較慢的業務應用(如 Java 應用等),社區Knative預設的“縮容至0”策略可能會引發較高的冷啟動延遲。ACK Serverless Knative提供保留執行個體功能,通過維持低成本的常駐執行個體實現快速響應,在降低冷啟動影響的同時有效控制資源成本。
工作原理
為節約成本,社區Knative會在服務無流量時將執行個體數縮減至0。新請求到達時,需經歷資源調度、鏡像拉取和應用啟動等一系列過程,即“冷啟動”,可能帶來較高的首次請求延遲。
為此,ACK Serverless Knative提供保留執行個體,在無流量期間仍然保留一個或多個低規格的保留執行個體持續運行。其工作流程如下。
無流量時:服務(Pod)逐步縮容,最終至少保留一個執行個體線上,維持基本響應能力。
首個請求到達與擴容觸發:
當第一個請求到達時,會同時觸發兩個並行操作:
即時服務:請求立即路由至線上的保留執行個體進行處理,避免冷啟動延遲。
擴容指令:Knative立即建立標準規格的執行個體。
流量切換:當首個標準規格的執行個體準備就緒後,後續新請求自動轉寄至標準規格執行個體。
資源回收:原保留執行個體在處理完接收到的初始請求後自動下線。
使用方式
在叢集中部署Knative後,可通過為Knative Service添加特定Annotation來配置保留執行個體功能。
knative.aliyun.com/reserve-instance:設定為enable,開啟保留執行個體。knative.aliyun.com/reserve-instance-type: eci:指定保留執行個體的資源類型,支援eci(預設)、ecs和acs。
配置ECI類型的保留執行個體
使用ECI算力時,需安裝ACK Virtual Node,操作入口請參見組件。
指定ECI執行個體規格
如需使用特定執行個體規格,可通過knative.aliyun.com/reserve-instance-eci-use-specs來指定。
以指定ecs.t6-c1m1.large和ecs.t5-lc1m2.small規格為例。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-spec-1
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.t6-c1m1.large,ecs.t5-lc1m2.small"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8指定CPU和記憶體規格
若不確定具體的執行個體規格,可直接定義所需的CPU和記憶體資源。
以指定1 Core 2 GiB的規格為例。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-spec-2
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-eci-use-specs: "1-2Gi"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8配置ACS類型的保留執行個體
可通過knative.aliyun.com/reserve-instance-type: acs啟用ACS類型的保留執行個體。
使用ACS算力時,需安裝ACK Virtual Node,操作入口請參見組件。
指定算力類型與品質
以下為基礎的ACS保留執行個體配置,支援指定計算類型(compute-class)和算力品質(compute-qos)。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: acs
# (可選) 配置ACS Pod的算力類型
knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
# (可選) 配置ACS Pod的算力品質
knative.aliyun.com/reserve-instance-acs-compute-qos: "default"
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"指定CPU和記憶體的規格
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go-resource
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: acs
knative.aliyun.com/reserve-instance-cpu-resource-request: "1"
knative.aliyun.com/reserve-instance-memory-resource-request: "2Gi"
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"配置 ECS 類型的保留執行個體
可為保留執行個體配置一個低於標準規格的ECS執行個體規格,以降低長期運行成本。
GPU
以下樣本為一個GPU推理服務配置了低規格的GPU執行個體作為保留執行個體。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
labels:
release: qwen
name: qwen
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "concurrency"
# 啟用並配置ECS類型的保留執行個體,可配置一個或多個規格
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: ecs
knative.aliyun.com/reserve-instance-ecs-use-specs: ecs.gn6i-c4g1.xlarge
labels:
release: qwen
spec:
containers:
- command:
- sh
- -c
- python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code
--served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization
0.95 --quantization gptq --max-model-len=6144
image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1
imagePullPolicy: IfNotPresent
name: vllm-container
resources:
# 標準執行個體的資源配置
limits:
cpu: "16"
memory: 60Gi
nvidia.com/gpu: "1"
requests:
cpu: "8"
memory: 36Gi
nvidia.com/gpu: "1"
volumeMounts:
- mountPath: /mnt/models/Qwen-7B-Chat-Int8
name: qwen-7b-chat-int8
volumes:
- name: qwen-7b-chat-int8
persistentVolumeClaim:
claimName: qwen-7b-chat-int8-datasetCPU
以指定1 Core 2 GiB的規格為例。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-resource
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: ecs
knative.aliyun.com/reserve-instance-cpu-resource-request: "1"
knative.aliyun.com/reserve-instance-cpu-resource-limit: "1"
knative.aliyun.com/reserve-instance-memory-resource-request: "2Gi"
knative.aliyun.com/reserve-instance-memory-resource-limit: "2Gi"
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"配置保留執行個體資源集區
為了應對較高的突發流量請求,可將單個保留執行個體擴充為一個資源集區,通過knative.aliyun.com/reserve-instance-replicas指定保留執行個體的副本數量。
當流量到達時,預熱的保留執行個體會立即響應;與此同時,系統會按需擴容標準規格的執行個體。一旦標準執行個體的數量足以承接當前流量,系統便會將流量平滑路由至標準執行個體,並將保留執行個體資源集區中的執行個體自動縮容至零。
以下樣本建立了一個由3個低規格執行個體組成的保留池。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-reserve-pool
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-replicas: "3"
knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.t6-c1m1.large,ecs.t5-lc1m2.small"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8生產環境使用建議
合理選擇保留執行個體的規格,推薦採用能夠穩定運行應用並處理至少一個請求的最低可行配置。
若業務從0到1時可能出現較高的請求流量,建議使用保留執行個體資源集區,以提升流量承接能力。
計費說明
保留執行個體會持續運行併產生相應費用。計費規則,請參見:
相關文檔
可在Knative中使用性價比較高的搶佔式執行個體,請參見使用搶佔式執行個體。
可在Knative中實現工作負載的自動調整,請參見在Knative中使用HPA、基於流量請求數實現服務自動擴縮容、基於AHPA實現定時自動擴縮容。