Códigos de salida
Cuando un contenedor no se inicia o termina, los eventos de Kubernetes registran el código de salida para informar de la causa. En esta sección se describe cómo localizar fallas con un código de salida.
Consulta de un código de salida
Puede usar kubectl para conectarse al clúster y ejecutar el siguiente comando para comprobar el pod:
kubectl describe pod {pod name}
Containers: container-1: Container ID: ... Image: ... Image ID: ... Ports: ... Host Ports: ... Args: ... State: Running Started: Sat, 28 Jan 2023 09:06:53 +0000 Last State: Terminated Reason: Error Exit Code: 255 Started: Sat, 28 Jan 2023 09:01:33 +0000 Finished: Sat, 28 Jan 2023 09:05:11 +0000 Ready: True Restart Count: 1
Descripción
El código de salida varía de 0 a 255.
- Si el código de salida es 0, el contenedor sale normalmente.
- Generalmente, la salida anormal es causada por el programa y tal código de salida varía de 1 a 128. En escenarios especiales, el código de salida varía de 129 a 255.
- Cuando un programa sale debido a interrupciones externas, el código de salida varía de 129 a 255. Cuando el sistema operativo envía una señal de interrupción al programa, el código existente es el valor de señal de interrupción más 128. Por ejemplo, si el valor de señal de interrupción de SIGKILL es 9, el código de estado de salida es 137 (9 + 128).
- Si el código existente no está en el rango de 0 a 255, por ejemplo, exit(-1), el código de salida se convierte automáticamente en un valor que está dentro del rango de 0 a 255.
Si el código existente es un número positivo, la fórmula de conversión es la siguiente:
code % 256
Si el código de salida es un número negativo, la fórmula de conversión es la siguiente:
256 - (|code| % 256)
Para obtener más información, consulte Códigos de salida con significados especiales.
Códigos de salida comunes
Código de salida |
Nombre |
Descripción |
---|---|---|
0 |
Salida normal |
El contenedor sale normalmente. Este código de estado no indica necesariamente que se produce una excepción. Cuando no hay ningún proceso en el contenedor también se puede mostrar 0. |
1 |
Error de programa común |
Hay muchas causas para esta excepción, la mayoría de las cuales son causadas por el programa. Necesita localizar la causa con los logs de contenedor. Por ejemplo, este error se produce cuando se ejecuta una imagen x86 en un nodo de Arm. |
125 |
El contenedor no se está ejecutando. |
Las causas posibles son:
|
126 |
Error de llamada al comando |
El comando llamado en la imagen no se puede ejecutar. Por ejemplo, el permiso de archivo es insuficiente o el archivo no se puede ejecutar. |
127 |
No se puede encontrar el archivo o directorio. |
No se puede encontrar el archivo o directorio especificado en la imagen. |
128 |
Parámetro de salida no válido |
El contenedor sale pero no se proporciona ningún código de salida válido. Esto puede deberse a múltiples motivos. Es necesario localizar aún más la causa. Por ejemplo, una aplicación que se ejecuta en el nodo de containerd intenta invocar al comando de docker. |
137 |
Terminación inmediata (SIGKILL) |
El programa es terminado por la señal SIGKILL. Las causas comunes son las siguientes:
|
139 |
Error de segmentación (SIGSEGV) |
El contenedor recibe la señal SIGSEGV del sistema operativo porque el contenedor intenta acceder a una ubicación de memoria no autorizada. |
143 |
Terminación agraciada (SIGTERM) |
El contenedor se cierra correctamente según las instrucciones del host. Generalmente, este código de salida 143 no requiere solución de problemas. |
255 |
El código de salida está fuera de rango. |
El código de salida de contenedor está fuera de rango. Por ejemplo, la salida (-1) puede usarse para una salida anormal, y -1 se convierte automáticamente en 255. Se requiere más solución de problemas. |
Señal de interrupción estándar de Linux
Puede ejecutar el comando kill -l para ver las señales y los valores correspondientes en el SO Linux.
Señal |
Valor |
Acción |
Confirmación |
---|---|---|---|
SIGHUP |
1 |
Term |
Se envía cuando finaliza la conexión del terminal de usuario (normal o anormal). |
SIGINT |
2 |
Term |
Señal de terminación del programa, que es enviada por el terminal pulsando Ctrl+C. |
SIGQUIT |
3 |
Core |
De manera similar a SIGINT, el terminal envía el comando exit. Generalmente, el commando de salida se controla pulsando Ctrl+\. |
SIGILL |
4 |
Core |
Instrucción no válida, generalmente porque se produce un error en el archivo ejecutable. |
SIGABRT |
6 |
Core |
Señal generada cuando se invoca la función abortar. El proceso termina anormalmente. |
SIGFPE |
8 |
Core |
Se produce un error aritmético de coma flotante. También se producen otros errores aritméticos como el divisor 0. |
SIGKILL |
9 |
Term |
Se termina cualquier proceso. |
SIGSEGV |
11 |
Core |
Intento de acceder a una ubicación de memoria no autorizada. |
SIGPIPE |
13 |
Term |
La tubería está desconectada. |
SIGALRM |
14 |
Term |
Indica la temporización del reloj. |
SIGTERM |
15 |
Term |
Señal de fin de proceso, que suele ser la salida normal del programa. |
SIGUSR1 |
10 |
Term |
Esta es una señal definida por el usuario en las aplicaciones. |
SIGUSR2 |
12 |
Term |
Esta es una señal definida por el usuario en las aplicaciones. |
SIGCHLD |
17 |
Ign |
Esta señal se genera cuando un subproceso finaliza o se interrumpe. |
SIGCONT |
18 |
Cont |
Reanuda un proceso detenido. |
SIGSTOP |
19 |
Stop |
Suspender la ejecución de un proceso. |
SIGTSTP |
20 |
Stop |
Detener un proceso. |
SIGTTIN |
21 |
Stop |
El proceso en segundo plano lee el valor de entrada del terminal. |
SIGTTOU |
22 |
Stop |
El proceso en segundo plano lee el valor de salida del terminal. |