我有一个 Kubernetes 集群,在其中不同的 Pod 运行在不同的命名空间中。如何知道任何 Pod 是否失败?
是否有任何单个命令来检查失败的 Pod 列表或重启的 Pod 列表?
以及重启的原因(日志)?
是否有任何单个命令来检查失败的 Pod 列表或重启的 Pod 列表?
以及重启的原因(日志)?
这取决于您是想要详细的信息还是只想检查最后几个失败的pod。
我建议您阅读有关日志记录体系结构(Logging Architecture)的内容。
如果您想要详细的信息,您应该使用第三方软件,如Kubernetes文档中所述-使用Elasticsearch和Kibana进行日志记录(Logging Using Elasticsearch and Kibana)或另一个FluentD。
如果您正在使用云环境,则可以将其集成到云日志记录(Cloud Logging)
工具中(例如在Google Cloud Platform
中可使用Stackdriver
)。
如果您想要检查日志以找到pod失败的原因,可以在K8s文档中找到良好的描述Debug Running Pods。
如果您想获取特定pod的日志
$ kubectl logs ${POD_NAME} -n {NAMESPACE}
$ kubectl logs ${POD_NAME} ${CONTAINER_NAME}
$ kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
您可以使用以下方式获取更多信息
$ kubectl get events -o wide --all-namespaces | grep <your condition>
类似的问题在这个SO帖子中发布过,你可以查看更多细节。
大多数情况下,应用程序失败的原因都会在上一个 Pod 的持久日志中打印出来。您只需在 kubectl logs ...
命令后加上 --previous
标志即可查看它们。
kubectl get pods --all-namespaces | | grep -Ev '([0-9]+)/\1'
此外,在这些情况下Lens非常好用。