Política de CPU
Cenários
Por padrão, o kubelet usa cotas do CFS para impor limites de CPU do pod. Quando o nó executa muitos pods ligados à CPU, a carga de trabalho pode mover-se para diferentes núcleos de CPU, dependendo se o pod é acelerado e quais núcleos de CPU estão disponíveis no momento do agendamento. Muitas cargas de trabalho não são sensíveis a essa migração e, portanto, funcionam bem sem qualquer intervenção. Algumas aplicações são sensíveis à CPU. Eles são sensíveis a:
- Limitação da CPU
- Comutação de contexto
- Falta cache do processador
- Acesso à memória entre soquetes
- Hyperthreads que devem ser executados na mesma placa de CPU física
Se suas cargas de trabalho forem sensíveis a qualquer um desses itens e a afinidade de cache da CPU e a latência de agendamento afetarem significativamente o desempenho da carga de trabalho, o kubelet permitirá que políticas alternativas de gerenciamento de CPU (vinculação de CPU) determinem algumas preferências de posicionamento no nó. O gerenciador de CPU aloca preferencialmente recursos em um soquete e núcleos físicos completos para evitar interferências.
Ativar a política de gerenciamento da CPU
Uma política de gerenciamento de CPU é especificada pelo sinalizador de kubelet --cpu-manager-policy. Por padrão, o Kubernetes suporta as seguintes políticas:
- Desativada (none): a política padrão. A política none ativa explicitamente o esquema de afinidade da CPU padrão existente, não fornecendo nenhuma afinidade além do que o agendador do sistema operacional faz automaticamente.
- Ativada (static): a política static permite que os contêineres em pods garantidos com solicitações de GPU inteiras recebam maior afinidade e exclusividade da CPU no nó.
Ao criar um cluster, você pode configurar a política de gerenciamento da CPU em Advanced Settings.
Você também pode configurar a política em um pool de nós. A configuração mudará o sinalizador de kubelet --cpu-manager-policy no nó. Faça logon no console do CCE, clique no nome do cluster, acesse a página de detalhes do cluster e escolha Nodes no painel de navegação. Na página exibida, clique na guia Node Pools. Escolha More > Manage na coluna Operation do pool de nós de destino e altere o valor de cpu-manager-policy para static.
Permitir que os pods usem exclusivamente os recursos da CPU
Pré-requisitos:
- Ativar a política static no nó. Para mais detalhes, consulte Ativar a política de gerenciamento da CPU.
- Tanto as solicitações quanto os limites devem ser configurados em pods e seus valores devem ser o mesmo número inteiro.
- Se um contêiner init precisar usar exclusivamente CPUs, defina suas solicitações como as mesmas do contêiner de serviço. Caso contrário, o contêiner de serviço não herda o resultado de alocação de CPU do contêiner init, e o gerenciador de CPU reserva mais recursos de CPU do que o suposto.Para obter mais informações, consulte Contêineres de aplicações não podem herdar CPUs de contêineres init - Política estática do gerenciador de CPU.
Você pode usar Política de agendamento (afinidade/antiafinidade) para programar os pods configurados para os nós em que a política static está ativada. Desta forma, os pods podem usar exclusivamente os recursos da CPU.
kind: Deployment apiVersion: apps/v1 metadata: name: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - name: container-1 image: nginx:alpine resources: requests: cpu: 2 # The value must be an integer and must be the same as that in limits. memory: 2048Mi limits: cpu: 2 # The value must be an integer and must be the same as that in requests. memory: 2048Mi imagePullSecrets: - name: default-secret