El desequilibrio del clúster sobrecarga los nodos de trabajador

Un desequilibrio de la asignación de recursos en el clúster puede provocar que nodos de trabajador individuales únicos se vean sobrecargados.

Síntomas

Se producen los siguientes síntomas, que pueden afectar a los Watson Studioservicios, IBM® Knowledge CatalogAnalytics Engine powered by Apache Spark , y :

  • Los clústeres son inestables.
  • Los recursos de nodo de trabajador individuales están sobrecargados debido a demasiados pods.
  • Las herramientas que consumen un número de recursos superior al valor mínimo, tales como los editores de cuadernos Jupyter, no se pueden ejecutar o el inicio del kernel es lento.

Causas

Hay demasiados pods asignados al mismo nodo de trabajador. Cuando se inicia uno de los servicios utilizando un número de recursos superior al valor mínimo, el nodo de trabajador intenta ejecutar un número de CPU superior al que tiene.

Diagnóstico del problema

Compruebe los recursos del clúster

  1. Comprueba el consumo de recursos en todos los nodos utilizando el siguiente comando: oc adm top nodes

    Determine si hay restricciones en el consumo de recursos en la CPU y la memoria.

  2. Compruebe la reserva de recursos en todos los nodos utilizando el siguiente comando: oc describe node nodeName

    Bajo Recursos asignados, verá Solicitar y limitar CPU y memoria. Determinar si las reservas de recursos de CPU y de memoria están restringidas.

    Nota: Los nodos de trabajador no están disponibles para su planificación los recursos de solicitudes alcanzan el 100%. Se permite la sobresuscripción, cuando los límites superan el 100%.

Compruebe el estado de los nodos del clúster

Comprueba los eventos en todos los nodos utilizando el siguiente comando: oc describe node nodeName

En la parte inferior de la salida, bajo Sucesos, verá las actividades relacionadas con el nodo.

Compruebe los pods cuyo estado sea Finalizando

Finalice los pods que están reteniendo recursos utilizando el mandato siguiente:

oc get pod --all-namespaces -o wide | grep -i terminating | grep -i -v cleanup

Si ve un gran número de pods cuyo estado es Finalizando y Error, estarán reteniendo recursos de CPU y memoria reservados, incluso si estos recursos no se están utilizando.

Resolución del problema

Identifique los pods saturados y vuelva a planificarlos para otros nodos

Utilice los procedimientos siguientes para identificar los pods saturados y para volver a planificar los pods en otros nodos. Estos procedimientos son la solución alternativa que resuelve un único nodo que está limitado por demasiados pods, por ejemplo, IBM Knowledge Catalog pods.

Identifique los pods saturados realizando estos pasos:

  1. Ejecute oc describe node nodeName para ver la lista completa de los pods del nodo y la reserva de recursos y los límites.
  2. En las listas de pods de la salida de nodo de descripción, identifique los pods que solicitan una gran cantidad de recursos de CPU o memoria.

Vuelva a planificar los pods en los otros nodos realizando estos pasos:

  1. Marque el nodo como no planificable utilizando el mandato siguiente:
    oc adm cordon nodename
  2. Comprueba que el nodo no se puede programar utilizando el siguiente comando: oc get nodes
  3. Visualice el nodo en estado "SchedulingDisabled".
  4. Suprima los pods y reinicie los pods utilizando el mandato siguiente:
    oc delete pod podname -n ${PROJECT_CPD_INST_OPERANDS}
  5. Vuelva a marcar el nodo como planificable utilizando el mandato siguiente:
    oc adm uncordon nodename
  6. Confirme que el nodo ha vuelto al estado «Listo» utilizando el siguiente comando: oc get nodes

Limpieza de los pods en estado de finalización

Utilice los pasos siguientes como una solución alternativa para resolver las situaciones en las que demasiados pods que están finalizando consumen recursos.

  1. Utilice el mandato siguiente para obtener la lista de pods que están en estado de finalización:
    oc get pod --all-namespaces -o wide |grep -i terminating | grep -i -v cleanup
  2. Utilice el mandato siguiente para limpiar los pods:
    oc get pod --all-namespaces -o wide |grep -i terminating | grep -i -v cleanup | awk -F' ' '{print $2}' | xargs oc delete pod -n ${PROJECT_CPD_INST_OPERANDS} --grace-period=0 --force