O ACK reserva CPU e memória dos nós para componentes do Kubernetes e do sistema. Isso gera uma diferença entre a capacidade total do nó (Capacity) e os recursos agendáveis (Allocatable). O ACK aplica uma política de reserva padrão e também permite reservas personalizadas por meio da configuração do kubelet.
Limites
A reserva personalizada de recursos exige Kubernetes 1.20 ou posterior. Para atualizar, consulte Fazer upgrade manual de um cluster.
Escopo de impacto
Reserva de recursos personalizada e seu escopo de impacto
Para alterar os valores de reserva, configure o kubelet para um pool de nós. As alterações são aplicadas imediatamente aos nós existentes. Novos nós — incluindo aqueles provenientes de dimensionamento ou da opção Add Existing Node — também utilizam a configuração atualizada.
Não edite manualmente o arquivo de configuração do kubelet na linha de comando. Essa ação pode causar conflitos de configuração e comportamentos inesperados durante a operação e manutenção do pool de nós.
Aumentar a reserva de recursos reduz os recursos agendáveis. Em nós com alto uso de recursos, isso pode acionar a evicção de pods. Defina os valores com cuidado.
Escopo de impacto da reserva de recursos padrão
O ACK pode atualizar os valores de reserva padrão ao longo do tempo. Os novos valores são aplicados automaticamente quando você executa alterações no nível do nó — por exemplo, ao fazer upgrade do cluster ou do pool de nós, ou ao modificar parâmetros do kubelet. Sem essas alterações, os nós existentes mantêm os valores anteriores para garantir estabilidade.
Visualizar recursos agendáveis do nó
Visualize a capacidade total e os recursos agendáveis de um nó:
kubectl describe node [NODE_NAME] | grep Allocatable -B 7 -A 6
Saída esperada:
Capacity:
cpu: 4 # Total CPU cores on the node.
ephemeral-storage: 123722704Ki # Total ephemeral storage on the node, in KiB.
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7925980Ki # Total memory on the node, in KiB.
pods: 64
Allocatable:
cpu: 3900m # Allocatable CPU cores.
ephemeral-storage: 114022843818 # Allocatable ephemeral storage, in bytes.
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 5824732Ki # Allocatable memory, in KiB.
pods: 64
Calcular recursos agendáveis
Use esta fórmula para calcular os recursos agendáveis: Allocatable = Capacity − Reserved − Eviction threshold
Detalhes da fórmula:
Os recursos totais correspondem ao campo
Capacityna saída da consulta do nó.Consulte Evicção por pressão no nó para obter informações sobre limiares de evicção.
Detalhes da política de reserva de recursos
Os recursos reservados dependem de vários fatores:
Instâncias ECS com especificações mais altas executam mais pods; portanto, o ACK reserva mais recursos para os componentes do Kubernetes.
Nós Windows reservam mais recursos do que nós Linux para o sistema operacional e componentes do Windows Server. Consulte Criar e gerenciar pools de nós Windows.
O ACK calcula os recursos reservados com base em faixas de CPU e memória. O total equivale à soma de todas as faixas. No Kubernetes 1.28, o ACK otimizou o algoritmo para reduzir as reservas. Consulte Fazer upgrade manual de um cluster.
Os recursos reservados dividem-se igualmente entre componentes do Kubernetes (kubeReserved) e processos do sistema (systemReserved). Em um nó de 4 núcleos, o ACK reserva 80 milicores no Kubernetes 1.28+ (40 kubeReserved + 40 systemReserved) ou 100 milicores nas versões 1.20 a 1.27 (50 + 50).
Política de reserva de recursos de CPU
Kubernetes 1.28 e posteriores
Reserva total de CPU para nós de computação:
Para um nó de 32 núcleos, calcule a reserva total de CPU da seguinte forma:
1000 × 6% + 1000 × 1% + 1000 × 2 × 0.5% + (32000 − 4000) × 0.25% = 150 millicores
Kubernetes 1.20 a 1.27
Reserva total de CPU para nós de computação:
Para um nó de 32 núcleos, calcule a reserva total de CPU da seguinte forma:
100 + (32000 − 4000) × 2.5% = 800 millicores
Política de reserva de recursos de memória
Kubernetes 1.28 e posteriores
Fórmula de reserva total de memória:
Total memory reservation = min(11 × ($max_num_pods) + 255, 25% × node memory). O valor final corresponde ao menor entre 11 × ($max_num_pods) + 255 e 25% of node memory.
-
$max_num_pods: Número máximo de pods suportados no nó.NotaOs limites máximos de pods variam conforme o plug-in de rede. Consulte Máximo de pods por nó para mais detalhes.
Acesse o Console de Gerenciamento do Container Service e visualize a contagem máxima de pods na página Nodes.
Terway:
Maximum pods per node = Maximum container-network pods + Host-network pods.Flannel: Definido por você durante a criação do cluster.
Node memory: Memória utilizável real, em MiB.
Por exemplo, com Terway (ENI compartilhado, múltiplos IPs) em uma instância ecs.g7.16xlarge (256 GiB de memória): máximo de pods = (8 − 1) × 30 + 3 = 213. Reserva total de memória = min(11 × (210 + 3) + 255, 256 × 1024 × 25%) = 2598 MiB.
Kubernetes 1.20 a 1.27
Reserva total de memória para um nó de computação:
Para um nó com 256 GiB de memória, calcule a reserva total de memória da seguinte forma:
4 × 25% + (8 − 4) × 20% + (16 − 8) × 10% + (128 − 16) × 6% + (256 − 128) × 2% = 11.88 GiB
Exemplos de reservas padrão de recursos para nós do ACK
Consulte Famílias de instâncias para obter detalhes sobre os tipos de instância ECS.
|
Recursos totais do nó |
Recursos reservados (Kubernetes 1.28 e posteriores) |
Recursos reservados (Kubernetes 1.20 a 1.27) |
|||||
|
Tipo de instância de exemplo |
CPU (núcleos) |
Memória (GiB) |
Máximo de Pods por Nó (usando o modo multi-IP com ENI compartilhado do Terway como exemplo) |
CPU (milicores) |
Memória (MiB) |
CPU (milicores) |
Memória (MiB) |
|
Tipos de instância ECS c7 |
2 |
4 |
15 |
70 |
420 |
100 |
1024 |
|
4 |
8 |
48 |
80 |
783 |
100 |
1843 |
|
|
8 |
16 |
48 |
90 |
783 |
200 |
2662 |
|
|
16 |
32 |
213 |
110 |
2598 |
400 |
3645 |
|
|
32 |
64 |
213 |
150 |
2598 |
800 |
5611 |
|
|
64 |
128 |
213 |
230 |
2598 |
1600 |
9543 |
|
|
128 |
256 |
423 |
390 |
4908 |
2400 |
12164 |
|
|
Tipos de instância ECS ebmc7a |
256 |
512 |
453 |
710 |
5238 |
3040 |
17407 |
Perguntas frequentes
Como visualizo o total de CPU e memória em um nó?
CPU
Visualize o total de núcleos de CPU:
cat /proc/cpuinfo | grep processor
Saída esperada:
processor : 0
processor : 1
processor : 2
processor : 3
Memória
Visualize a memória total:
cat /proc/meminfo | grep MemTotal
Saída esperada:
MemTotal: 7660952 kB
Por que a memória disponível é menor que a especificação do tipo de instância?
As especificações do tipo de instância incluem a memória total (incluindo o uso pelo sistema operacional); portanto, a memória disponível é sempre menor. Consulte Após comprar uma instância, por que a memória exibida difere da especificação do tipo de instância?.
Referências
Personalize as reservas de recursos e os limiares de evicção ao configurar o kubelet para um pool de nós.
O total de solicitações de pods em um nó não deve exceder os recursos agendáveis. Caso contrário, o agendamento dos pods falhará. Use o perfilamento de recursos do ACK para analisar o uso histórico e definir solicitações precisas para workloads nativos do Kubernetes. Consulte Criar um Deployment.