kubectl exec 返回无例外的错误消息?

kaf*_*fka 0 bash kubernetes kubectl

我目前正在尝试在我的 kubernetes pod 上执行一个简单的 bash 命令,但似乎遇到了一些没有意义的错误。

如果我执行到 docker 容器并运行命令普通

I have no name!@kafka-0:/tmp$ if [ $(comm -13 <(sort selectedTopics) <(sort topics.sh) | wc -l) -gt 0 ];  then  echo "hello"; fi
Run Code Online (Sandbox Code Playgroud)

我得到 Hello 作为输出。

但是如果从外部执行相同的

kubectl exec --namespace default kafka-0 -c kafka -- bash -c "if [ $(comm -13 </tmp/selectedTopics </tmp/topics.sh| wc -l) -gt 0 ];  then  echo topic does not exist && exit 1; fi"
Run Code Online (Sandbox Code Playgroud)

然后我收到一条错误消息,指出 /tmp/topics.sh: No such file or directory

事件虽然我能够做到这一点

kubectl exec --namespace $namespace kafka-0 -c kafka -- bash -c "cat /tmp/topics.sh"
Run Code Online (Sandbox Code Playgroud)

为什么 kubectl 会给exec我带来问题?

Wil*_*ell 5

当你写:

 kubectl ... "$(cmd)"
Run Code Online (Sandbox Code Playgroud)

cmd在本地主机上执行以创建用作 的参数的字符串kubectl。换句话说,您是comm -13 </tmp/selectedTopics </tmp/topics.sh| wc -l在本地主机上执行,而不是在 pod 中执行。

如果您想避免在本地扩展,您应该使用单引号:

kubectl exec --namespace default kafka-0 -c kafka -- bash -c 'if comm -13 </tmp/topics.sh grep -q . ;  then  echo topic does not exist >&2 && exit 1; fi'
Run Code Online (Sandbox Code Playgroud)