You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes livenessProbe exec命令if语句环境变量不生效问题求助

问题原因
  • 你在YAML的块标量(|- 标识的多行内容)外层额外包裹了双引号,一方面导致整个shell脚本被sh当成单个字符串命令执行,触发not found报错;另一方面双引号内的${变量名}会被Kubernetes提前解析为集群内置的环境变量替换,而K8s中不存在used、thresh、health这些自定义变量,所以全部被替换为空值,最终if语句就变成了日志里的[[ -gt || -ne 200 ]]格式。
  • [[ ]]是Bash专属的语法,你指定的执行解释器是sh,大部分容器镜像默认的sh是轻量的dash,不支持该语法,也会导致执行异常。
修复方案

直接使用以下修改后的livenessProbe配置即可:

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} -o ${health} -ne 200 ]; then exit 1; fi
  initialDelaySeconds: 240
  periodSeconds: 60
  failureThreshold: 3
  timeoutSeconds: 10
核心修改点说明
  • 移除了包裹整个脚本的外层双引号,避免K8s提前解析变量、避免脚本被当成单个命令执行
  • 将Bash专属的[[ ]]语法替换为POSIX标准的[ ]语法,逻辑或运算符||替换为适配[ ]的-o,兼容sh执行环境
  • 如果你的容器镜像内置了Bash,也可以将sh替换为bash,保留[[ ${used} -gt ${thresh} || ${health} -ne 200 ]]的写法即可

内容的提问来源于stack exchange,提问作者david_beauchamp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:30:03