Kubernetes,配置startupProbe读取stdout日志



我在kube上运行Java应用程序,并希望设置startupProbe来查找抛出到stdout的Java日志中的'tomcat started'文本;有什么办法吗?我看了文档,但只提到检查/卷曲一些端点或运行命令。问题是pod如何检查自己的日志

还有-我看到stdout日志临时存储在/var/logs/containers目录(即在NODE上,而不是POD上),所以有点没用。

在你的问题中,你更多地关注解决方案而不是实际问题。那么让我们看看如何从不同的角度来解决这个问题。这是tomcat echo命令,您将尝试以此为基础进行探测:

https://github.com/apache/tomcat/blob/0a2ee9b1ba7ded327c2aa2361cccff6a16cdef84/bin/catalina.sh L506

正如您所看到的,这确实告诉您Tomcat has started,但在代码继续运行时,它不会为您验证任何内容。您还会注意到,这个输出不是来自tomcat本身,而是来自启动tomcat的脚本。

在另一端打开端口是验证web服务器是否启动并运行的更好选择。下面是如何检查的示例:

如果您卷曲打开的tomcat端口,退出代码将为0,这将告诉您服务器已经启动:

curl -s localhost:8080 > /dev/null 

这里我们使用echo $?来检查前一个命令的输出以验证它:

/usr/local/tomcat# echo $? 
0 

继续,现在让我们用未打开的端口做一个测试:

我们使用与前面步骤相同的检查方法,不同之处在于提供不同的端口(未打开):

/usr/local/tomcat# curl -s localhost:8010 > /dev/null

然后用echo $?检查命令的退出代码:

/usr/local/tomcat# echo $? 
7 

这个答案中描述的另一种方法是查询Kubernetes API中的pod日志:

GET /api/v1/namespaces/{namespace}/pods/{name}/log

话虽如此,构建事物的最佳方式是在应用程序中具有实际的健康检查端点。

最新更新