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