kubernetes 如何在k8s部署yaml中指定带参数的exec命令?

jm2pwxwz  于 5个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(90)

我有一个插件,它在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"


所以这并没有太大的帮助,只是让它看起来像是无法解析命令。

j9per5c4

j9per5c41#

这个...

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

字符串
...不是有效的配置。command的参数(就像容器规范中command的参数一样)必须是参数列表。您在日志中获得的错误...

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"


.发生,因为系统正在$PATH中查找名为/app/my_cli -command health的文件。没有该名称的文件!
你的一个尝试看起来是正确的:

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


(You可以看到它与文档中显示的语法相匹配。)
更新您的部署清单以使用上述语法,然后查看是否有新的错误消息。

相关问题