我有一个插件,它在pod启动时执行一些不同的操作,可以从pod内部运行,比如kubectl -n default -exec my-deployed-pod-xyz -- /path/my_cli -command health
,运行得很好,它记录成功消息,实际上做了我想做的事情。
在这个命令中,如果成功,它会执行os.Exit(0)
,如果发生错误,它会执行os.Exit(1)
,就像往常一样(它是用go写的,但这只是一个细节)。
不幸的是,当我在kubernetes deployment yaml中指定命令(上面例子中--
右边的部分)作为exec时,它似乎总是失败。为了解决这个问题,我做了一个cmd_wrapper.sh
,它只有:
#! /bin/bash
if /path/my_cli -command health ; then
exit 0
else
exit 1
fi
字符串
(也许我不需要如果其他,但我想我会确保)。
无论如何,当我在k8s中使用它作为exec命令时,它工作得很好,这让我认为问题在于原始命令中的多个单词。我试过:
readinessProbe:
exec:
command:
- /path/my_cli -command health
型
还有:
command:
- /path/my_cli
- -command
- health
型
还有:
command: ["/path/my_cli -command health"]
型
还有:
command: ["/path/my_cli", "-command", "health"]
型
不幸的是,这些似乎都不起作用。我仍然可以使用bash Package 器脚本,但很高兴知道这里发生了什么。
编辑:感谢larsks,我在worker节点的日志中找到了错误日志,它看起来像这样:
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"
型
所以这并没有太大的帮助,只是让它看起来像是无法解析命令。
1条答案
按热度按时间j9per5c41#
这个...
字符串
...不是有效的配置。
command
的参数(就像容器规范中command
的参数一样)必须是参数列表。您在日志中获得的错误...型
.发生,因为系统正在
$PATH
中查找名为/app/my_cli -command health
的文件。没有该名称的文件!你的一个尝试看起来是正确的:
型
(You可以看到它与文档中显示的语法相匹配。)
更新您的部署清单以使用上述语法,然后查看是否有新的错误消息。