Consulta eventos del escalador automático de clústeres


En esta página, se proporciona información sobre los eventos de visibilidad que emite el escalador automático de clústeres en Google Kubernetes Engine (GKE). Analizando estos eventos, puedes obtener información sobre cómo el escalador automático de clústeres administra su escalamiento y comprender los motivos detrás de sus decisiones.

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 de Kubernetes que produce el escalador automático de clústeres.

Requisitos

Para ver los eventos del escalador automático, debes habilitar Cloud Logging en el clúster. Si Logging está inhabilitado, los eventos no se producirán.

Visualiza eventos

Los eventos de visibilidad para el escalador automático de clústeres se almacenan en un registro de Cloud Logging, dentro del mismo proyecto en el que se encuentra el clúster de GKE. También puedes ver estos eventos en las notificaciones de la página de Google Kubernetes Engine en la consola de Trusted Cloud .

Visualiza registros de eventos de visibilidad

Para ver los registros, sigue los pasos que se indican a continuación:

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

    Acceder a los clústeres de Kubernetes

  2. Selecciona el nombre del 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. De manera opcional, para aplicar filtros más avanzados con el objetivo de acotar los resultados, haz clic en el botón de la flecha ubicado en el lado derecho de la página para ver los registros en el Explorador de registros.

Visualiza notificaciones de eventos de visibilidad

Para ver notificaciones de eventos de visibilidad en la página de Google Kubernetes Engine, sigue los pasos que se indican a continuación:

  1. Accede a la página de Google Kubernetes Engine en la consola de Trusted Cloud .

    Acceder a Google Kubernetes Engine

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

  3. Haz clic en la notificación para obtener información detallada, acciones recomendadas y poder acceder 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 convencional y el tamaño objetivo de todos los grupos de nodos con escalado automático, como los 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 de clústeres reduce la escala del clúster.
eventResult Ocurre cuando un evento scaleUp o scaleDown se completa con éxito o tiene errores.
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 ScaleUp

Se emite un evento scaleUp cuando el escalador automático de clústeres escala verticalmente el clúster. El escalador automático aumenta el tamaño de los grupos de nodos del clúster escalando verticalmente 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 del escalador automático de clústeres de Kubernetes.

El evento contiene información sobre qué MIG se escalaron verticalmente, a través de 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 del escalador automático de clústeres de Kubernetes.

Los campos cpuRatio y memRatio describen el uso de CPU y memoria del nodo, expresado en 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 la escala verticalmente de 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: es el nombre del clúster.

  • COMPUTE_REGION: es 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 cargas de trabajo en ejecución (en general, solo los Pods del 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: es el ID de tu proyecto.

  • CLUSTER_NAME: es el nombre del clúster.

  • COMPUTE_REGION: es la región de Compute Engine del clúster, como us-central1.

Evento 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 ScaleUp y Errores 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 de clústeres con aprovisionamiento automático de nodos habilitado crea un grupo de nodos nuevo. Este evento contiene el nombre del grupo de nodos creado y una lista de sus MIG subyacentes. Si el grupo de nodos se creó debido a un evento scaleUp, el eventId correspondiente del evento scaleUp 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 habilitado 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 no abarcan todos los motivos posibles por los que el escalador automático de clústeres no puede escalar verticalmente.
  • Los eventos noScaleUp se regulan para restringir el volumen de registros producidos. 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 sirven para explicar por qué no se llevó a cabo el escalamiento vertical:

  • reason: proporciona un motivo global por el que se evita que el escalador automático de clústeres 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, si 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 del grupo, así como los siguientes motivos:
    • napFailureReasons: son los 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 a nivel de Pods de NoScaleUp para obtener más detalles.
    • rejectedMigs[].reason: son los 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, si 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 no abarcan todos los motivos posibles por los que el escalador automático de clústeres no puede reducir la escala verticalmente.
  • Los eventos noScaleDown se regulan para limitar el volumen de registros producidos. 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 sirven para explicar por qué no se redujo la escala verticalmente:

  • reason: proporciona un motivo global por el que se evita que el escalador automático de clústeres reduzca la escala verticalmente (por ejemplo, un período de retirada después del escalamiento vertical reciente). Consulta la sección Motivos de nivel superior de noScaleDown para obtener más detalles.
  • nodes[].reason: proporciona los motivos específicos de cada nodo que explican 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"
      }
    }
  }
}

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 scaleUp

Puedes encontrar mensajes de error para los eventos scaleUp en el evento eventResult correspondiente, dentro del campo resultInfo.results[].errorMsg.

Cuando una operación de escalamiento vertical falla porque supera una cuota, se produce un error de creación de nodos que activa un período de retirada del sistema, el cual puede durar hasta 30 minutos. Para obtener más información, consulta Períodos de retirada.

Mensaje Detalles Parámetros Mitigación
"scale.up.error.out.of.resources" Los errores de recursos se producen cuando intentas solicitar recursos nuevos en una zona que no puede alojar la solicitud debido a la falta de disponibilidad actual de un recurso de Compute Engine, como las GPU o CPU. Son los IDs de MIG con errores. Sigue los pasos para solucionar problemas relacionados con la disponibilidad de recursos en la documentación de Compute Engine.
"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. Son los IDs de MIG con errores. Consulta la pestaña Errores del MIG en la consola de Trusted Cloud para ver qué cuota se está excediendo. Una vez que sepas qué cuota se está excediendo, sigue las instrucciones para solicitar un aumento de cuota.
"scale.up.error.waiting.for.instances.timeout" No se pudo escalar verticalmente el grupo de instancias administrado debido a que se agotó el tiempo de espera. Son los IDs de MIG con errores. Este mensaje debe ser momentáneo.
"scale.up.error.ip.space.exhausted" No se puede escalar verticalmente porque las instancias de algunos de los grupos de instancias administrados se quedaron sin IP. Esto significa que el clúster no tiene suficiente espacio de direcciones IP sin asignar para agregar nodos o Pods nuevos. Son los IDs de MIG con errores. Sigue los pasos para solucionar problemas incluidos en No hay suficiente espacio de direcciones IP libre para los Pods.
"scale.up.error.service.account.deleted" No se puede escalar verticalmente porque se borró la cuenta de servicio. Son los IDs de MIG con errores. Intenta recuperar la cuenta de servicio.

Motivos de un 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 verticalmente el clúster para alojar los Pods. Los eventos noScaleUp se basan en el mejor esfuerzo y no abarcan todos los casos posibles.

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 Detalles Mitigación
"no.scale.up.in.backoff" No se escaló verticalmente porque este proceso está en un período de retirada (se bloqueó de manera temporal). Este mensaje puede aparecer durante eventos de escalamiento vertical con una gran cantidad de Pods. Este mensaje debe ser momentáneo. Verifica este error después de unos minutos.

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 Detalles Mitigación
"no.scale.up.nap.disabled"

El aprovisionamiento automático de nodos no pudo escalarse verticalmente porque este proceso no está habilitado a nivel del clúster.

Si el aprovisionamiento automático de nodos está inhabilitado, 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 a nivel de MIG de noScaleUp

Los mensajes de motivos a nivel de 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 Detalles Parámetros Mitigación
"no.scale.up.mig.skipped" No se puede escalar verticalmente un MIG porque se omitió durante la simulación. Son los motivos por los que se omitió el MIG (por ejemplo, falta un requisito de Pod). Revisa los parámetros incluidos en el mensaje de error y aborda el motivo por el que se omitió el MIG.
"no.scale.up.mig.failing.predicate" No se puede escalar verticalmente un grupo de nodos debido a un predicado de programación con errores para los Pods pendientes. Es el nombre del predicado con errores y los motivos 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 a nivel de grupo de Pods de noScaleUp

Los mensajes de motivos de aprovisionamiento automático de nodos a nivel de grupo de Pods 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 programar un grupo de Pods en particular.

Mensaje Detalles Parámetros 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 del clúster. Es el 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 del 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. Es el tipo de GPU solicitado. Verifica la configuración del Pod pendiente para el tipo de GPU y 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. Es el 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. Es el nombre de la zona en cuestión y los motivos por los que fallaron los predicados. Revisa los requisitos del Pod pendiente, como las reglas de afinidad, los taints, las tolerancias o los requisitos de los recursos.

Errores scaleDown

Puedes encontrar mensajes de eventos de error para los eventos scaleDown en el evento eventResult correspondiente, dentro del campo resultInfo.results[].errorMsg.

Mensaje del evento Detalles Parámetro Mitigación
"scale.down.error.failed.to.mark.to.be.deleted" No se pudo marcar un nodo para su eliminación. Es el nombre del nodo con errores. Este mensaje debe ser momentáneo.
"scale.down.error.failed.to.evict.pods" El escalador automático de clústeres no puede reducir la escala verticalmente porque algunos de los Pods no se pudieron expulsar de un nodo. Es el nombre del nodo con errores. Revisa el PodDisruptionBudget del Pod y asegúrate de que las reglas permitan expulsar las réplicas de la aplicación cuando sea aceptable. Para obtener más información, consulta Especifica un presupuesto de interrupción para tu aplicación en la documentación de Kubernetes.
"scale.down.error.failed.to.delete.node.min.size.reached" El escalador automático de clústeres no puede reducir la escala verticalmente porque no se pudo borrar un nodo debido a que el clúster ya tenía el tamaño mínimo. Es el nombre del nodo con errores. Revisa el valor mínimo establecido para el escalado automático de grupos de nodos y ajusta la configuración según sea necesario. Para obtener más información, consulta el artículo Error: Los nodos del clúster alcanzaron el tamaño mínimo.

Motivos de un 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 eventos noScaleDown se basan en el mejor esfuerzo y no abarcan todos los casos posibles.

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 verticalmente la escala del clúster.

Mensaje del evento Detalles Mitigación
"no.scale.down.in.backoff" El escalador automático de clústeres no puede reducir la escala verticalmente porque el proceso se encuentra en un período de retirada (se bloqueó de manera temporal).

Este mensaje debería ser temporal y puede aparecer si se produjo un evento de escalamiento vertical reciente.

"no.scale.down.in.progress"

El escalador automático de clústeres no puede reducir verticalmente la escala porque una reducción anterior todavía estaba en curso.

Este mensaje debería ser temporal, ya que el Pod se terminará quitando. Si este mensaje aparece con frecuencia, revisa el período de gracia de finalización de los Pods que bloquean la reducción vertical de la escala. Para acelerar la resolución, también puedes borrar el Pod si ya no es necesario.

Motivos a nivel de nodo de noScaleDown

Los mensajes de motivos a nivel de nodo para los eventos noScaleDown aparecen en el campo noDecisionStatus.noScaleDown.nodes[].reason field. El mensaje contiene un motivo por el que el escalador automático de clústeres no puede quitar un nodo en particular.

Mensaje del evento Detalles Parámetros Mitigación
"no.scale.down.node.scale.down.disabled.annotation" El escalador automático de clústeres no puede quitar un nodo del grupo de nodos porque está anotado con cluster-autoscaler.kubernetes.io/scale-down-disabled: true. N/A El escalador automático de clústeres omite los nodos con esta anotación sin considerar su uso, y este mensaje se registra independientemente del factor de uso del nodo. Si quieres que el escalador automático de clústeres reduzca verticalmente la escala de estos nodos, quita la anotación.
"no.scale.down.node.node.group.min.size.reached"

El escalador automático de clústeres no puede reducir verticalmente la escala si el tamaño del grupo de nodos supera el límite de tamaño mínimo.

Esto sucede porque quitar los nodos infringiría los límites de recursos mínimos de todo el clúster definidos en la configuración del aprovisionamiento automático de nodos.

N/A Revisa el valor mínimo establecido para el escalado automático del grupo de nodos. Si quieres que el escalador automático de clústeres reduzca verticalmente la escala de este nodo, ajusta el valor mínimo.
"no.scale.down.node.minimal.resource.limits.exceeded"

El escalador automático de clústeres no puede reducir verticalmente la escala de los nodos porque infringiría los límites mínimos de recursos en todo el clúster.

Estos son los límites de recursos establecidos para el aprovisionamiento automático de nodos.

N/A Revisa los límites de memoria y CPU virtual y, si quieres que el escalador automático de clústeres reduzca verticalmente la escala de este nodo, reduce los límites.
"no.scale.down.node.no.place.to.move.pods" El escalador automático de clústeres no puede reducir verticalmente la escala porque no hay lugar adonde mover los Pods. N/A 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. Para obtener más información, consulta Error: No hay adonde mover los Pods.
"no.scale.down.node.pod.not.backed.by.controller"

El Pod bloquea la reducción vertical de la escala porque no está respaldado por un controlador.

Específicamente, el escalador automático de clústeres no puede reducir verticalmente la escala de un nodo con poco uso debido a que un Pod no tiene un controlador reconocido. Los controladores permitidos incluyen ReplicationController, DaemonSet, Job, StatefulSet o ReplicaSet.

Es el nombre del Pod que causa el bloqueo. Configura la anotación "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" para el Pod o define un controlador aceptable.
"no.scale.down.node.pod.not.safe.to.evict.annotation" Un Pod en el nodo tiene la anotación safe-to-evict=false. Es el nombre del Pod que causa el bloqueo. Si el Pod puede expulsarse de forma segura, edita el manifiesto del Pod y 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 vertical de la escala porque es un Pod sin DaemonSet, sin duplicados y sin un PodDisruptionBudget en el espacio de nombres kube-system. Es el nombre del Pod que causa el bloqueo.

En las versiones de GKE anteriores a la 1.32.4-gke.1236000, el escalador automático de clústeres no quita los Pods del espacio de nombres kube-system. A partir de la versión 1.32.4-gke.1236000, el escalador automático de clústeres considera quitar estos Pods después de que se hayan creado durante una hora.

Para resolver este problema, agrega un PodDisruptionBudget para los Pods kube-system o usa una combinación de taints y tolerancias de grupos de nodos para separar los Pods kube-system de los de tu aplicación. Para obtener más información, consulta Error: kube-system Pod unmoveable.

"no.scale.down.node.pod.not.enough.pdb" El Pod está bloqueando la reducción vertical de la escala porque no tiene suficiente PodDisruptionBudget. Es el nombre del Pod que causa el bloqueo. Revisa el PodDisruptionBudget del Pod y considera volverlo menos restrictivo. Para obtener más información, consulta Error: No hay suficiente PodDisruptionBudget.
"no.scale.down.node.pod.controller.not.found" El Pod está bloqueando la reducción vertical de la escala porque no se puede encontrar su controlador (por ejemplo, un Deployment o ReplicaSet). N/A Para determinar qué acciones se llevaron a cabo y dejaron el Pod en ejecución después de quitar su controlador, revisa los registros. Para resolver este problema, borra el Pod de forma manual.
"no.scale.down.node.pod.unexpected.error" El Pod está bloqueando la reducción vertical de la escala debido a un error inesperado. N/A Se desconoce la causa raíz de este error.

¿Qué sigue?