Aplicações com inicialização lenta — como serviços Java ou cargas de trabalho de inferência de IA — beneficiam-se do recurso de instância reservada do ACK Serverless Knative, que mantém uma instância de baixo custo sempre ativa. Isso garante atendimento imediato à primeira requisição após um período de inatividade, sem a espera do cold start.
Como funciona
Por padrão, o Knative reduz um Serviço para zero pods quando o tráfego cessa. Ao receber uma nova requisição, o sistema precisa agendar recursos, baixar a imagem e iniciar a aplicação antes de responder. Esse processo pode levar vários segundos.
Ao ativar uma instância reservada, o comportamento de redução para zero muda:
O tráfego cessa — O Serviço Knativo faz scale in, mas uma instância reservada permanece online.
-
A primeira requisição chega — Duas ações ocorrem simultaneamente:
O sistema roteia a requisição para a instância reservada, garantindo atendimento imediato.
O Knative cria instâncias com especificação padrão para assumir o tráfego contínuo.
Transferência de tráfego — Assim que a primeira instância padrão fica pronta, todas as requisições subsequentes são direcionadas a ela.
Limpeza — Após processar a requisição inicial, o sistema encerra a instância reservada automaticamente.
Pré-requisitos
Antes de começar, verifique se você tem:
Knative implantado no seu cluster
(Obrigatório para instâncias reservadas ECI ou ACS) ACK Virtual Node instalado. Consulte Componentes para mais detalhes
Ative instâncias reservadas
Adicione as seguintes anotações ao manifesto do seu Serviço Knative para ativar o recurso:
|
Anotação |
Descrição |
|
|
Ativa o recurso de instância reservada |
|
|
Define o tipo de instância. Valores suportados: |
Instâncias reservadas permanecem em execução continuamente e geram custos mesmo sem tráfego. Consulte Faturamento para mais detalhes.
Escolha um tipo de instância
Use a tabela abaixo para selecionar o tipo de instância adequado à sua carga de trabalho:
|
Tipo de instância |
Mais indicado para |
Requer |
|
ECI (padrão) |
Cargas serverless de uso geral; sem necessidade de gerenciar nós |
ACK Virtual Node |
|
ACS |
Cargas que exigem controle refinado sobre classe de computação e níveis de qualidade |
ACK Virtual Node |
|
ECS |
Cargas com GPU ou que demandam um tipo específico de instância ECS |
Um nó ECS compatível |
Na dúvida sobre qual tipo usar, comece com ECI. Ele atende à maioria dos cenários de uso geral sem exigir configurações adicionais além do ACK Virtual Node.
Configure instâncias reservadas ECI
Elastic Container Instance (ECI) é o tipo padrão de instância reservada. Use a anotação knative.aliyun.com/reserve-instance-eci-use-specs para especificar o tamanho do recurso — seja por tipo de instância ou por CPU e memória.
Especifique por tipo de instância
O exemplo a seguir define ecs.t6-c1m1.large e ecs.t5-lc1m2.small como tipos de instância candidatos:
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
Especifique por CPU e memória
Caso não precise de um tipo específico de instância, defina a CPU e a memória necessárias. O exemplo abaixo especifica uma instância de 1 núcleo e 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
Configure instâncias reservadas ACS
As instâncias reservadas do Alibaba Cloud Container Compute Service (ACS) permitem especificar classes de computação e níveis de qualidade. Para usar ACS, instale o ACK Virtual Node e adicione a anotação knative.aliyun.com/reserve-instance-type: acs.
Especifique por classe e qualidade de computação
Use knative.aliyun.com/reserve-instance-acs-compute-class para definir a classe de computação e knative.aliyun.com/reserve-instance-acs-compute-qos para definir a qualidade de computação. Ambas as anotações são opcionais.
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
# (Optional) Compute class for the ACS pod
knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
# (Optional) Compute quality for the 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"
Especifique por CPU e memória
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"
Configure instâncias reservadas ECS
Use um tipo de instância ECS de menor custo para reduzir despesas durante ociosidade. Instâncias reservadas ECS são especialmente úteis para cargas de trabalho com GPU.
Cargas de trabalho com GPU
O exemplo abaixo configura ecs.gn6i-c4g1.xlarge como uma instância reservada GPU de baixa especificação para um serviço de inferência Qwen. A instância padrão utiliza uma GPU completa; já a instância reservada usa uma especificação menor de GPU para atender à primeira requisição com custo reduzido.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
labels:
release: qwen
name: qwen
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "concurrency"
# Enable and configure an ECS reserved instance. You can configure one or more instance types.
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:
# Resource configuration for the standard instance
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-dataset
Especifique por CPU e memória
Este exemplo define uma instância reservada ECS com 1 núcleo e 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"
Configure um pool de instâncias reservadas
Uma única instância reservada atende à primeira requisição após um período de inatividade. Para serviços que recebem picos repentinos de tráfego regularmente, expanda essa capacidade para um pool definindo o número de réplicas com knative.aliyun.com/reserve-instance-replicas.
O exemplo a seguir cria um pool com 3 instâncias de baixa especificação:
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
Aplicação em produção
Escolha o tipo de instância de menor custo que execute sua aplicação com confiabilidade e atenda a pelo menos uma requisição. A instância reservada só precisa lidar com o tráfego durante o breve intervalo antes que as instâncias padrão fiquem prontas — ela não precisa ter a mesma especificação da instância padrão.
Use um pool reservado para serviços com altos picos de tráfego. Se o seu serviço recebe aumentos súbitos de tráfego, configure múltiplas réplicas usando knative.aliyun.com/reserve-instance-replicas para absorver a carga inicial de forma mais eficaz.
Considere o faturamento contínuo ao dimensionar instâncias reservadas. Instâncias reservadas geram custos o tempo todo, inclusive durante períodos ociosos sem tráfego. Use o menor tipo de instância capaz de processar uma única requisição para manter os custos de ociosidade baixos.
Faturamento
Instâncias reservadas permanecem em execução continuamente e geram custos, inclusive durante períodos sem tráfego. Consulte a documentação de faturamento correspondente a cada tipo de instância:
Próximos passos
Use instâncias spot econômicas no Knative
Use HPA no Knative para auto scaling horizontal de pods
Dimensione Serviços automaticamente com base em requisições de tráfego