Gunakan ack-koordinator untuk mengatur lingkungan colocation secara cepat dan menjalankan workload dalam mode colocation. Topik ini menjelaskan cara mengaktifkan kebijakan colocation serta men-deploy workload LS dan BE pada node yang sama.
Prasyarat
Pastikan Anda memiliki:
-
ack-koordinator versi 0.8.0 atau lebih baru (sebelumnya bernama ack-slo-manager)
-
(Direkomendasikan) Instans bare metal ECS yang menjalankan Alibaba Cloud Linux
Konsep utama
ack-koordinator menggunakan prioritas resource dan kelas QoS untuk mengontrol cara workload online dan offline berbagi satu node.
Prioritas resource
Prioritas resource menentukan seberapa besar kapasitas node yang dapat digunakan oleh suatu workload.
| Prioritas | Cara perhitungan resource | Nama resource |
|---|---|---|
| Product | Sama dengan resource fisik node | CPU dan memori yang dilaporkan oleh node |
| Batch | Dihitung secara dinamis: total resource fisik − resource Product yang sedang digunakan. Lihat Dynamic resource overcommitment. | kubernetes.io/batch-cpu dan kubernetes.io/batch-memory (resource ekstensi dalam metadata node) |
Resource Product yang telah dialokasikan tetapi tidak digunakan akan secara otomatis diturunkan spesifikasinya menjadi Batch agar dapat diklaim ulang.
Kelas QoS
Kelas QoS menentukan prioritas penjadwalan dan isolasi saat resource terbatas.
| Kelas QoS | Workload umum | Perilaku |
|---|---|---|
| LS (Latency Sensitive) | Layanan web, layanan mikro, komputasi aliran yang sensitif terhadap latensi | Prioritas tinggi dalam penjadwalan CPU, cache L3, dan bandwidth memori; memori diklaim ulang dari BE terlebih dahulu |
| BE (Best Effort) | Pekerjaan batch Spark, pekerjaan MapReduce, pekerjaan pelatihan AI, transkoding video | Prioritas CPU lebih rendah daripada LS; cache L3 dan bandwidth memori dibatasi; memori diklaim sebelum workload LS |
Cara kerja reklamasi sumber daya
Kapasitas node
├── Batas Product ← Resource yang diminta oleh Pod LS
│ └── Penggunaan aktual ← Berubah seiring waktu (sering jauh di bawah batas)
│ └── Dapat direklaim = batas − penggunaan ← Tersedia untuk Pod BE
└── Pod BE berjalan pada resource yang dapat direklaim
Workload BE memanfaatkan resource idle yang tersedia tanpa memengaruhi performa layanan online.
Kombinasi yang valid
Prioritas resource dan kelas QoS bersifat independen, tetapi hanya dua kombinasi berikut yang digunakan dalam praktik:
-
Product + LS: Aplikasi online yang sensitif terhadap latensi (aplikasi web, komputasi aliran)
-
Batch + BE: Aplikasi offline dengan prioritas lebih rendah (pekerjaan Spark, pekerjaan MapReduce, pelatihan AI)
Aktifkan kebijakan colocation
ack-koordinator membaca kebijakan colocation dari ConfigMap ack-slo-config di namespace kube-system.
-
Buat file
configmap.yamldengan konten berikut:# Contoh ConfigMap ack-slo-config. apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: colocation-config: |- { "enable": true } resource-qos-config: |- { "clusterStrategy": { "lsClass": { "cpuQOS": { "enable": true }, "memoryQOS": { "enable": true }, "resctrlQOS": { "enable": true } }, "beClass": { "cpuQOS": { "enable": true }, "memoryQOS": { "enable": true }, "resctrlQOS": { "enable": true } } } } resource-threshold-config: |- { "clusterStrategy": { "enable": true } }ConfigMap tersebut mencakup tiga kebijakan:
Kunci kebijakan Fungsinya colocation-configMengaktifkan pemantauan beban node secara real-time dan mengidentifikasi resource yang dapat di-overcommit. Lihat Dynamic resource overcommitment. resource-qos-configMengaktifkan manajemen resource detail halus untuk workload LS dan BE, termasuk CPU QoS, Memory QoS, dan isolasi cache L3 dan MBA. resource-threshold-configMembatasi resource BE secara dinamis berdasarkan watermark utilisasi node. Lihat Elastic resource limit. -
Terapkan ConfigMap tersebut:
kubectl apply -f configmap.yaml
Menyebarkan beban kerja
Deploy workload LS (online) dan BE (offline) ke node yang sama menggunakan label Pod koordinator.sh/qosClass.
Deploy workload LS (NGINX)
-
Buat file
nginx-ls-pod.yaml. Labelkoordinator.sh/qosClass: LSmenandai Pod ini sebagai sensitif terhadap latensi:--- # Konfigurasi aplikasi Nginx apiVersion: v1 data: config: |- user nginx; worker_processes 80; # Jumlah proses worker Nginx, yang memengaruhi konkurensi. events { worker_connections 1024; # Nilai default adalah 1024. } http { server { listen 8000; gzip off; gzip_min_length 32; gzip_http_version 1.0; gzip_comp_level 3; gzip_types *; } } #daemon off; kind: ConfigMap metadata: name: nginx-conf --- # Manifes untuk nginx-ls-pod. apiVersion: v1 kind: Pod metadata: labels: koordinator.sh/qosClass: LS app: nginx name: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 8000 hostPort: 8000 # Port host yang akan menerima permintaan untuk pengujian beban. protocol: TCP resources: limits: cpu: '8' memory: 1Gi requests: cpu: '8' memory: 1Gi volumeMounts: - mountPath: /apps/nginx/conf name: config hostNetwork: true restartPolicy: Never volumes: - configMap: items: - key: config path: nginx.conf name: nginx-conf name: config -
Terapkan manifes tersebut:
kubectl apply -f ffmpeg-be-pod.yaml
Deploy workload BE (FFmpeg)
-
Buat file
ffmpeg-be-pod.yaml. Labelkoordinator.sh/qosClass: BEmenandai Pod ini sebagai best-effort. Batas resource menggunakankubernetes.io/batch-cpudankubernetes.io/batch-memoryalih-alih CPU dan memori standar:apiVersion: v1 kind: Pod metadata: labels: koordinator.sh/qosClass: BE name: be-ffmpeg spec: containers: - command: - start-ffmpeg.sh - '30' - '2' - /apps/ffmpeg/input/HD2-h264.ts - /apps/ffmpeg/ image: 'registry.cn-zhangjiakou.aliyuncs.com/acs/ffmpeg-4-4-1-for-slo-test:v0.1' imagePullPolicy: Always name: ffmpeg resources: limits: # Satuan: millicores. kubernetes.io/batch-cpu: "70k" kubernetes.io/batch-memory: "22Gi" requests: # Satuan: millicores. kubernetes.io/batch-cpu: "70k" kubernetes.io/batch-memory: "22Gi" -
Terapkan manifes tersebut:
kubectl apply -f ffmpeg-be-pod.yaml
Langkah selanjutnya
Setelah kedua Pod berjalan, jelajahi kemampuan colocation ACK:
Lihat dalam praktik
-
Colocate layanan online dan aplikasi transkoding video — contoh end-to-end menggunakan konfigurasi ini
Manajemen Sumber Daya
Kontrol CPU