Quando executo kubectl top nodes
meu cluster do Azure Kubernetes Services com nós do Windows, recebo um valor de volta para MEMORY(bytes)
:
PS >kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
...
akswinxxxxxxxxx 163m 8% 2407Mi 55%
...
Este número (2.407 Mi) não é oAlocadovalor retornado por kubectl describe node
, que (quando convertido para a mesma unidade) é2.084 Mi:
PS > kubectl describe node akswinxxxxxxxxx
...
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1070m (56%) 500m (26%)
memory 2134435Ki (48%) 2412Mi (56%)
ephemeral-storage 0 (0%) 0 (0%)
(Tenho visto diferenças muito maiores em outras situações.)
Também não é igual à soma dos conjuntos de trabalho (6398 Mi) ou memória privada (3822 Mi) dos processos em execução no nó:
PS C:\C\6428530b2b53f975bb582acc2f12458ca138075069d33d663f3b9e2ec70edbaf> (get-process |Measure-Object WorkingSet64 -Sum).Sum / 1024 / 1024
6397.7109375
PS C:\C\6428530b2b53f975bb582acc2f12458ca138075069d33d663f3b9e2ec70edbaf> (get-process |Measure-Object PrivateMemorySize64 -Sum).Sum / 1024 / 1024
3822.328125
Também não é a soma da memória do Pod, conforme relatado por crictl stats
(1531 Mi):
PS >crictl stats
CONTAINER CPU % MEM DISK INODES
2bdfd79f404af 0.00 33.39MB 71.3MB 0
32ea5bc86bacf 0.00 34.36MB 37.75MB 0
511eb449bc0ae 0.00 37.55MB 71.3MB 0
52a1bd98c3558 3.09 222MB 147.8MB 0
6428530b2b53f 0.00 73.54MB 37.75MB 0
6bd5050e8bb4c 0.00 37.68MB 37.75MB 0
78a51582874ec 0.00 241.5MB 104.9MB 0
bb1224de3c87e 0.00 34.14MB 71.3MB 0
e19566f08ca1e 0.00 38.27MB 37.75MB 0
e633436686347 0.00 329.5MB 172MB 0
f82c4306b4692 0.00 34.79MB 37.75MB 0
fa36b455d852f 0.00 235.8MB 104.9MB 0
fe7d9f0193f17 0.00 178MB 306.2MB 0
Também não corresponde à "memória total menos memória física livre" no nó (5101Mi):
PS >$OS = Get-WmiObject -Class WIN32_OperatingSystem
PS> ($OS.TotalVisibleMemorySize - $OS.FreePhysicalMemory)/1024
5101.25390625
Como indicado noDocumentos do Kubernetes, o valor destina-se a indicar o valor de um nóConjunto de trabalho. Então, o que isso significa e como é medido? Como posso usá-lo para monitorar a integridade de um nó ou os recursos disponíveis?
(Observação: na Internet, muitas vezes encontro referências ao Kubernetesservidor de métricas. No entanto, isso não parece estar em execução nos meus nós do Windows AKS.)
Atualização 2022-12-05:Eu sei que o número serve para indicar, em geral, quanto da memória do nó está sendo usada no momento. No entanto, eu realmente quero saber mais detalhes sobre isso. Como não corresponde aos números de memória do Pod, parece incluir processos do sistema, certo? Então, como pode ser comparado comAlocável(a MEMORY%
porcentagem), qual é o que está disponível para Pods? E por que não corresponde aos números informados diretamente no nó (veja acima)? Resumindo, gostaria de saber como o número é realmente calculado - no Windows.
Responder1
O "MEMÓRIA (bytes)"o valor mostrado por kubectl top nodes
não é igual ao"Alocado"valor mostrado por kubectl describe <node>
. O valor "Alocado" indica a quantidade de memória que foi alocada para o nó pelo agendador do Kubernetes, com base nas solicitações de memória e limites que foram definidos para os pods em execução no nó. O valor "MEMÓRIA (bytes)"O valor, por outro lado, indica a quantidade real de memória que está sendo usada pelos processos em execução no nó no momento em que o kubectl top nodes
comando é executado.
Você pode usar o "MEMÓRIA (bytes)"valor mostrado por kubectl top nodes
para monitorar a integridade de seus nós e garantir que eles tenham memória suficiente disponível para executar suas cargas de trabalho. Se o valor estiver consistentemente próximo de "Alocado" valor, pode indicar que o nó está com pouca memória e pode precisar ser redimensionado ou ter seus recursos realocados.