ACK reserva CPU y memoria del nodo para Kubernetes y los componentes del sistema. Esto genera una diferencia entre la capacidad total del nodo (Capacity) y los recursos programables (Allocatable). ACK aplica una directiva de reserva predeterminada y también admite reservas personalizadas mediante la configuración de kubelet.
Límites
La reserva personalizada de recursos requiere Kubernetes 1.20 o posterior. Para actualizar, consulte Manually upgrade a cluster.
Alcance del impacto
Reserva de recursos personalizada y su alcance de impacto
Para modificar los valores de reserva, configure kubelet for a node pool. Los cambios se aplican de inmediato a los nodos existentes. Los nodos nuevos, incluidos los generados por escalado o mediante Add Existing Node, también utilizan la configuración actualizada.
No edite manualmente el archivo de configuración de kubelet desde la línea de comandos. Esta acción puede provocar conflictos de configuración y comportamientos inesperados durante las tareas de operación y mantenimiento del node pool.
Aumentar la reserva de recursos reduce los recursos asignables. En nodos con un uso elevado de recursos, esto puede desencadenar la expulsión de pods. Establezca los valores con precaución.
Alcance del impacto de la reserva de recursos predeterminada
ACK puede actualizar los valores de reserva predeterminados con el tiempo. Los valores actualizados se aplican automáticamente cuando se realizan cambios a nivel de nodo; por ejemplo, al actualizar el clúster o el node pool, o al modificar parámetros de kubelet. Si no se realizan dichos cambios, los nodos existentes conservan los valores anteriores para garantizar la estabilidad.
Consulta de recursos asignables del nodo
Consulte la capacidad total y los recursos asignables de un nodo:
kubectl describe node [NODE_NAME] | grep Allocatable -B 7 -A 6
Salida 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
Cálculo de recursos asignables
Utilice esta fórmula para calcular los recursos asignables:Allocatable = Capacity − Reserved − Eviction threshold
Detalles de la fórmula:
Los recursos totales corresponden al campo
Capacityen la salida de consulta del nodo.Consulte Resource reservation policy details.
Consulte Node-pressure eviction para obtener información sobre los umbrales de expulsión.
Detalles de la directiva de reserva de recursos
Los recursos reservados dependen de varios factores:
Las instancias ECS con especificaciones más altas ejecutan más pods, por lo que ACK reserva más recursos para los componentes de Kubernetes.
Los nodos Windows reservan más recursos que los nodos Linux para el sistema operativo y los componentes de Windows Server. Consulte Create and manage Windows node pools.
ACK calcula los recursos reservados según rangos de CPU y memoria; el total equivale a la suma de todos los rangos. En Kubernetes 1.28, ACK optimizó el algoritmo para reducir las reservas. Consulte Manually upgrade a cluster.
Los recursos reservados se dividen equitativamente entre los componentes de Kubernetes (kubeReserved) y los procesos del sistema (systemReserved). En un nodo de 4 núcleos, ACK reserva 80 milinúcleos en Kubernetes 1.28+ (40 kubeReserved + 40 systemReserved), o 100 milinúcleos en las versiones 1.20 a 1.27 (50 + 50).
Directiva de reserva de recursos de CPU
Kubernetes 1.28 y posteriores
Reserva total de CPU para nodos de cómputo:
Para un nodo de 32 núcleos, la reserva total de CPU se calcula de la siguiente manera:
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 nodos de cómputo:
Para un nodo de 32 núcleos, la reserva total de CPU se calcula de la siguiente manera:
100 + (32000 − 4000) × 2.5% = 800 millicores
Directiva de reserva de recursos de memoria
Kubernetes 1.28 y posteriores
Fórmula de reserva total de memoria:
Total memory reservation = min(11 × ($max_num_pods) + 255, 25% × node memory). El valor final es el menor entre 11 × ($max_num_pods) + 255 y 25% of node memory.
-
$max_num_pods: Número máximo de pods compatibles en el nodo.NotaEl número máximo de pods varía según el complemento de red. Consulte Maximum pods per node para obtener más detalles.
Puede iniciar sesión en la Container Service Management Console y consultar el número máximo de pods en la página de Nodes.
Terway:
Maximum pods per node = Maximum container-network pods + Host-network pods.Flannel: Se establece durante la creación del clúster.
Node memory: Memoria utilizable real, en MiB.
Por ejemplo, con Terway (ENI compartida, múltiples IP) en una instancia ecs.g7.16xlarge (256 GiB de memoria): pods máximos = (8 − 1) × 30 + 3 = 213. Reserva total de memoria = min(11 × (210 + 3) + 255, 256 × 1024 × 25%) = 2598 MiB.
Kubernetes 1.20 a 1.27
Reserva total de memoria para un nodo de cómputo:
Para un nodo con 256 GiB de memoria, la reserva total de memoria se calcula de la siguiente manera:
4 × 25% + (8 − 4) × 20% + (16 − 8) × 10% + (128 − 16) × 6% + (256 − 128) × 2% = 11.88 GiB
Ejemplos de reservas de recursos predeterminadas para nodos ACK
Consulte Instance families para obtener detalles sobre los tipos de instancia ECS.
|
Recursos totales del nodo |
Recursos reservados (Kubernetes 1.28 y posteriores) |
Recursos reservados (Kubernetes 1.20 a 1.27) |
|||||
|
Tipo de instancia de ejemplo |
CPU (núcleos) |
Memoria (GiB) |
Máximo de pods por nodo (se toma como ejemplo el modo de ENI compartida y múltiples IP de Terway) |
CPU (milinúcleo) |
Memoria (MiB) |
CPU (milinúcleos) |
Memoria (MiB) |
|
Tipos de instancia 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 instancia ECS ebmc7a |
256 |
512 |
453 |
710 |
5238 |
3040 |
17407 |
Preguntas frecuentes
¿Cómo consulto la CPU y la memoria totales de un nodo?
CPU
Consulte el total de núcleos de CPU:
cat /proc/cpuinfo | grep processor
Salida esperada:
processor : 0
processor : 1
processor : 2
processor : 3
Memoria
Consulte la memoria total:
cat /proc/meminfo | grep MemTotal
Salida esperada:
MemTotal: 7660952 kB
¿Por qué la memoria disponible es menor que la especificación del tipo de instancia?
Las especificaciones del tipo de instancia incluyen la memoria total (incluido el uso del sistema operativo), por lo que la memoria disponible siempre es menor. Consulte After purchasing an instance, why does the displayed memory differ from the instance type specification?.
Referencias
Personalice las reservas de recursos y los umbrales de expulsión mediante configuring kubelet for a node pool.
Las solicitudes totales de pods en un nodo no deben exceder los recursos asignables; de lo contrario, los pods no se podrán programar. Utilice resource profiling de ACK para analizar el uso histórico y establecer solicitudes precisas para cargas de trabajo nativas de Kubernetes. Consulte Create a Deployment.