Untuk aplikasi dengan waktu startup yang lebih lambat, seperti yang ditulis dalam Java, kebijakan penskalaan default komunitas Knative dapat menyebabkan latensi cold-start yang tinggi. ACK Serverless Knative menyelesaikan masalah ini dengan fitur instans terjadwal. Dengan mempertahankan instans berbiaya rendah tetap aktif, fitur ini memastikan respons langsung sambil tetap mengoptimalkan biaya sumber daya.
Cara kerjanya
Untuk menghemat biaya, komunitas Knative menurunkan layanan hingga nol pod saat tidak ada trafik. Saat permintaan baru tiba, sistem harus melalui proses cold start—termasuk penjadwalan sumber daya, penarikan citra, dan startup aplikasi—yang dapat menyebabkan latensi signifikan untuk permintaan pertama.
ACK Serverless Knative memodifikasi perilaku ini dengan menjaga satu atau lebih instans spesifikasi rendah tetap berjalan bahkan selama periode idle.
Alur Kerja:
Saat trafik berhenti: Service (pod) diskalakan masuk, namun setidaknya satu instans terjadwal tetap online untuk menangani permintaan baru yang potensial.
Saat permintaan pertama tiba, dua aksi dipicu secara bersamaan (operasi paralel):
Respon segera: Permintaan langsung diarahkan ke instans terjadwal aktif untuk diproses, yang menghindari latensi cold start.
Pemicu scale-out: Knative segera membuat instans spesifikasi standar untuk menangani trafik.
Peralihan trafik: Setelah instans spesifikasi standar pertama siap, semua trafik berikutnya dialihkan kepadanya.
Pembersihan sumber daya: Setelah menyelesaikan permintaan awalnya, instans terjadwal asli secara otomatis dihentikan.
Cara menggunakan instans terjadwal
Setelah mengimplementasikan Knative di kluster Anda, Anda dapat mengonfigurasi fitur instans terjadwal dengan menambahkan anotasi berikut ke manifes Layanan Knative:
Anotasi | Deskripsi |
| Mengaktifkan fitur instans terjadwal. |
| Menentukan tipe sumber daya untuk instans terjadwal. Nilai yang didukung adalah |
Konfigurasikan eci instans terjadwal
Untuk menggunakan Elastic Container Instances untuk instans terjadwal, instal terlebih dahulu ACK Virtual Node. Untuk informasi lebih lanjut, lihat Komponen.
Tentukan berdasarkan tipe instans
Untuk menggunakan tipe instans tertentu tipe instans, tambahkan anotasi knative.aliyun.com/reserve-instance-eci-use-specs.
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, tentukan sumber daya CPU dan memori yang diperlukan.
Contoh berikut menentukan 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 acs instans terjadwal
Untuk menggunakan Alibaba Cloud Container Compute Service (ACS) untuk instans terjadwal, instal terlebih dahulu ACK Virtual Node. Untuk informasi lebih lanjut, lihat Komponen, 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 (compute-class) dan kualitas komputasi (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
# (Opsional) Konfigurasikan kelas komputasi untuk pod ACS
knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
# (Opsional) Konfigurasikan 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 ecs instans terjadwal
Tentukan tipe Elastic Compute Service (ECS) instance type berbiaya lebih rendah untuk instans terjadwal Anda guna mengurangi biaya selama periode idle.
GPU
Contoh berikut mengonfigurasi instans GPU-accelerated 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 lebih 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 sumber daya 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-datasetCPU
Contoh berikut menentukan instans 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 kolam instans terjadwal
Untuk menangani lonjakan trafik tinggi, perluas instans terjadwal tunggal menjadi kolam sumber daya dengan menentukan jumlah replika menggunakan anotasi knative.aliyun.com/reserve-instance-replicas.
Contoh berikut membuat kolam cadangan 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:160e4dc8Terapkan dalam produksi
Pilih spesifikasi yang tepat: Pilih tipe instans berbiaya terendah untuk instans terjadwal Anda yang dapat menjalankan aplikasi Anda secara andal dan melayani setidaknya satu permintaan.
Gunakan kolam cadangan untuk lonjakan tinggi: Jika layanan Anda kemungkinan akan mengalami lonjakan trafik mendadak, konfigurasikan kolam instans terjadwal untuk menyerap beban awal dengan lebih baik.
Penagihan
Instans terjadwal berjalan terus-menerus dan menimbulkan biaya. Lihat berikut ini untuk detailnya:
Referensi
Gunakan instans spot hemat biaya di Knative.
Untuk mengimplementasikan penskalaan beban kerja otomatis di Knative, lihat Gunakan HPA di Knative, Skalakan Layanan secara otomatis berdasarkan jumlah permintaan trafik, dan Gunakan AHPA untuk mengimplementasikan penskalaan otomatis terjadwal.