我正在尝试在Kubernetes中实现Probe
我理解如果http_status_code >= 200 and <=399
containers:
- name: myimage
image: myimage:45
imagePullPolicy: Never
readinessProbe:
httpGet:
path: /
port: 5004
然而,如果成功,我们的应用程序返回状态码404(按照设计)。.在这种情况下如何使探测成功?
有办法做到这一点吗?
将探测更改为执行命令而不是http请求。Kubernetes在容器内执行命令,并根据命令的退出代码(0表示成功,非0表示失败)确定是否成功
- 创建一个脚本
/health.sh
,该脚本使用curl通过localhost
调用健康检查端点。包含一个条件,如果返回码为404,则将退出码设置为0(成功),否则设置为1(失败)
#!/bin/sh
if [ $(curl -s -o /dev/null -w "%{http_code}" http://localhost:5004) -eq "404" ]; then
exit 0
else
exit 1
fi
- 使用命令而不是http请求配置探针
readinessProbe:
exec:
command:
- /bin/sh
- -c
- /health.sh
如果不想修改容器,可以在命令部分定义内联脚本,如下所示
readinessProbe:
exec:
command:
- /bin/sh
- -c
- if [ $(curl -s -o /dev/null -w "%{http_code}" http://localhost:5004) -eq "404" ]; then exit 0; else exit 1; fi