Untuk aplikasi dengan waktu startup yang lebih lambat, seperti layanan Java, kebijakan scale-to-zero bawaan Knative community menyebabkan latensi cold start yang tinggi. ACK Knative mengatasi hal ini dengan instans terjadwal—Pod berbiaya rendah yang selalu aktif dan dapat langsung melayani permintaan sementara instans standar sedang dalam proses startup.
Cara kerja
Saat Layanan Knative melakukan scale-to-zero, permintaan pertama yang masuk memicu cold start: penjadwalan resource, pengunduhan image, dan startup aplikasi harus selesai terlebih dahulu sebelum permintaan dapat dilayani.
Instans terjadwal mengubah perilaku ini dengan menjaga satu atau beberapa Pod ber-spesifikasi rendah tetap berjalan selama periode idle:
Scale-in dengan jaring pengaman. Saat trafik berhenti, Layanan melakukan scale-in, tetapi setidaknya satu instans terjadwal tetap online untuk menangani permintaan baru yang mungkin datang.
Tanggapan dan scale-out secara paralel. Saat permintaan tiba, dua hal terjadi secara bersamaan:
Permintaan diarahkan ke instans terjadwal yang aktif untuk diproses segera—tanpa cold start.
Knative membuat instans ber-spesifikasi standar untuk menangani trafik yang sedang berlangsung.
Alih trafik. Setelah instans standar pertama siap, seluruh trafik berikutnya diarahkan ke instans tersebut.
Pembersihan. Setelah instans terjadwal menyelesaikan pemrosesan permintaan awalnya, instans tersebut secara otomatis dihentikan.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Knative deployed di kluster ACK Anda.
ACK Virtual Node diinstal (diperlukan untuk instans terjadwal ECI dan ACS; tidak diperlukan untuk ECS). Untuk informasi selengkapnya, lihat Components.
Referensi anotasi
Aktifkan instans terjadwal dengan menambahkan anotasi ke manifes Layanan Knative Anda. Tabel berikut mencantumkan semua anotasi yang didukung.
| Anotasi | Deskripsi | Bawaan |
|---|---|---|
knative.aliyun.com/reserve-instance | Aktifkan atau nonaktifkan instans terjadwal. Atur ke "enable". | Nonaktif |
knative.aliyun.com/reserve-instance-type | Jenis resource untuk instans terjadwal. Nilai yang didukung: eci, ecs, acs. | eci |
knative.aliyun.com/reserve-instance-replicas | Jumlah instans terjadwal yang dipertahankan. | 1 |
knative.aliyun.com/reserve-instance-eci-use-specs | Tipe instans atau spesifikasi CPU-memori untuk ECI. Menerima nama tipe instans (misalnya, ecs.t6-c1m1.large) atau format CPU-memori (misalnya, 1-2Gi). Pisahkan beberapa tipe instans dengan koma. | - |
knative.aliyun.com/reserve-instance-ecs-use-specs | Tipe instans ECS untuk instans terjadwal (misalnya, ecs.gn6i-c4g1.xlarge). | - |
knative.aliyun.com/reserve-instance-acs-compute-class | Kelas komputasi untuk Pod ACS (misalnya, general-purpose). | - |
knative.aliyun.com/reserve-instance-acs-compute-qos | Kualitas komputasi untuk Pod ACS (misalnya, default). | - |
knative.aliyun.com/reserve-instance-cpu-resource-request | Permintaan CPU untuk instans terjadwal (misalnya, "1"). | - |
knative.aliyun.com/reserve-instance-cpu-resource-limit | Batas CPU untuk instans terjadwal (misalnya, "1"). | - |
knative.aliyun.com/reserve-instance-memory-resource-request | Permintaan memori untuk instans terjadwal (misalnya, "2Gi"). | - |
knative.aliyun.com/reserve-instance-memory-resource-limit | Batas memori untuk instans terjadwal (misalnya, "2Gi"). | - |
Konfigurasikan instans terjadwal ECI
Elastic Container Instance (ECI) merupakan jenis resource bawaan untuk instans terjadwal. Pod ECI berjalan di infrastruktur arsitektur tanpa server, sehingga tidak memerlukan perencanaan kapasitas node.
Tentukan berdasarkan tipe instans
Untuk menggunakan tipe instans ECS tertentu sebagai dasar ECI, tambahkan anotasi knative.aliyun.com/reserve-instance-eci-use-specs. Anda dapat menentukan beberapa tipe instans yang dipisahkan dengan koma.
Contoh berikut menentukan tipe instans ecs.t6-c1m1.large dan 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:160e4dc8Tentukan berdasarkan CPU dan memori
Jika Anda tidak yakin tentang tipe instans tertentu, definisikan resource CPU dan memori yang dibutuhkan.
Contoh berikut menentukan instans dengan 1 core dan 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
Untuk menggunakan Alibaba Cloud Container Compute Service (ACS) sebagai instans terjadwal, pertama-tama instal ACK Virtual Node. Untuk informasi selengkapnya, lihat Components, lalu tambahkan anotasi knative.aliyun.com/reserve-instance-type: acs.
Tentukan berdasarkan kelas komputasi dan kualitas
Berikut adalah konfigurasi dasar untuk instans terjadwal ACS. Anda dapat menentukan kelas komputasi dan kualitas komputasi:
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
Tentukan tipe instans Elastic Compute Service (ECS) berbiaya lebih rendah untuk instans terjadwal Anda guna mengurangi biaya selama periode idle.
Workload GPU
Contoh berikut mengonfigurasi instans GPU-accelerated ber-spesifikasi rendah sebagai instans terjadwal untuk layanan inferensi 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"
# 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-datasetWorkload CPU
Contoh berikut menentukan instans dengan 1 core dan 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 kolam instans terjadwal
Untuk menangani trafik lonjakan tinggi, perluas satu instans terjadwal menjadi kolam sumber daya dengan menentukan jumlah replika menggunakan anotasi knative.aliyun.com/reserve-instance-replicas.
Contoh berikut membuat kolam terjadwal yang terdiri dari 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:160e4dc8Verifikasi konfigurasi
Setelah menerapkan manifes Service, verifikasi bahwa instans terjadwal sedang berjalan:
# Periksa apakah Pod instans terjadwal sedang berjalan
kubectl get pods -l serving.knative.dev/service=<your-service-name>
# Lihat anotasi pada Knative Service
kubectl get ksvc <your-service-name> -o yaml | grep reserve-instanceInstans terjadwal yang berhasil dikonfigurasi tetap berada dalam status Running meskipun tidak ada traffic yang dilayani.
Terapkan di lingkungan produksi
Pilih spesifikasi yang tepat. Pilih tipe instans dengan biaya terendah untuk instans terjadwal Anda yang mampu menjalankan aplikasi secara andal dan melayani setidaknya satu permintaan.
Gunakan pool terjadwal untuk lonjakan tinggi. Jika layanan Anda berpotensi mengalami lonjakan traffic mendadak yang tinggi, konfigurasikan pool instans terjadwal agar lebih mampu menyerap beban awal tersebut.
Penagihan
Instans reserved berjalan terus-menerus dan dikenai biaya. Lihat detail berikut ini:
Referensi
Untuk menerapkan penskalaan workload otomatis di Knative, lihat Gunakan HPA di Knative, Lakukan penskalaan Services secara otomatis berdasarkan jumlah permintaan traffic, dan Gunakan AHPA untuk menerapkan auto scaling terjadwal.