Cómo mantener mi vaina funcionando (no poner fin/restaurante) en EKS

Estoy tratando de utilizar AWS EKS (fargate) para ejecutar caso de automatización, pero algunas cápsulas (9 de 10 veces en funcionamiento) se terminan, hace falla de automatización.

Tengo un montón de casos de automatización escritos en robotframework, el caso en sí mismo está funcionando bien, pero es tiempo-consumo, generalmente necesita 6 horas para una ronda. Así que, creo que puedo usar K8S para ejecutar los casos en paralelo, por lo tanto ahorrar tiempo, uso Jenkins para confiar cuántas 'automaciones' funcionan en el paralelo, y después de todo hecho, fusionar y presentar el resultado de la prueba.

Pero algunas cápsulas aften se terminan,

comando "kubectl get pod", devuelva algo como esto (establezco la "restartPolicy: Never" para mantener la cápsula de error para 'describe' su información, de lo contrario, la cápsula acaba de desaparecer)

box6           0/1     Error     0          9m39s

comando "kubectl describir pod box6" obtener la salida como sigue (masked cierta información privada).

Name:                 box6
Namespace:            default
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 XXXXXXXX
Start Time:           Mon, 21 Dec 2020 15:29:37 +0800
Labels:               eks.amazonaws.com/fargate-profile=eksautomation-profile
                      name=box6
                      purpose=demonstrate-command
Annotations:          CapacityProvisioned: 0.25vCPU 0.5GB
                      Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND
                      kubectl.kubernetes.io/last-applied-configuration:
                        {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"name":"box6","purpose":"demonstrate-command"},"name":"box6","names...
                      kubernetes.io/psp: eks.privileged
Status:               Failed
IP:                   192.168.183.226
IPs:
  IP:  192.168.183.226
Containers:
  box6:
    Container ID:  XXXXXXXX
    Image:         XXXXXXXX
    Image ID:      XXXXXXXX
    Port:          
    Host Port:     
    Command:
      /bin/initMock.sh
    State:          Terminated
      Reason:       Error
      Exit Code:    143
      Started:      Mon, 21 Dec 2020 15:32:12 +0800
      Finished:     Mon, 21 Dec 2020 15:34:09 +0800
    Ready:          False
    Restart Count:  0
    Environment:    
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-tsk7j (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-tsk7j:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-tsk7j
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason           Age        From                                                            Message
  ----     ------           ----       ----                                                            -------
  Warning  LoggingDisabled    fargate-scheduler                                               Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found
  Normal   Scheduled          fargate-scheduler                                               Successfully assigned default/box6 to XXXXXXXX
  Normal   Pulling          5m7s       kubelet, XXXXXXXX  Pulling image "XXXXXXXX"
  Normal   Pulled           2m38s      kubelet, XXXXXXXX  Successfully pulled image "XXXXXXXX"
  Normal   Created          2m38s      kubelet, XXXXXXXX  Created container box6
  Normal   Started          2m37s      kubelet, XXXXXXXX  Started container box6

Hice alguna búsqueda sobre el error, código de error 143 es 128+ SIGTERM, dudo que la cápsula sea asesinada intencionalmente por EKS.

No puedo confiar la vaina para que se reinicie, porque si es así, el caso de automatización no puede reanudarse, por lo tanto hace que el esfuerzo sea inútil (no capaz de ahorrar tiempo de funcionamiento de la automatización).

He intentado habilitar el reloj de nube, esperando tener una pista sobre por qué la cápsula se termina, pero ninguna pista.

¿Por qué mi vaina fue terminada por EKS? ¿Cómo debo solucionarlo? ¿Cómo debería evitarlo?

Gracias por tu ayuda.

Pregunta hecha hace 3 años, 5 meses, 1 días - Por binarybuilder


2 Respuestas:

  • El problema que estás experimentando con tus pods en EKS parece estar relacionado con un error de código 143, que es un SIGTERM. Esto puede ocurrir si el contenedor no maneja correctamente la señal de terminación o si se está terminando por alguna razón. Aquí hay algunas sugerencias para ayudarte a resolver este problema:

    • Revisa el código del contenedor: Asegúrate de que el contenedor está configurado para manejar correctamente la señal de terminación SIGTERM. Si el contenedor no maneja esta señal adecuadamente, podría resultar en que sea terminado abruptamente.
    • Revisa los logs del contenedor: Examina los logs de tu contenedor para ver si hay algún mensaje de error o pista que pueda indicar por qué está siendo terminado. Esto te dará más información sobre la causa raíz del problema.
    • Revisa la configuración de recursos: Asegúrate de que tu pod tiene asignados los recursos adecuados (CPU, memoria, etc.) para que pueda ejecutarse correctamente sin ser terminado por falta de recursos.
    • Revisa las políticas de reinicio: Verifica si hay alguna política de reinicio configurada que esté causando que el pod sea reiniciado de manera involuntaria. Puedes ajustar estas políticas según sea necesario.
    • Monitorea eventos: Utiliza herramientas de monitoreo para rastrear eventos en tus pods y nodos de Kubernetes. Esto te ayudará a identificar cualquier problema o patrón que pueda estar causando las terminaciones inesperadas.

    Espero que estas sugerencias te ayuden a identificar y solucionar el problema con tus pods en EKS. ¡Buena suerte!

    Respondida el Dec 22, 2020 a las 07:59 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Causas posibles de terminación de la cápsula:

    Límite de recursos excedido: Las cápsulas pueden terminar si exceden los límites de recursos asignados (CPU, memoria, etc.). Error del contenedor: El contenedor dentro de la cápsula puede fallar debido a errores de código, problemas de dependencia o problemas de configuración. Terminación intencional: EKS puede terminar las cápsulas por varias razones, como la limpieza de nodos o la escala hacia abajo.

    Resolución de problemas y prevención:

    1. Verificar los límites de recursos:

    Ejecuta kubectl describe pod <pod-name> para ver los límites de recursos asignados. Ajusta los límites según sea necesario para evitar excederlos.

    2. Depurar errores del contenedor:

    Examina los registros del contenedor con kubectl logs <pod-name>. Intenta reproducir el problema localmente para identificar y solucionar cualquier error de código o dependencia.

    3. Verificar los eventos de EKS:

    Ejecuta kubectl get events --namespace default para ver cualquier evento relacionado con la terminación de la cápsula. Busca mensajes que indiquen la razón de la terminación, como "Terminación intencional" o "Terminación del límite de recursos".

    4. Deshabilitar la limpieza de nodos:

    La limpieza de nodos es un proceso automático que puede terminar las cápsulas para liberar recursos. Deshabilita la limpieza de nodos temporalmente para ver si resuelve el problema.

    5. Evitar la escala hacia abajo:

    Si escalas las cápsulas hacia abajo, se terminarán las vainas adicionales. Evita escalar las cápsulas hacia abajo durante periodos críticos.

    Recomendaciones adicionales:

    Utiliza restartPolicy: Always para reiniciar las cápsulas automáticamente en caso de falla. Sin embargo, esto puede no ser deseable para casos de automatización donde la reanudación no es posible. Habilita el monitoreo para rastrear el uso de recursos y recibir alertas sobre posibles problemas. Considera el uso de un sistema de programación de trabajos como Kubernetes Jobs o CronJobs para una gestión más confiable de los pods.

    Respondida el Dec 22, 2020 a las 08:02 - por Gemini

    Votos positivos: 0 | Votos negativos: 0