Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Enable CPU QoS for containers

Última atualização: Jun 27, 2026

Em ambientes de colocation, aplicações sensíveis à latência (LS) e de melhor esforço (BE) compartilham o mesmo nó. Somente as solicitações e os limites de CPU não impedem que cargas de trabalho BE interfiram nas cargas LS, especialmente sob alta demanda. A CPU QoS usa prioridades de agendamento do Linux por meio do recurso group identity para conceder aos Pods LS prioridade de agendamento no kernel superior à dos Pods BE, o que reduz a interferência em cenários de colocation.

Para compreender os conceitos subjacentes, consulte Pod quality of service classes e Assign memory resources to containers and Pods na documentação do Kubernetes.

Funcionamento da CPU QoS

O ack-koordinator atribui uma group identity a cada cgroup de CPU. O kernel usa essas identidades para agendar tarefas com prioridades diferenciadas:

  • Agendamento mais rápido para tarefas LS: o sistema operacional agenda tarefas de aplicações LS com maior prioridade, melhorando a velocidade de resposta e o throughput.

  • Sem preempção por tarefas BE: quando uma tarefa BE é ativada, ela não preempta um processo LS em execução.

  • Isolamento de SMT: em ambientes com Simultaneous MultiThreading (SMT), as tarefas BE não executam em paralelo com tarefas LS no mesmo núcleo físico, evitando contenção de recursos no nível de hardware.

Escolha uma classe de QoS

Classe de QoS

Prioridade de agendamento de CPU

LS (sensível à latência)

Alta (group identity: 2)

BE (melhor esforço)

Baixa (group identity: -1)

Pods rotulados com koordinator.sh/qosClass: LS têm tratamento de alta prioridade. Já os Pods rotulados com koordinator.sh/qosClass: BE têm tratamento de baixa prioridade. Para Pods sem esse rótulo, o ack-koordinator recorre à classe de QoS nativa do Kubernetes: Pods BestEffort mapeiam para BE e todos os demais mapeiam para LS.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster ACK executando a versão 1.18 ou posterior. Para atualizar, consulte Manually update ACK clusters.

  • Alibaba Cloud Linux como sistema operacional do nó. O recurso group identity depende de parâmetros de kernel específicos desse SO. Para requisitos de versão do kernel, consulte Group identity feature.

  • ack-koordinator v0.8.0 ou posterior instalado. Para instruções de instalação, consulte ack-koordinator (FKA ack-slo-manager).

Se seus nós não executarem Alibaba Cloud Linux, use o CPU Suppress para limitar o uso de CPU dos Pods BE.

Faturamento

A instalação e o uso do ack-koordinator são gratuitos. Custos adicionais podem ser aplicados nos seguintes casos:

  • Recursos de nós worker: o ack-koordinator é autogerenciado e consome CPU e memória dos nós worker após a instalação. Configure as solicitações de recursos para cada módulo durante a instalação.

  • Monitoramento com Prometheus: se você ativar a opção Enable Prometheus Monitoring for ACK-Koordinator e usar o Alibaba Cloud Prometheus, as métricas expostas serão cobradas como custom metrics. Os custos dependem do tamanho do cluster e da quantidade de aplicações. Revise a documentação sobre billing of Prometheus instances antes de ativar essa opção e query usage data para monitorar seu consumo.

Ative a CPU QoS

Ative a CPU QoS no nível do cluster usando um ConfigMap e, em seguida, rotule seus Pods com a classe de QoS apropriada.

Etapa 1: Aplique o ConfigMap

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

    Para aplicar CPU QoS a uma carga de trabalho, como um Deployment, adicione o rótulo koordinator.sh/qosClass ao modelo de Pod em template.metadata .
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      # Enable the CPU QoS feature for containers.
      resource-qos-config: |
        {
          "clusterStrategy": {
            "lsClass": {
              "cpuQOS": {
                "enable": true,
                "groupIdentity": 2
              }
            },
            "beClass": {
              "cpuQOS": {
                "enable": true,
                "groupIdentity": -1
              }
            }
          }
        }

    O campo lsClass configura Pods LS; beClass configura Pods BE. A tabela a seguir descreve os principais parâmetros em cpuQOS.

    Parâmetro

    Tipo

    Valores válidos

    Descrição

    enable

    Booleano

    true / false

    true: ativa a CPU QoS em todo o cluster. false: desativa o recurso.

    groupIdentity

    Inteiro

    -1 a 2

    Prioridade de agendamento do kernel para o cgroup. Valores maiores indicam maior prioridade. Padrão: 2 para Pods LS, -1 para Pods BE. Defina como 0 para desativar a group identity para essa classe.

  2. Verifique se o ConfigMap ack-slo-config já existe no namespace kube-system:

    • Se existir, execute o comando patch a seguir para atualizá-lo sem sobrescrever outros campos de configuração:

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • Se não existir, crie-o:

      kubectl apply -f configmap.yaml

Etapa 2: Implante um Pod LS e verifique

  1. Crie um arquivo chamado ls-pod-demo.yaml com o seguinte conteúdo:

    apiVersion: v1
    kind: Pod
    metadata:
      name: ls-pod-demo
      labels:
        koordinator.sh/qosClass: 'LS' # Specify the QoS class of the Pod as LS.
    spec:
      containers:
      - command:
        - httpd
        - -D
        - FOREGROUND
        image: registry.cn-zhangjiakou.aliyuncs.com/acs/apache-2-4-51-for-slo-test:v0.1
        imagePullPolicy: Always
        name: apache
        resources:
          limits:
            cpu: "4"
            memory: 10Gi
          requests:
            cpu: "4"
            memory: 10Gi
      restartPolicy: Never
      schedulerName: default-scheduler
  2. Implante o Pod:

    kubectl apply -f ls-pod-demo.yaml
  3. No nó, verifique a group identity atribuída ao cgroup do Pod LS:

    cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-pod1c20f2ad****.slice/cpu.bvt_warp_ns

    Saída esperada:

    # The group identity of the LS Pod is 2, which indicates high priority.
    2

Etapa 3: Implante um Pod BE e verifique

  1. Crie um arquivo chamado be-pod-demo.yaml com o seguinte conteúdo:

    apiVersion: v1
    kind: Pod
    metadata:
      name: be-pod-demo
      labels:
        koordinator.sh/qosClass: 'BE' # Specify the QoS class of the Pod as BE.
    spec:
      containers:
        - args:
            - '-c'
            - '1'
            - '--vm'
            - '1'
          command:
            - stress
          image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4
          imagePullPolicy: Always
          name: stress
      restartPolicy: Always
      schedulerName: default-scheduler
  2. Implante o Pod:

    kubectl apply -f be-pod-demo.yaml
  3. No nó, verifique a group identity atribuída ao cgroup do Pod BE:

    cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod4b6e96c8****.slice/cpu.bvt_warp_ns

    Saída esperada:

    # The group identity of the BE Pod is -1, which indicates low priority.
    -1

O Pod LS tem group identity 2 e o Pod BE tem group identity -1. Essa diferença confirma que a CPU QoS está ativa: o kernel prioriza recursos de CPU para cargas de trabalho LS em detrimento das cargas BE.

Perguntas frequentes

Compatibilidade de protocolo ao atualizar para ack-koordinator

Versões anteriores do ack-slo-manager (v0.8.0 e anteriores) usavam a anotação alibabacloud.com/qosClass para configurar a CPU QoS. O ack-koordinator suporta ambos os protocolos, permitindo atualizar o componente e migrar os Pods para o protocolo koordinator.sh incrementalmente. O suporte ao protocolo antigo alibabacloud.com foi encerrado em 30 de julho de 2023 — atualize seus recursos para o novo protocolo o mais breve possível.

Versão do componente

**Protocolo alibabacloud.com**

**Protocolo koordinator.sh**

>= 0.5.2 e < 0.8.0

Suportado

Não suportado

>= 0.8.0

Suportado

Suportado

Próximos passos