Cuando ejecuto kubectl top nodes
mi clúster de Azure Kubernetes Services con nodos de Windows, obtengo un valor de MEMORY(bytes)
:
PS >kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
...
akswinxxxxxxxxx 163m 8% 2407Mi 55%
...
Este número (2407Mi) No es elAsignadovalor devuelto por kubectl describe node
, que (cuando se convierte a la misma unidad) es2084Mi:
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%)
(He visto diferencias mucho mayores en otras situaciones).
Tampoco es lo mismo que la suma de los conjuntos de trabajo (6398Mi) o memoria privada (3822Mi) de los procesos que se ejecutan en el nodo:
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
Tampoco es la suma de la memoria del Pod, según lo informado por crictl stats
(1531Mi):
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
Tampoco coincide con "memoria total menos memoria física libre" en el nodo (5101Mi):
PS >$OS = Get-WmiObject -Class WIN32_OperatingSystem
PS> ($OS.TotalVisibleMemorySize - $OS.FreePhysicalMemory)/1024
5101.25390625
Como se indica en elDocumentos de Kubernetes, el valor está destinado a indicar un nodoConjunto de trabajo. Entonces, ¿qué significa eso y cómo se mide? ¿Cómo puedo usarlo para monitorear el estado de un nodo o los recursos disponibles?
(Nota: en Internet, a menudo encuentro referencias a Kubernetesservidor de métricas. Sin embargo, eso no parece estar ejecutándose en mis nodos de AKS Windows).
Actualización 2022-12-05:Sé que el número pretende indicar, en general, cuánta memoria del nodo se está utilizando actualmente. Sin embargo, realmente quiero saber más detalles sobre eso. Como no coincide con los números de memoria del Pod, parece incluir procesos del sistema, ¿verdad? Entonces, ¿cómo se puede comparar conAsignable(el MEMORY%
porcentaje), ¿cuál es lo que hay disponible para Pods? ¿Y por qué no coincide con los números reportados directamente en el nodo (ver arriba)? En pocas palabras, me gustaría saber cómo se calcula realmente el número en Windows.
Respuesta1
El "MEMORIA (bytes)"El valor mostrado por kubectl top nodes
no es el mismo que el "Asignado" valor que se muestra con kubectl describe <node>
. El valor "Asignado" indica la cantidad de memoria que el programador de Kubernetes ha asignado al nodo, en función de las solicitudes de memoria y los límites que se han establecido para los pods que se ejecutan en el nodo. El "MEMORIA (bytes)"El valor, por otro lado, indica la cantidad real de memoria que utilizan los procesos que se ejecutan en el nodo en el momento en que kubectl top nodes
se ejecuta el comando.
Puedes utilizar el "MEMORIA (bytes)" valor mostrado por kubectl top nodes
para monitorear el estado de sus nodos y garantizar que tengan suficiente memoria disponible para ejecutar sus cargas de trabajo. Si el valor está constantemente cerca de "Asignado", puede indicar que el nodo se está quedando sin memoria y es posible que sea necesario cambiar su tamaño o reasignar sus recursos.