All Products
Search
Document Center

Container Service for Kubernetes:Mulai menggunakan colocation workload

Last Updated:Aug 21, 2026

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:

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.

  1. Buat file configmap.yaml dengan 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-config Mengaktifkan pemantauan beban node secara real-time dan mengidentifikasi resource yang dapat di-overcommit. Lihat Dynamic resource overcommitment.
    resource-qos-config Mengaktifkan manajemen resource detail halus untuk workload LS dan BE, termasuk CPU QoS, Memory QoS, dan isolasi cache L3 dan MBA.
    resource-threshold-config Membatasi resource BE secara dinamis berdasarkan watermark utilisasi node. Lihat Elastic resource limit.
  2. 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)

  1. Buat file nginx-ls-pod.yaml. Label koordinator.sh/qosClass: LS menandai 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
  2. Terapkan manifes tersebut:

    kubectl apply -f ffmpeg-be-pod.yaml

Deploy workload BE (FFmpeg)

  1. Buat file ffmpeg-be-pod.yaml. Label koordinator.sh/qosClass: BE menandai Pod ini sebagai best-effort. Batas resource menggunakan kubernetes.io/batch-cpu dan kubernetes.io/batch-memory alih-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"
  2. Terapkan manifes tersebut:

    kubectl apply -f ffmpeg-be-pod.yaml

Langkah selanjutnya

Setelah kedua Pod berjalan, jelajahi kemampuan colocation ACK:

Lihat dalam praktik

Manajemen Sumber Daya

Kontrol CPU