En esta página, se describen las decisiones que toma el escalador automático de clústeres de Google Kubernetes Engine (GKE) sobre el ajuste de escala automático.
El escalador automático de clústeres de GKE emite eventos de visibilidad, que están disponibles como entradas de registro en Cloud Logging.
Los eventos descritos en esta guía son independientes de los eventos de Kubernetes que produce el escalador automático de clústeres.
Requisitos de disponibilidad
La capacidad de ver eventos registrados para el escalador automático de clústeres está disponible en las siguientes versiones del clúster:
Tipo de evento | Versión del clúster |
---|---|
status , scaleUp , scaleDown , eventResult |
1.15.4-gke.7 y posterior |
nodePoolCreated , nodePoolDeleted . |
1.15.4-gke.18 y posterior |
noScaleUp |
1.16.6-gke.3 y posterior |
noScaleDown |
1.16.8-gke.2 y posterior |
Para ver los eventos del escalador automático, debes habilitar Cloud Logging en tu clúster. Los eventos no se producirán si se inhabilita Logging.
Visualizar eventos
Los eventos de visibilidad para el escalador automático de clústeres se almacenan en un registro de Cloud Logging, en el mismo proyecto en el que se encuentra tu clúster de GKE. También puedes ver estos eventos desde las notificaciones en la página Google Kubernetes Engine en la consola de Google Cloud.
Visualiza los registros de eventos de visibilidad
Para ver los registros, realiza lo siguiente:
En la consola de Google Cloud, ve a la página de clústeres de Kubernetes.
Selecciona el nombre de tu clúster para ver la página Detalles del clúster.
En la página Detalles del clúster, haz clic en la pestaña Registros.
En la pestaña Registros, haz clic en la pestaña Registros del escalador automático para ver los registros.
Si deseas aplicar filtros más avanzados para limitar los resultados, haz clic en el botón de la flecha ubicada en el lado derecho de la página a fin de ver los registros en Explorador de registros (opcional).
Visualiza las notificaciones de eventos de visibilidad
Para ver las notificaciones de eventos de visibilidad en la página Google Kubernetes Engine, realiza lo siguiente:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:
Revisa la columna Notificaciones para los clústeres específicos a fin de encontrar notificaciones relacionadas con el escalamiento.
Haz clic en la notificación para obtener información detallada, acciones recomendadas y acceso a los registros de este evento.
Tipos de eventos
Todos los eventos registrados están en formato JSON y se pueden encontrar en el campo jsonPayload de una entrada de registro. Todas las marcas de tiempo de los eventos son marcas de tiempo de UNIX.
Este es un resumen de los tipos de eventos que emite el escalador automático de clústeres:
Tipo de evento | Descripción |
---|---|
status |
Ocurre de forma periódica y describe el tamaño de todos los grupos de nodos con ajuste de escala automático y el tamaño objetivo de todos los grupos de nodos con ajuste de escala automático que observa el escalador automático de clústeres. |
scaleUp |
Ocurre cuando el escalador automático de clústeres escala verticalmente el clúster. |
scaleDown |
Ocurre cuando el escalador automático del clúster reduce la escala del clúster. |
eventResult |
Ocurre cuando un evento scaleUp o scaleDown se completa con o sin éxito. |
nodePoolCreated |
Ocurre cuando el escalador automático de clústeres con aprovisionamiento automático de nodos habilitado crea un grupo de nodos nuevo. |
nodePoolDeleted |
Ocurre cuando el escalador automático de clústeres con aprovisionamiento automático de nodos habilitado borra un grupo de nodos. |
noScaleUp |
Ocurre cuando hay pods no programables en el clúster y el escalador automático de clústeres no puede escalar el clúster para alojar los pods. |
noScaleDown |
Ocurre cuando hay nodos que el escalador automático de clústeres bloquea. |
Evento de estado
Un evento status
se emite de forma periódica y describe el tamaño real de todos los grupos de nodos con ajuste de escala automático y el tamaño objetivo de todos los grupos de nodos con ajuste de escala automático que observa el escalador automático de clústeres.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento status
:
{
"status": {
"autoscaledNodesCount": 4,
"autoscaledNodesTarget": 4,
"measureTime": "1582898536"
}
}
Evento de ScaleUp
Se emite un evento scaleUp
cuando el escalador automático escala verticalmente del clúster.
El escalador automático aumenta el tamaño de los grupos de nodos del clúster mediante el escalamiento vertical de los grupos de instancias administrados (MIG) subyacentes para los grupos de nodos. Para obtener más información sobre cómo funciona el escalamiento vertical, consulta ¿Cómo funciona el escalamiento vertical?
en las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes.
El evento contiene información sobre qué MIG se escalaron verticalmente, en cuántos nodos y qué Pods no programables activaron el evento.
La lista de pods activadores se trunca a 50 entradas arbitrarias. La cantidad real de pods activadores se puede encontrar en el campo triggeringPodsTotalCount
.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento scaleUp
:
{
"decision": {
"decideTime": "1582124907",
"eventId": "ed5cb16d-b06f-457c-a46d-f75dcca1f1ee",
"scaleUp": {
"increasedMigs": [
{
"mig": {
"name": "test-cluster-default-pool-a0c72690-grp",
"nodepool": "default-pool",
"zone": "us-central1-c"
},
"requestedNodes": 1
}
],
"triggeringPods": [
{
"controller": {
"apiVersion": "apps/v1",
"kind": "ReplicaSet",
"name": "test-85958b848b"
},
"name": "test-85958b848b-ptc7n",
"namespace": "default"
}
],
"triggeringPodsTotalCount": 1
}
}
}
Evento de ScaleDown
Se emite un evento scaleDown
cuando el escalador automático de clústeres reduce la escala.
Para obtener más información sobre cómo funciona la reducción vertical de la escala, consulta ¿Cómo funciona la reducción vertical de la escala?
en las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes.
Los campos cpuRatio
y memRatio
describen el uso de CPU y memoria del nodo, como un porcentaje. Este uso es una suma de las solicitudes de pod divididas por los nodos asignables, no el uso real.
La lista de pods expulsados se trunca a 50 entradas arbitrarias. La cantidad real de pods expulsados se puede encontrar en el campo evictedPodsTotalCount
.
Usa la siguiente consulta para verificar si el escalador automático de clústeres redujo los nodos
resource.type="k8s_cluster" \
resource.labels.location=COMPUTE_REGION \
resource.labels.cluster_name=CLUSTER_NAME \
log_id("container.googleapis.com/cluster-autoscaler-visibility") \
( "decision" NOT "noDecisionStatus" )
Reemplaza lo siguiente:
CLUSTER_NAME
: el nombre del clústerCOMPUTE_REGION
: la región de Compute Engine del clúster, comous-central1
.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento scaleDown
:
{
"decision": {
"decideTime": "1580594665",
"eventId": "340dac18-8152-46ff-b79a-747f70854c81",
"scaleDown": {
"nodesToBeRemoved": [
{
"evictedPods": [
{
"controller": {
"apiVersion": "apps/v1",
"kind": "ReplicaSet",
"name": "kube-dns-5c44c7b6b6"
},
"name": "kube-dns-5c44c7b6b6-xvpbk"
}
],
"evictedPodsTotalCount": 1,
"node": {
"cpuRatio": 23,
"memRatio": 5,
"mig": {
"name": "test-cluster-default-pool-c47ef39f-grp",
"nodepool": "default-pool",
"zone": "us-central1-f"
},
"name": "test-cluster-default-pool-c47ef39f-p395"
}
}
]
}
}
}
También puedes ver el evento scale-down
en los nodos sin carga de trabajo en ejecución (por lo general, solo Pods de sistema creados por DaemonSets).
Usa la siguiente consulta para ver los registros de eventos:
resource.type="k8s_cluster" \
resource.labels.project_id=PROJECT_ID \
resource.labels.location=COMPUTE_REGION \
resource.labels.cluster_name=CLUSTER_NAME \
severity>=DEFAULT \
logName="projects/PROJECT_ID/logs/events" \
("Scale-down: removing empty node")
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoCLUSTER_NAME
: el nombre del clústerCOMPUTE_REGION
: la región de Compute Engine del clúster, comous-central1
.
Evento de EventResult
Se emite un evento eventResult
cuando un evento scaleUp o scaleDown se completa con o sin éxito. Este evento contiene una lista de ID de eventos (del campo eventId
en eventos scaleUp o scaleDown), junto con mensajes de error. Un mensaje de error vacío indica que el evento se completó correctamente. Se agrega una lista de eventos eventResult en el campo results
.
Para diagnosticar errores, consulta las secciones Errores de ScaleUp y Errores de ScaleDown.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento eventResult
:
{
"resultInfo": {
"measureTime": "1582878896",
"results": [
{
"eventId": "2fca91cd-7345-47fc-9770-838e05e28b17"
},
{
"errorMsg": {
"messageId": "scale.down.error.failed.to.delete.node.min.size.reached",
"parameters": [
"test-cluster-default-pool-5c90f485-nk80"
]
},
"eventId": "ea2e964c-49b8-4cd7-8fa9-fefb0827f9a6"
}
]
}
}
Evento NodePoolCreated
Se emite un evento nodePoolCreated
cuando el escalador automático del clúster con aprovisionamiento automático de nodos crea un grupo de nodos nuevo. Este evento contiene el nombre del grupo de nodos creado y una lista de sus MIG. Si el grupo de nodos se creó debido a un evento scaleUp, el eventId
del evento scaleUp correspondiente se incluye en el campo triggeringScaleUpId
.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento nodePoolCreated
:
{
"decision": {
"decideTime": "1585838544",
"eventId": "822d272c-f4f3-44cf-9326-9cad79c58718",
"nodePoolCreated": {
"nodePools": [
{
"migs": [
{
"name": "test-cluster-nap-n1-standard--b4fcc348-grp",
"nodepool": "nap-n1-standard-1-1kwag2qv",
"zone": "us-central1-f"
},
{
"name": "test-cluster-nap-n1-standard--jfla8215-grp",
"nodepool": "nap-n1-standard-1-1kwag2qv",
"zone": "us-central1-c"
}
],
"name": "nap-n1-standard-1-1kwag2qv"
}
],
"triggeringScaleUpId": "d25e0e6e-25e3-4755-98eb-49b38e54a728"
}
}
}
Evento NodePoolDeleted
Se emite un evento nodePoolDeleted
cuando el escalador automático de clústeres con aprovisionamiento automático de nodos borra un grupo de nodos.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento nodePoolDeleted
:
{
"decision": {
"decideTime": "1585830461",
"eventId": "68b0d1c7-b684-4542-bc19-f030922fb820",
"nodePoolDeleted": {
"nodePoolNames": [
"nap-n1-highcpu-8-ydj4ewil"
]
}
}
}
Evento noScaleUp
Un evento noScaleUp
se emite de forma periódica cuando hay pods no programables en el clúster y el escalador automático de clústeres no puede escalar el clúster para alojar los pods.
- Los eventos noScaleUp se basan en el mejor esfuerzo, es decir, estos eventos no abarcan todos los motivos posibles por los que el escalador automático de clústeres no puede escalar verticalmente.
- Los eventos noScaleUp están limitados para limitar el volumen del registro producido. Cada motivo persistente solo se emite cada dos minutos.
- Todos los motivos se pueden dividir de forma arbitraria en varios eventos. Por ejemplo, no hay garantía de que todos los motivos de MIG rechazados para un solo grupo de pod aparezcan en el mismo evento.
- La lista de grupos de pods no controlados se trunca a 50 entradas arbitrarias. La cantidad real de grupos de pods no controlados se puede encontrar en el campo
unhandledPodGroupsTotalCount
.
Campos de motivos
Los siguientes campos ayudan a explicar por qué no se realizó el escalamiento vertical:
reason
: Proporciona un motivo global por el que se evita que el escalador automático del clúster escale verticalmente. Consulta la sección Motivos de nivel superior de noScaleUp para obtener más detalles.napFailureReason
: Proporciona un motivo global que impide que el escalador automático de clústeres aprovisione grupos de nodos adicionales (por ejemplo, el aprovisionamiento automático de nodos está inhabilitado). Consulta la sección Motivos de aprovisionamiento automático de nodos de nivel superior de noScaleUp para obtener más detalles.skippedMigs[].reason
: Proporciona información sobre por qué se omitió un MIG en particular. El escalador automático de clústeres omite algunos MIG para cualquier pod durante un intento de escalamiento vertical (por ejemplo, porque agregar otro nodo excedería los límites de recursos de todo el clúster). Consulta la sección Motivos de nivel de MIG de noScaleUp para obtener más detalles.unhandledPodGroups
: Contiene información sobre por qué un grupo particular de pods no programables no activa el escalamiento vertical. Los pods se agrupan por su controlador inmediato. Los pods sin un controlador están en grupos por sí mismos. Cada grupo de pods contiene un pod de ejemplo arbitrario y la cantidad de pods en el grupo, así como los siguientes motivos:napFailureReasons
: Motivos por los que el escalador automático de clústeres no puede aprovisionar un grupo de nodos nuevo para alojar este grupo de pods (por ejemplo, los pods tienen restricciones de afinidad) Consulta la sección Motivos de aprovisionamiento automático de nodos de nivel de pods para obtener más detalles.rejectedMigs[].reason
: Motivos específicos de cada MIG por los que el escalador automático de clústeres no puede aumentar el tamaño de un MIG en particular para alojar este grupo de pods (por ejemplo, el nodo del MIG es demasiado pequeño para los pods). Consulta la sección Motivos de nivel de MIG de noScaleUp para obtener más detalles.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento noScaleUp
:
{
"noDecisionStatus": {
"measureTime": "1582523362",
"noScaleUp": {
"skippedMigs": [
{
"mig": {
"name": "test-cluster-nap-n1-highmem-4-fbdca585-grp",
"nodepool": "nap-n1-highmem-4-1cywzhvf",
"zone": "us-central1-f"
},
"reason": {
"messageId": "no.scale.up.mig.skipped",
"parameters": [
"max cluster cpu limit reached"
]
}
}
],
"unhandledPodGroups": [
{
"napFailureReasons": [
{
"messageId": "no.scale.up.nap.pod.zonal.resources.exceeded",
"parameters": [
"us-central1-f"
]
}
],
"podGroup": {
"samplePod": {
"controller": {
"apiVersion": "v1",
"kind": "ReplicationController",
"name": "memory-reservation2"
},
"name": "memory-reservation2-6zg8m",
"namespace": "autoscaling-1661"
},
"totalPodCount": 1
},
"rejectedMigs": [
{
"mig": {
"name": "test-cluster-default-pool-b1808ff9-grp",
"nodepool": "default-pool",
"zone": "us-central1-f"
},
"reason": {
"messageId": "no.scale.up.mig.failing.predicate",
"parameters": [
"NodeResourcesFit",
"Insufficient memory"
]
}
}
]
}
],
"unhandledPodGroupsTotalCount": 1
}
}
}
Evento noScaleDown
Un evento noScaleDown
se emite de forma periódica cuando hay nodos bloqueados para que el escalador automático de clústeres no los borre.
- Los nodos que no se pueden quitar porque su uso es alto no se incluyen en los eventos noScaleDown.
- Los eventos noScaleDown se basan en el mejor esfuerzo, es decir, estos eventos no abarcan todos los motivos posibles por los que el escalador automático de clústeres no puede reducir la escala.
- Los eventos noScaleDown se regulan para limitar el volumen de registro producido. Cada motivo persistente solo se emitirá cada dos minutos.
- La lista de nodos se trunca a 50 entradas arbitrarias. La cantidad real de nodos se puede encontrar en el campo
nodesTotalCount
.
Campos de motivos
Los siguientes campos ayudan a explicar por qué no se redujo la escala:
reason
: Proporciona un motivo global por el que se evita que el escalador automático de clústeres reduzca la escala (por ejemplo, un período de retirada después del escalamiento reciente). Consulta la sección Motivos de nivel superior de noScaleDown para obtener más detalles.nodes[].reason
: Proporciona los motivos por nodo de por qué se evita que el escalador automático de clústeres borre un nodo en particular (por ejemplo, no hay lugar para mover los pods del nodo). Consulta la sección de motivos de nivel de nodo de noScaleDown para obtener más detalles.
Ejemplo
En el siguiente ejemplo de registro, se muestra un evento noScaleDown
:
{
"noDecisionStatus": {
"measureTime": "1582858723",
"noScaleDown": {
"nodes": [
{
"node": {
"cpuRatio": 42,
"mig": {
"name": "test-cluster-default-pool-f74c1617-grp",
"nodepool": "default-pool",
"zone": "us-central1-c"
},
"name": "test-cluster-default-pool-f74c1617-fbhk"
},
"reason": {
"messageId": "no.scale.down.node.no.place.to.move.pods"
}
}
],
"nodesTotalCount": 1,
"reason": {
"messageId": "no.scale.down.in.backoff"
}
}
}
}
Soluciona problemas de escalamiento
En esta sección, se proporciona orientación sobre cómo solucionar problemas con los eventos de escalamiento.
El clúster no escala verticalmente
Situación: Creé un pod en mi clúster, pero hace una hora que está en el estado Pendiente. El escalador automático de clústeres no aprovisionó ningún nodo nuevo para alojar el pod.
Solución:
- En el Explorador de registros, busca los detalles de registro para los eventos del escalador automático de clústeres, como se describe en la sección Visualiza eventos.
Busca eventos
scaleUp
que contengan el pod deseado en el campotriggeringPods
. Puedes filtrar las entradas de registro, incluido el filtrado por un valor de campo JSON particular. Obtén más información en Consultas avanzadas de registros.- Busca un
EventResult
que contenga el mismoeventId
que el eventoscaleUp
. - Mira el campo
errorMsg
y consulta la lista de mensajes de error de scaleUp posibles.
Ejemplo de error de scaleUp: Para un evento
scaleUp
, descubres que el error es"scale.up.error.quota.exceeded"
, lo que indica que “Un evento scaleUp falló porque algunos de los MIG no se pudieron aumentar debido a que se superó la cuota”. Para resolver el problema, revisa la configuración de tu cuota y aumenta la configuración que está a punto de superarse. El escalador automático de clústeres agrega un nodo nuevo y el pod se programa.- Busca un
De lo contrario, busca eventos
noScaleUp
y revisa los siguientes campos:unhandledPodGroups
: contiene información sobre el pod (o el controlador del pod).reason
: proporciona motivos globales que indican que el escalamiento vertical podría estar bloqueado.skippedMigs
: proporciona los motivos por los que se pueden omitir algunos MIG.
Consulta las siguientes secciones que contienen los posibles motivos de los eventos
noScaleUp
:- Motivos de nivel superior de noScaleUp
- Motivos de aprovisionamiento automático de nodos de nivel superior de noScaleUp
- Motivos de nivel de MIG de noScaleUp
- Motivos de aprovisionamiento automático de nodos de nivel de grupo de pods
Ejemplo de noScaleUp: Encontraste un evento
noScaleUp
para tu pod y todos los MIG en el camporejectedMigs
tienen el mismo ID de mensaje de motivo de"no.scale.up.mig.failing.predicate"
con dos parámetros:"NodeAffinity"
y"node(s) did not match node selector"
. Después de consultar la lista de mensajes de error, descubres que “no puedes aumentar la escala de un MIG porque se produjo un error de predicado en él”; los parámetros son el nombre del predicado con errores y la razón por la que falló. Para resolver el problema, revisas las especificaciones del pod y descubres que tiene un selector de nodos que no coincide con ningún MIG en el clúster. Borra el selector de la especificación del pod y vuelve a crear el pod. El escalador automático de clústeres agrega un nodo nuevo y el pod se programa.Si no hay eventos
noScaleUp
, usa otros métodos de depuración para resolver el problema.
La escala del clúster no se reduce
Situación: Tengo un nodo en mi clúster que usó solo el 10% de su CPU y memoria durante los últimos días. A pesar del bajo uso, el escalador automático de clústeres no borró el nodo como se esperaba.
Solución:
- En el Explorador de registros, busca los detalles de registro para los eventos del escalador automático de clústeres, como se describe en la sección Visualiza eventos.
- Busca eventos
scaleDown
que contengan el nodo deseado en el camponodesToBeRemoved
. Puedes filtrar las entradas de registro, incluido el filtrado por un valor de campo JSON particular. Obtén más información en Consultas avanzadas de registros.- En el evento
scaleDown
, busca un eventoEventResult
que contenga eleventId
asociado. - Mira el campo
errorMsg
y consulta la lista de mensajes de error de scaleDown posibles.
- En el evento
- De lo contrario, busca eventos
noScaleDown
que tengan el nodo deseado en el camponodes
. Revisa el camporeason
en busca de cualquier motivo global que indique que se puede bloquear la reducción de la escala. Consulta las siguientes secciones que contienen los posibles motivos de los eventos de
noScaleDown
:Ejemplo de noScaleDown: Encontraste un evento
noScaleDown
que contiene un motivo por nodo para tu nodo. El ID del mensaje es"no.scale.down.node.pod.has.local.storage"
y hay un solo parámetro:"test-single-pod"
. Después de consultar la lista de mensajes de error, descubres que esto significa que el “pod está bloqueando la reducción de escala porque solicita almacenamiento local”. Consultas las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes y descubres que la solución es agregar una anotación"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
al Pod. Después de aplicar la anotación, el escalador automático de clústeres reduce la escala correctamente.Si no hay eventos
noScaleDown
, usa otros métodos de depuración para resolver el problema.
Mensajes
Los eventos que emite el escalador automático de clústeres usan mensajes con parámetros para proporcionar explicaciones del evento. El campo parameters
está disponible con el campo messageId
, como en este registro de ejemplo de un evento noScaleUp.
En esta sección, se proporcionan descripciones para varios messageId
y sus parámetros correspondientes. Sin embargo, esta sección no contiene todos los mensajes posibles y se puede extender en cualquier momento.
Errores de scaleUp
Los mensajes de error para los eventos scaleUp
se encuentran en el evento eventResult
correspondiente, en el campo resultInfo.results[].errorMsg
.
Mensaje | Descripción | Mitigación |
---|---|---|
"scale.up.error.out.of.resources" |
El evento de scaleUp falló porque algunos de los MIG no se pudieron aumentar debido a la falta de recursos. Parámetros: ID de MIG con errores. |
Sigue los pasos para solucionar problemas de disponibilidad de recursos. |
"scale.up.error.quota.exceeded" |
El evento scaleUp falló porque algunos de los MIG no se pudieron aumentar debido a que se superó la cuota de Compute Engine. Parámetros: ID de MIG con errores. |
Consulta la pestaña Errores del MIG en la consola de Google Cloud para ver qué cuota se está excediendo. Sigue las instrucciones para solicitar un aumento de cuota. |
"scale.up.error.waiting.for.instances.timeout" |
El evento de scaleUp falló porque las instancias en algunos de los MIG no aparecieron a tiempo. Parámetros: ID de MIG con errores. |
Este mensaje es transitorio. Si persiste, comunícate con el equipo de Asistencia de Google Cloud para realizar una investigación más detallada. |
"scale.up.error.ip.space.exhausted" |
El evento scaleUp falló porque el clúster no tiene suficiente espacio de direcciones IP sin asignar para usar en la adición de nodos o Pods nuevos.
Parámetros: ID de MIG con errores. |
Consulta los pasos para solucionar problemas a fin de abordar la falta de espacio de direcciones IP para los nodos o Pods. |
"scale.up.error.service.account.deleted" |
El evento de scaleUp falló porque se borró una cuenta de servicio que usó el escalador automático del clúster.
Parámetros: ID de MIG con errores. |
Comunícate con el equipo de Asistencia de Google Cloud para realizar una investigación más detallada. |
Errores de scaleDown
Los mensajes de error para los eventos scaleDown
se encuentran en el evento eventResult
correspondiente, en el campo resultInfo.results[].errorMsg
.
Mensaje | Descripción | Mitigación |
---|---|---|
"scale.down.error.failed.to.mark.to.be.deleted" |
El evento scaleDown falló porque un nodo no se pudo marcar para su eliminación. Parámetros: Nombre de nodo con errores. |
Este mensaje es transitorio. Si persiste, comunícate con el equipo de Asistencia de Google Cloud para realizar una investigación más detallada. |
"scale.down.error.failed.to.evict.pods" |
El evento scaleDown falló porque algunos de los pods no se pudieron expulsar de un nodo. Parámetros: Nombre de nodo con errores. |
Revisa las prácticas recomendadas sobre los presupuestos de interrupción de Pods para asegurarte de que las reglas permitan la expulsión de las réplicas de la aplicación cuando sea aceptable. |
"scale.down.error.failed.to.delete.node.min.size.reached" |
El evento scaleDown falló porque no se pudo borrar un nodo debido a que el clúster ya tenía el tamaño mínimo. Parámetros: Nombre de nodo con errores. |
Revisa el valor mínimo establecido para el ajuste de escala automático de grupos de nodos y ajusta la configuración según sea necesario. |
Motivos de un evento noScaleUp
Motivos de nivel superior de noScaleUp
Los mensajes de motivo de nivel superior para los eventos noScaleUp
aparecen en el campo noDecisionStatus.noScaleUp.reason
. El mensaje contiene un motivo de nivel superior que explica por qué el escalador automático de clústeres no puede escalar verticalmente el clúster.
Mensaje | Descripción | Mitigación | |
---|---|---|---|
"no.scale.up.in.backoff" |
Se produjo un noScaleUp porque el escalamiento vertical está en un período de retirada (bloqueado temporalmente). Este es un mensaje transitorio que puede ocurrir durante eventos de escalamiento vertical con una gran cantidad de Pods. | Si este mensaje persiste, comunícate con el equipo de Asistencia de Google Cloud para realizar una investigación detallada. |
Motivos de aprovisionamiento automático de nodos de nivel superior de noScaleUp
Los mensajes de motivo de aprovisionamiento automático de nodos de nivel superior para eventos noScaleUp
aparecen en el campo noDecisionStatus.noScaleUp.napFailureReason
. El mensaje contiene un motivo de nivel superior que explica por qué el escalador automático de clústeres no puede aprovisionar nuevos grupos de nodos.
Mensaje | Descripción | Mitigación |
---|---|---|
"no.scale.up.nap.disabled" |
El aprovisionamiento automático de nodos no está habilitado a nivel del clúster. Si se inhabilita el aprovisionamiento automático de nodos, los nodos nuevos no se aprovisionarán de forma automática si el Pod pendiente tiene requisitos que ningún grupo de nodos existente puede satisfacer. | Revisa la configuración del clúster y consulta Habilita el aprovisionamiento automático de nodos. |
Motivos de nivel de MIG de noScaleUp
Los mensajes de motivo de nivel MIG para los eventos noScaleUp
aparecen en los campos noDecisionStatus.noScaleUp.skippedMigs[].reason
y noDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason
.
El mensaje contiene un motivo por el que el escalador automático de clústeres no puede aumentar el tamaño de un MIG en particular.
Mensaje | Descripción | Mitigación |
---|---|---|
"no.scale.up.mig.skipped" |
No se puede escalar verticalmente un MIG porque se omitió durante la simulación. Parámetros: motivos legibles por los que se omitió (por ejemplo, falta un requisito de Pod). |
Revisa los parámetros incluidos en el mensaje de error y aborda por qué se omitió el MIG. |
"no.scale.up.mig.failing.predicate" |
No se puede escalar verticalmente un MIG porque no cumple con los requisitos de predicado para los Pods pendientes.
Parámetros: El nombre del predicado que falló, motivos legibles por los que falló. |
Revisa los requisitos del Pod, como las reglas de afinidad, los taints o las tolerancias, y los requisitos de los recursos. |
Motivos de aprovisionamiento automático de nodos de nivel de grupo de pods
Los mensajes de motivo de aprovisionamiento automático de nodos de nivel de grupo para los eventos noScaleUp
aparecen en el campo noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[]
. El mensaje contiene un motivo por el que el escalador automático de clústeres no puede aprovisionar un grupo de nodos nuevo para alojar un grupo de pods en particular.
Mensaje | Descripción | Mitigación |
---|---|---|
"no.scale.up.nap.pod.gpu.no.limit.defined" |
El aprovisionamiento automático de nodos no pudo aprovisionar ningún grupo de nodos porque un Pod pendiente tiene una solicitud de GPU, pero los límites de recursos de GPU no se definen a nivel de clúster.
Parámetros: Tipo de GPU solicitado |
Revisa la solicitud de GPU del Pod pendiente y actualiza la configuración para los límites de GPU del aprovisionamiento automático de nodos a nivel de clúster. |
"no.scale.up.nap.pod.gpu.type.not.supported" |
El aprovisionamiento automático de nodos no aprovisionó ningún grupo de nodos para el Pod porque tiene solicitudes de un tipo de GPU desconocido.
Parámetros: Tipo de GPU solicitado |
Verifica la configuración del Pod pendiente para el tipo de GPU a fin de asegurarte de que coincida con un tipo de GPU compatible. |
"no.scale.up.nap.pod.zonal.resources.exceeded" |
El aprovisionamiento automático de nodos no aprovisionó ningún grupo de nodos para el Pod en esta zona porque hacerlo infringiría los límites de recursos máximos en todo el clúster, excedería los recursos disponibles en la zona o no existiría ningún tipo de máquina que pueda ajustarse a la solicitud.
Parámetros: Nombre de la zona en cuestión. |
Revisa y actualiza los límites de recursos máximos en todo el clúster, las solicitudes de recursos de Pods o las zonas disponibles para el aprovisionamiento automático de nodos. |
"no.scale.up.nap.pod.zonal.failing.predicates" |
El aprovisionamiento automático de nodos no aprovisionó ningún grupo de nodos para el pod en esta zona debido a errores en los predicados. Parámetros: Nombre de la zona en cuestión, motivos legibles |
Revisa los requisitos del Pod pendiente, como las reglas de afinidad, los taints, las tolerancias o los requisitos de los recursos. |
Motivos de un evento noScaleDown
Motivos de nivel superior de noScaleDown
Los mensajes de motivo de nivel superior para los eventos noScaleDown
aparecen en el campo noDecisionStatus.noScaleDown.reason
. El mensaje contiene un motivo de nivel superior por el que el escalador automático de clústeres no puede reducir la escala del clúster.
Mensaje | Descripción | Mitigación |
---|---|---|
"no.scale.down.in.backoff" |
Se produjo un evento noScaleDown porque la reducción de la escala se encuentra en un período de retirada (bloqueado temporalmente). Este evento debe ser transitorio y puede ocurrir cuando se produjo un evento de escalamiento vertical reciente. | Sigue los pasos de mitigación asociados con los motivos de nivel inferior para no reducir la escala verticalmente. Cuando se resuelvan los motivos subyacentes, el escalador automático del clúster saldrá de la retirada. Si el mensaje persiste después de abordar los motivos subyacentes, comunícate con el equipo de Asistencia de Google Cloud para realizar una investigación más detallada. |
"no.scale.down.in.progress" |
Se produjo un evento noScaleDown porque se bloquea la reducción de escala verticalmente hasta que se borre el nodo anterior programado para su eliminación. | Este evento debe ser transitorio, ya que el Pod se quitará de manera forzada. Si este mensaje aparece con frecuencia, puedes revisar el valor gracefulTerminationPeriod para la reducción de escala verticalmente de bloqueo de los Pods. Si quieres acelerar la resolución, también puedes forzar la eliminación del Pod si ya no es necesario. |
Motivos de nivel de nodo de noScaleDown
Los mensajes de motivo de nivel de nodo para los eventos noScaleDown
aparecen en el campo noDecisionStatus.noScaleDown.nodes[].reason
. El mensaje contiene un motivo por el que el escalador automático de clústeres no puede quitar un nodo en particular.
Mensaje | Descripción | Mitigación |
---|---|---|
"no.scale.down.node.scale.down.disabled.annotation" |
No se puede quitar el nodo porque tiene una anotación scale-down-disabled . |
Revisa la anotación que impide reducir la escala verticalmente según las instrucciones de las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes. |
"no.scale.down.node.node.group.min.size.reached" |
No se puede quitar el nodo porque su grupo de nodos ya tiene el tamaño mínimo. | Revisa y ajusta el valor mínimo configurado para el ajuste de escala automático del grupo de nodos. |
"no.scale.down.node.minimal.resource.limits.exceeded" |
Se bloquea la reducción de escala vertical de un nodo con poco uso porque infringiría los límites de recursos mínimos en todo el clúster establecidos para el aprovisionamiento automático de nodos. | Revisa los límites de recursos mínimos en todo el clúster. |
"no.scale.down.node.no.place.to.move.pods" |
Se bloquea la reducción de escala vertical de un nodo con poco uso porque ejecuta un Pod que no se puede mover a otro nodo del clúster. | Si esperas que el Pod se reprograme, revisa los requisitos de programación de los Pods en el nodo con poco uso para determinar si se pueden mover a otro nodo del clúster. Se prevé este mensaje si no esperas que el Pod se reprograme, ya que no hay otros nodos en los que podría programarse. |
"no.scale.down.node.pod.not.backed.by.controller" |
El Pod está bloqueando la reducción de escala vertical de un nodo con poco uso porque el Pod no tiene un controlador conocido por el escalador automático de clúster de Kubernetes (ReplicationController, DaemonSet, Job, StatefulSet o ReplicaSet). Obtén más información en las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes acerca de qué tipos de Pods pueden impedir que el escalador automático del clúster quite un nodo.
Parámetros: Nombre del pod que causa el bloqueo. |
Configura una anotación "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" para el Pod o define un controlador (ReplicationController, DaemonSet, Job, StatefulSet o ReplicaSet). |
"no.scale.down.node.pod.has.local.storage" |
El pod está bloqueando la reducción de escala porque solicita almacenamiento local. Obtén más información en las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes acerca de qué tipos de Pods pueden impedir que el escalador automático del clúster quite un nodo.
Parámetros: Nombre del pod que causa el bloqueo. |
Establece una anotación "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" para el Pod si los datos en el almacenamiento local del Pod no son críticos. |
"no.scale.down.node.pod.not.safe.to.evict.annotation" |
El pod está bloqueando la reducción de escala porque tiene una anotación de “la expulsión no es segura”. Consulta las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes para obtener más detalles.
Parámetros: Nombre del pod que causa el bloqueo. |
Si el Pod puede expulsarse de forma segura, actualiza la anotación a "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" . |
"no.scale.down.node.pod.kube.system.unmovable" |
El Pod está bloqueando la reducción de escala vertical porque es un Pod sin DaemonSet, duplicados y sin un PodDisruptionBudget en el espacio de nombres kube-system .
Parámetros: Nombre del pod que causa el bloqueo. |
Sigue las instrucciones en las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes a fin de configurar un PodDisruptionBudget para permitir que el escalador automático del clúster mueva los Pods en el espacio de nombres kube-system . |
"no.scale.down.node.pod.not.enough.pdb" |
El Pod está bloqueando la reducción de escala vertical porque no tiene suficiente PodDisruptionBudget .
Consulta las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes para obtener más detalles.
Parámetros: Nombre del pod que causa el bloqueo. |
Revisa el PodDisruptionBudget del Pod. Consulta las prácticas recomendadas para PodDisruptionBudget . Es posible que puedas resolver el mensaje; para ello, escala la aplicación o cambia PodDisruptionBudget para permitir que haya más Pods no disponibles. |
"no.scale.down.node.pod.controller.not.found" |
El Pod está bloqueando la reducción de escala vertical porque no se puede encontrar su controlador (p. ej., Deployment o ReplicaSet). | Revisa los registros para determinar qué acciones se llevaron a cabo y que dejaron a un Pod en ejecución después de quitar su controlador. Para resolver este problema, puedes borrar el Pod de forma manual. |
"no.scale.down.node.pod.unexpected.error" |
Se bloqueó la reducción de escala vertical de un nodo con poco uso porque tiene un Pod con un estado de error inesperado. | Comunícate con el equipo de Asistencia de GCP para realizar una investigación más detallada. |
¿Qué sigue?
- Obtén más información sobre el escalador automático de clústeres.
- Obtén más información sobre cómo usar el aprovisionamiento automático de nodos
- Obtén información para solucionar problemas y resolver problemas de escalamiento.