Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Get started with workload colocation

Última atualização: Jun 27, 2026

Use o ack-koordinator para configurar rapidamente um ambiente de colocalização e executar workloads nesse modo. Este tópico explica como ativar políticas de colocalização e implantar workloads LS e BE no mesmo nó.

Pré-requisitos

Verifique se você tem:

Conceitos principais

O ack-koordinator usa prioridade de recursos e classe de QoS para controlar como workloads online e offline compartilham um nó.

Prioridades de recursos

A prioridade de recursos define quanto da capacidade do nó um workload pode usar.

Prioridade

Cálculo de recursos

Nome do recurso

Product

Equivale aos recursos físicos do nó

CPU e memória reportadas pelo nó

Batch

Calculado dinamicamente: recursos físicos totais − recursos Product em uso. Consulte Sobrecarga dinâmica de recursos.

kubernetes.io/batch-cpu e kubernetes.io/batch-memory (recursos estendidos nos metadados do nó)

Recursos Product alocados, mas não utilizados, são automaticamente rebaixados para Batch para recuperação.

Classes de QoS

A classe de QoS determina a prioridade de agendamento e o isolamento quando os recursos estão restritos.

Classe de QoS

Workloads típicos

Comportamento

LS (Latency Sensitive)

Serviços web, microsserviços, computação de fluxo sensível a latência

Prioridade no agendamento de CPU, cache L3 e largura de banda de memória; a memória é recuperada primeiro dos workloads BE

BE (Best Effort)

Jobs Spark em lote, jobs MapReduce, treinamento de IA, transcodificação de vídeo

Prioridade de CPU inferior à dos workloads LS; cache L3 e largura de banda de memória limitados; a memória é recuperada antes dos workloads LS

Funcionamento da recuperação de recursos

Node capacity
├── Product limit      ← Resources requested by LS pods
│   └── Actual usage  ← Varies over time (often well below limit)
│       └── Reclaimable = limit − usage ← Available for BE pods
└── BE pods run on reclaimable resources

Os workloads BE consomem recursos que estariam ociosos, sem afetar o desempenho dos serviços online.

Combinações válidas

Embora a prioridade de recursos e a classe de QoS sejam independentes, apenas duas combinações são usadas na prática:

  • Product + LS: Aplicações online sensíveis a latência (aplicações web, computação de fluxo)

  • Batch + BE: Aplicações offline de menor prioridade (jobs Spark, jobs MapReduce, treinamento de IA)

Ative as políticas de colocalização

O ack-koordinator lê as políticas de colocalização do ConfigMap ack-slo-config no namespace kube-system.

  1. Crie o arquivo configmap.yaml com o seguinte conteúdo:

    # Example of the ack-slo-config ConfigMap.
    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
          }
        }

    Este ConfigMap inclui três políticas:

    Chave da política

    Função

    colocation-config

    Ativa o monitoramento de carga do nó em tempo real e identifica recursos passíveis de sobrecarga. Consulte Sobrecarga dinâmica de recursos.

    resource-qos-config

    Habilita o gerenciamento granular de recursos para workloads LS e BE, incluindo CPU QoS, Memory QoS e Isolamento de cache L3 e MBA.

    resource-threshold-config

    Limita dinamicamente os recursos BE com base nas marcas d'água de utilização do nó. Consulte Limite elástico de recursos.

  2. Aplique o ConfigMap:

    kubectl apply -f configmap.yaml

Implante os workloads

Implante um workload LS (online) e um BE (offline) no mesmo nó usando o rótulo de pod koordinator.sh/qosClass.

Implante o workload LS (NGINX)

  1. Crie o arquivo nginx-ls-pod.yaml. O rótulo koordinator.sh/qosClass: LS classifica este pod como sensível a latência:

    ---
    # Nginx application configuration
    apiVersion: v1
    data:
      config: |-
        user  nginx;
        worker_processes  80;  # The number of Nginx worker processes, which affects concurrency.
    
        events {
            worker_connections  1024;  # Default value is 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
    
    ---
    # Manifest for the 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 # The host port that will receive requests for load testing.
              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. Aplique o manifesto:

    kubectl apply -f nginx-ls-pod.yaml

Implante o workload BE (FFmpeg)

  1. Crie o arquivo ffmpeg-be-pod.yaml. O rótulo koordinator.sh/qosClass: BE classifica este pod como best-effort. Os limites de recursos usam kubernetes.io/batch-cpu e kubernetes.io/batch-memory em vez de CPU e memória padrão:

    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:
              # Unit: millicores.
              kubernetes.io/batch-cpu: "70k"
              kubernetes.io/batch-memory: "22Gi"
            requests:
              # Unit: millicores.
              kubernetes.io/batch-cpu: "70k"
              kubernetes.io/batch-memory: "22Gi"
  2. Aplique o manifesto:

    kubectl apply -f ffmpeg-be-pod.yaml

Próximas etapas

Depois que ambos os pods estiverem em execução, explore os recursos de colocalização do ACK:

Veja na prática

Gerenciamento de recursos

Controle de CPU