Limite o cache L3 e a largura de banda de memória dos pods BestEffort para proteger cargas de trabalho sensíveis à latência em nós compartilhados.
Como funciona
A Intel Resource Director Technology (RDT) particiona os recursos de hardware por nó. O ack-koordinator lê o ConfigMap ack-slo-config e aplica as configurações do grupo resctrl conforme a classe de QoS de cada pod. Por padrão, os pods BestEffort (BE) recebem 30% do cache L3, enquanto os pods sensíveis à latência (LS) recebem 100%. A largura de banda de memória padrão é de 100% para ambas as classes.
Pré-requisitos
Verifique se você tem:
Um cluster ACK com pelo menos uma instância bare metal do Elastic Compute Service (ECS) com CPU compatível com RDT (modelos compatíveis).
O ack-koordinator 0.8.0 ou posterior instalado.
Faturamento
O ack-koordinator é gratuito. Custos podem ocorrer em duas áreas:
Consumo de recursos do nó: O ack-koordinator não é gerenciado e roda nos nós de trabalho. Especifique as solicitações de recursos por módulo durante a instalação para controlar a sobrecarga.
Métricas do Prometheus: Se você ativar as métricas do Prometheus para o ack-koordinator e usar o Managed Service for Prometheus, as métricas serão contabilizadas como métricas personalizadas e faturadas adequadamente. As cobranças dependem do tamanho do cluster e da quantidade de aplicações. Revise o faturamento do Managed Service for Prometheus antes de ativar e monitore o uso com Consulta de dados observáveis e faturas.
Etapa 1: Verificar e ativar o RDT no kernel do nó
-
Verifique se o kernel tem o RDT ativado:
cat /proc/cmdlineProcure por
l3catembana saída:# Other fields omitted. This example shows only the RDT portion of the BOOT_IMAGE field. BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mbaSe
l3catembaaparecerem, o RDT já está ativado. Pule para a Etapa 2. -
Adicione as opções de RDT aos parâmetros de inicialização do kernel. Em
/etc/default/grub, anexe o seguinte aGRUB_CMDLINE_LINUX:ImportanteSepare as opções de RDT das configurações existentes com um espaço. Não sobrescreva outros parâmetros do kernel.
# Other fields omitted. This example shows only the RDT portion of the GRUB_CMDLINE_LINUX field. GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba" -
Regenere a configuração do GRUB:
# The file path may differ depending on your OS distribution. sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
Reinicie o nó:
sudo systemctl rebootApós reiniciar o nó, execute novamente
cat /proc/cmdlinee verifique sel3catembaaparecem.
Etapa 2: Configure o isolamento de cache L3 e MBA
O ConfigMap ack-slo-config no namespace kube-system controla o isolamento de cache L3 e MBA. Aplique o ConfigMap e rotule os pods com a classe de QoS correspondente para ativar a política.
Aplicar o ConfigMap
Crie o arquivo configmap.yaml com o seguinte conteúdo:
apiVersion: v1
kind: ConfigMap
metadata:
name: ack-slo-config
namespace: kube-system
data:
# resource-qos-config: configures QoS-based resource isolation features.
# resctrlQOS: controls Intel RDT (L3 cache and MBA) isolation per QoS class.
# enable: set to true to activate L3 cache and MBA isolation for pods of this class.
resource-qos-config: |
{
"clusterStrategy": {
"beClass": {
"resctrlQOS": {
"enable": true
}
}
}
}
Em seguida, aplique o ConfigMap:
-
Se o
ack-slo-configjá existir no namespacekube-system, aplique um patch para preservar outras configurações:kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)" -
Caso o ConfigMap não exista, crie-o:
kubectl apply -f configmap.yaml
(Opcional) Ajustar porcentagens de isolamento por classe de QoS
Para ajustar o cache L3 e a largura de banda de memória por classe de QoS, atualize o ConfigMap com porcentagens explícitas:
apiVersion: v1
kind: ConfigMap
metadata:
name: ack-slo-config
namespace: kube-system
data:
resource-qos-config: |
{
"clusterStrategy": {
"lsClass": {
"resctrlQOS": {
"enable": true,
"catRangeEndPercent": 100, # LS pods: 100% of L3 cache (default)
"mbaPercent": 100 # LS pods: 100% memory bandwidth (default)
}
},
"beClass": {
"resctrlQOS": {
"enable": true,
"catRangeEndPercent": 30, # BE pods: 30% of L3 cache (default)
"mbaPercent": 100 # BE pods: 100% memory bandwidth (default)
}
}
}
}
Parâmetros de resctrlQOS:
|
Parâmetro |
Tipo |
Valores válidos |
Padrão (classe LS) |
Padrão (classe BE) |
Descrição |
|
|
Booleano |
|
— |
— |
Ativa ou desativa o isolamento de cache L3 e MBA. |
|
|
Inteiro |
0–100 (%) |
100 |
30 |
Porcentagem do cache L3 alocada à classe de QoS. |
|
|
Inteiro |
0–100 (%), deve ser múltiplo de 10 |
100 |
100 |
Porcentagem da largura de banda de memória disponível para a classe de QoS. |
Rotular pods com uma classe de QoS
Aplique o rótulo koordinator.sh/qosClass aos pods que deseja isolar. Este exemplo cria um pod BE que executa uma carga de trabalho de estresse de memória:
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
labels:
koordinator.sh/qosClass: 'BE' # Assigns this pod to the BE QoS class.
spec:
containers:
- name: pod-demo
image: polinux/stress
resources:
requests:
cpu: 1
memory: "50Mi"
limits:
cpu: 1
memory: "1Gi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "256M", "-c", "2", "--vm-hang", "1"]
Para Deployments, defina o rótulo
koordinator.sh/qosClass
no campo
template.metadata
, e não no nível do Deployment.
Implante o pod:
kubectl apply -f pod-demo.yaml
Próximas etapas
Ative o overcommitment dinâmico de recursos para alocar recursos ociosos de pods Guaranteed ou Burstable em tarefas BE.
Para limitar o consumo de recursos dos pods BE, ative a QoS de CPU e a QoS de memória.