返回

揭开Kubernetes容器退出码的神秘面纱:全面指南

后端

当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,您应该对容器退出码有所了解,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本原因。

理解容器退出码

容器退出码是一个由一系列数字组成的代码,用于容器终止的原因。这些代码由 POSIX 标准定义,可以在此处找到。

最常见的退出码包括:

  • 0:成功
  • 1:一般错误
  • 2:命令不存在
  • 127:命令未找到
  • 137:内存不足
  • 143:终止由信号引起

Kubernetes 中的容器退出码

在 Kubernetes 中,容器退出码被记录在 pod 事件中。这些事件可以从 kubectl 命令行工具或 Kubernetes 仪表板中查看。

$ kubectl get events --namespace=default
NAME                                REASON      AGE     FROM                MESSAGE
pod/busybox-1234567890-abcde     Pulled      4m30s   kubelet, minikube   Container image "busybox:latest" already present on machine
pod/busybox-1234567890-abcde     Created     4m30s   kubelet, minikube   Created container busybox
pod/busybox-1234567890-abcde     Started     4m30s   kubelet, minikube   Started container busybox
pod/busybox-1234567890-abcde     Killing     4m29s   kubelet, minikube   Killing container with pid 12345
pod/busybox-1234567890-abcde     Unhealthy   3m57s   kubelet, minikube   Liveness probe failed: HTTP probe failed with statuscode: 404

在上面的示例中,您可以看到容器 busybox-1234567890-abcde 以退出码 127 终止。这意味着命令未找到。

使用容器退出码进行故障排除

容器退出码可以用来帮助您故障排除 Kubernetes pod 故障。当您看到一个 pod 处于异常状态时,您可以检查该 pod 的事件以查看容器的退出码。

如果容器以非零退出码终止,则表明发生了错误。您可以使用退出码来确定错误的可能原因。例如,如果容器以退出码 127 终止,则表明命令未找到。您可以检查容器镜像以确保它包含所需的命令。

结论

容器退出码是故障排除 Kubernetes pod 故障的重要工具。了解容器退出码的含义可以帮助您快速定位并解决故障的根本原因。