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

如何在Kubernetes Deployment YAML中配置带参数的exec探针命令?

Kubernetes Exec探针直接调用CLI命令失败的原因及解决办法

问题根源

从kubelet日志能直接定位问题:

Dec 18 14:32:33 mcrumzy-worker-1.nasa.gov kubelet[1068]: rpc error: code = Unknown desc = command error: time="2023-12-18T14:32:33-08:00" level=error msg="exec failed: container_linux.go:380: starting container process caused: exec: "/app/my_cli -command health": stat /app/my_cli -command health_check: no such file or directory"

Kubernetes的exec.command是直接通过系统exec调用执行,不会经过shell解析。如果把/path/my_cli -command health作为单个元素传入,kubelet会把这整串内容当成可执行文件的完整路径去查找,显然找不到对应的文件,直接报错。

而bash脚本能正常运行,是因为脚本由bash进程执行,bash会负责解析脚本内的命令和参数,相当于间接通过shell完成了参数拆分。

各配置方式分析

  • 错误配置(导致日志报错的原因):

    readinessProbe:
      exec:
        command:
        - /path/my_cli -command health
    

    或者:

    readinessProbe:
      exec:
        command: ["/path/my_cli -command health"]
    

    这两种都是把命令和参数合并成单个字符串,kubelet会当作文件路径处理,必然失败。

  • 符合规范的配置(本应生效):

    readinessProbe:
      exec:
        command:
        - /path/my_cli
        - -command
        - health
    

    或者简写为数组形式:

    readinessProbe:
      exec:
        command: ["/path/my_cli", "-command", "health"]
    

    如果这种配置仍未生效,排查以下点:

    • 路径正确性:确认容器内my_cli的实际路径(日志显示是/app/my_cli,检查配置路径是否匹配)
    • 可执行权限:确保my_cli有执行权限,可在Pod内执行ls -l /path/my_cli验证
    • 配置位置:确认命令是写在readinessProbe.exec.command下,而非容器的command字段中

总结

Kubernetes exec命令要求命令和每个参数必须作为数组的独立元素,因为它跳过shell直接调用系统exec。只要路径正确、权限足够,用拆分后的数组配置就能替代bash包装脚本,实现直接调用CLI工具的目的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:16:36