在kubernetes pod中执行多个命令(或从shell脚本执行)

ahm*_*raj 7 kubernetes kubernetes-pod

我正在编写一个shell脚本,需要登录pod并在kubernetes pod中执行一系列命令.

下面是我的sample_script.sh

kubectl exec octavia-api-worker-pod-test -c octavia-api bash unset http_proxy https_proxy mv /usr/local/etc/octavia/octavia.conf /usr/local/etc/octavia/octavia.conf-orig /usr/local/bin/octavia-db-manage --config-file /usr/local/etc/octavia/octavia.conf upgrade head

运行此脚本后,我没有得到任何输出.任何帮助将不胜感激

Ahm*_*gle 30

您是否将所有这些命令作为单行命令运行?首先,这些命令之间没有;或没有&&.因此,如果将其作为多行脚本粘贴到终端,可能会在本地执行.

其次,告诉bash执行某些事情,你需要:bash -c "command".

试试这个:

$ kubectl exec POD_NAME -- bash -c "date && echo 1"

Wed Apr 19 19:29:25 UTC 2017
1
Run Code Online (Sandbox Code Playgroud)

你可以像这样多线:

$ kubectl exec POD_NAME -- bash -c "date && \
      echo 1 && \
      echo 2"
Run Code Online (Sandbox Code Playgroud)

  • 双破折号“-”用于将要传递给命令的参数与kubectl参数分开 (2认同)

小智 10

以下应该有效

kubectl -it exec podname -- bash -c "ls && ls"

bin   dev   etc   home  proc  root  run   sys   tmp   usr   var bin  
dev   etc   home  proc  root  run   sys   tmp   usr   var
Run Code Online (Sandbox Code Playgroud)

如果上述命令不起作用,则尝试bash用以下命令之一替换/bin/bashsh或者/bin/sh


Jua*_*anD 5

在这里发帖是因为谷歌搜索仍然会把你带到这篇文章......

我想放弃使用 HEREDOC 作为额外的可能性。

kubectl exec -i --tty=false PODNAME -- bash << EOF
echo "insert all your commands here."
echo "this subprocess will even pickup any variables you have in"
echo "the shell script that is calling this"
EOF
Run Code Online (Sandbox Code Playgroud)

  • 应该是--tty=false。 (2认同)