Untuk aplikasi dengan startup lambat seperti aplikasi Java, kebijakan scale-to-zero bawaan Knative komunitas dapat menyebabkan latensi cold start yang tinggi. ACK menyediakan instans terjadwal yang menjaga instans warm berbiaya rendah tetap aktif selama periode idle agar dapat merespons dengan cepat sekaligus mengendalikan biaya.
Cara kerja
Secara default, Knative menskalakan layanan menjadi nol Pod saat lalu lintas berhenti. Permintaan baru harus menunggu penjadwalan resource, pengunduhan image, dan startup aplikasi—yang dapat memakan waktu beberapa detik.
Dengan instans terjadwal diaktifkan, perilaku ini berubah:
Lalu lintas berhenti — Layanan Knative melakukan scale-in, tetapi satu instans terjadwal tetap online.
Permintaan pertama tiba — Dua aksi terjadi secara bersamaan:
Instans terjadwal langsung menangani permintaan tersebut.
Knative membuat instans standar untuk mengambil alih lalu lintas yang sedang berlangsung.
Handover lalu lintas — Setelah instans standar siap, permintaan berikutnya diarahkan ke instans tersebut.
Pembersihan — Setelah menangani permintaan awal, instans terjadwal dihentikan.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Knative dideploy di kluster Anda
(Diperlukan untuk instans terjadwal ECI atau ACS) ACK Virtual Node telah diinstal. Lihat Components
Aktifkan instans terjadwal
Tambahkan anotasi berikut ke manifes Layanan Knative Anda:
Anotasi | Deskripsi |
| Mengaktifkan instans terjadwal |
| Tipe instans. Nilai yang valid: |
Instans yang dicadangkan dikenai biaya secara terus-menerus, bahkan saat tidak ada lalu lintas. Lihat Penagihan.
Pilih tipe instans
Pilih tipe instans untuk beban kerja Anda:
Tipe instans | Paling cocok untuk | Memerlukan |
ECI (default) | Beban kerja serverless tujuan umum; tidak perlu manajemen node | ACK Virtual Node |
ACS | Beban kerja yang memerlukan kontrol detail halus terhadap kelas komputasi dan tier kualitas | ACK Virtual Node |
ECS | Beban kerja GPU atau yang memerlukan tipe instans ECS tertentu | Node ECS yang kompatibel |
Jika ragu, mulailah dengan ECI—mencakup sebagian besar skenario dan hanya memerlukan ACK Virtual Node.
Konfigurasikan instans terjadwal ECI
Elastic Container Instance (ECI) adalah tipe default. Gunakan anotasi knative.aliyun.com/reserve-instance-eci-use-specs untuk menentukan resource—berdasarkan tipe instans atau berdasarkan CPU dan memori.
Tentukan berdasarkan tipe instans
Contoh ini menggunakan ecs.t6-c1m1.large dan ecs.t5-lc1m2.small sebagai tipe instans kandidat:
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:160e4dc8Tentukan berdasarkan CPU dan memori
Jika Anda tidak memerlukan tipe instans tertentu, tentukan CPU dan memori saja. Contoh ini menggunakan instans 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:160e4dc8Konfigurasikan instans terjadwal ACS
Instans terjadwal Alibaba Cloud Container Compute Service (ACS) memungkinkan Anda menentukan kelas komputasi dan tier kualitas. Untuk menggunakan ACS, instal ACK Virtual Node dan tambahkan anotasi knative.aliyun.com/reserve-instance-type: acs.
Tentukan berdasarkan kelas komputasi dan kualitas
Gunakan knative.aliyun.com/reserve-instance-acs-compute-class untuk mengatur kelas komputasi dan knative.aliyun.com/reserve-instance-acs-compute-qos untuk mengatur kualitas komputasi. Keduanya opsional.
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
# (Opsional) Kelas komputasi untuk Pod ACS
knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
# (Opsional) Kualitas komputasi untuk Pod ACS
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"Tentukan berdasarkan CPU dan memori
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"Konfigurasikan instans terjadwal ECS
Gunakan tipe instans ECS berbiaya lebih rendah untuk mengurangi biaya saat idle. Instans terjadwal ECS cocok untuk beban kerja GPU.
Beban kerja GPU
Contoh ini mengonfigurasi ecs.gn6i-c4g1.xlarge sebagai instans terjadwal GPU spesifikasi rendah untuk layanan inferensi Qwen. Instans standar menggunakan GPU penuh; instans terjadwal menggunakan spesifikasi lebih kecil untuk menangani permintaan pertama dengan biaya lebih rendah.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
labels:
release: qwen
name: qwen
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "concurrency"
# Aktifkan dan konfigurasikan instans terjadwal ECS. Anda dapat mengonfigurasi satu atau beberapa tipe instans.
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:
# Konfigurasi resource untuk instans standar
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-datasetTentukan berdasarkan CPU dan memori
Contoh ini menentukan instans terjadwal ECS 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"Konfigurasikan pool instans terjadwal
Satu instans terjadwal menangani permintaan pertama setelah idle. Untuk layanan dengan lonjakan lalu lintas yang sering, perluas menjadi pool dengan knative.aliyun.com/reserve-instance-replicas. Saat lalu lintas tiba, instans terjadwal yang telah dipanaskan langsung merespons sementara instans standar melakukan scale-out; begitu instans standar mampu menangani beban, lalu lintas dialihkan ke mereka dan pool instans terjadwal kembali diskalakan ke nol.
Contoh ini membuat pool berisi 3 instans spesifikasi rendah:
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:160e4dc8Terapkan di produksi
Pilih tipe instans berbiaya terendah yang dapat menjalankan aplikasi Anda secara andal dan melayani setidaknya satu permintaan. Instans terjadwal hanya perlu menangani lalu lintas hingga instans standar siap—tidak perlu sesuai spesifikasinya.
Gunakan pool instans terjadwal untuk layanan dengan lonjakan tinggi. Jika layanan Anda menerima lonjakan lalu lintas mendadak, konfigurasikan beberapa replika dengan knative.aliyun.com/reserve-instance-replicas untuk menyerap beban awal.
Pertimbangkan penagihan berkelanjutan saat menentukan ukuran instans terjadwal. Instans terjadwal dikenai biaya setiap saat, termasuk selama periode idle. Gunakan tipe instans terkecil yang mampu menangani satu permintaan untuk menjaga biaya idle tetap rendah.
Monitoring dan peringatan: Pantau scaling Layanan Knative untuk memverifikasi handover dari instans terjadwal ke instans standar. Atur peringatan latensi respons untuk layanan kritis.
Penagihan
Instans terjadwal dikenai biaya terus-menerus, bahkan selama periode idle. Lihat detail penagihan untuk setiap tipe instans:
Langkah selanjutnya
Gunakan spot instans hemat biaya di Knative
Gunakan HPA di Knative untuk penyesuaian otomatis pod horizontal
Secara otomatis skalakan Layanan berdasarkan permintaan lalu lintas