我很难让 kubernetes livenessProbe exec 命令与环境变量一起工作。我的目标是让 liveness 探针监控 pod 上的内存使用情况以及执行 httpGet 健康检查。
“如果容器内存使用量超过资源限制的 90% 或 http 响应代码/health
失败,则探测应该失败。”
liveness探针配置如下:
livenessProbe:
exec:
command:
- sh
- -c
- |-
"used=$(awk '{ print int($1/1.049e+6) }' /sys/fs/cgroup/memory/memory.usage_in_bytes);
thresh=$(awk '{ print int( $1 / 1.049e+6 * 0.9 ) }' /sys/fs/cgroup/memory/memory.limit_in_bytes);
health=$(curl -s -o /dev/null --write-out "%{http_code}" http://localhost:8080/health);
if [[ ${used} -gt ${thresh} || ${health} -ne 200 ]]; then exit 1; fi"
initialDelaySeconds: 240
periodSeconds: 60
failureThreshold: 3
timeoutSeconds: 10
如果我执行到(ubuntu)pod 并运行这些命令,它们都可以正常工作并完成工作。
但是当部署为 livenessProbe 时,pod 会不断失败,并显示以下警告:
Events: │
│ Type Reason Age From Message │
│ ---- ------ ---- ---- ------- │
│ Warning Unhealthy 14m (x60 over 159m) kubelet (combined from similar events): Liveness probe failed: sh: 4: used=1608; │
│ thresh=2249; │
│ health=200; │
│ if [[ -gt || -ne 200 ]]; then exit 1; fi: not found
看起来好像探测内存和 curl 运行状况检查端点的初始命令都有效并填充了环境变量,但是这些变量替换随后没有填充到 if 语句中,因此探测永远不会通过。
知道为什么吗?或者如何将其配置为正常工作?我知道这有点令人费解。提前致谢。