Ver eventos del escalador automático de clústeres


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:

  1. En la consola de Google Cloud, ve a la página de clústeres de Kubernetes.

    Ir a Clústeres de Kubernetes

  2. Selecciona el nombre de tu clúster para ver la página Detalles del clúster.

  3. En la página Detalles del clúster, haz clic en la pestaña Registros.

  4. En la pestaña Registros, haz clic en la pestaña Registros del escalador automático para ver los registros.

  5. 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:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:

    Ir a Google Kubernetes Engine

  2. Revisa la columna Notificaciones para los clústeres específicos a fin de encontrar notificaciones relacionadas con el escalamiento.

  3. 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úster

  • COMPUTE_REGION: la región de Compute Engine del clúster, como us-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 proyecto

  • CLUSTER_NAME: el nombre del clúster

  • COMPUTE_REGION: la región de Compute Engine del clúster, como us-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:

  1. 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.
  2. Busca eventos scaleUp que contengan el pod deseado en el campo triggeringPods. 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.

    1. Busca un EventResult que contenga el mismo eventId que el evento scaleUp.
    2. 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.

  3. 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.
  4. Consulta las siguientes secciones que contienen los posibles motivos de los eventos noScaleUp:

    Ejemplo de noScaleUp: Encontraste un evento noScaleUp para tu pod y todos los MIG en el campo rejectedMigs 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.

  5. 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:

  1. 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.
  2. Busca eventos scaleDown que contengan el nodo deseado en el campo nodesToBeRemoved. 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.
    1. En el evento scaleDown, busca un evento EventResult que contenga el eventId asociado.
    2. Mira el campo errorMsg y consulta la lista de mensajes de error de scaleDown posibles.
  3. De lo contrario, busca eventos noScaleDown que tengan el nodo deseado en el campo nodes. Revisa el campo reason en busca de cualquier motivo global que indique que se puede bloquear la reducción de la escala.
  4. 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.

  5. 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?