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

5jvtdoz2  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(4)|浏览(383)

我正在编写一个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

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

1wnzp6jl

1wnzp6jl1#

您是否将所有这些命令作为单行命令运行?首先,这些命令之间没有;&&。因此,如果您将其作为多行脚本粘贴到您的终端,则很可能会在本地执行。
第二,要让bash执行某个操作,需要:bash -c "command" .
请尝试运行以下命令:

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

Wed Apr 19 19:29:25 UTC 2017
1

您可以将其设为多行,如下所示:

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

lc8prwob2#

下面的方法应该有效
bash

bin   dev   etc   home  proc  root  run   sys   tmp   usr   var bin  
dev   etc   home  proc  root  run   sys   tmp   usr   var

如果以上命令不起作用,请尝试将bash替换为以下/bin/bashsh/bin/sh之一

vmdwslir

vmdwslir3#

-t可以解决您的任务
例如,我在这里运行几个cmd:

kubectl get pods |grep nginx|cut -f1 -d\  |\
while read pod; \
 do echo "$pod writing:";\
  kubectl exec -t $pod -- bash -c \
   "dd if=/dev/zero of=/feeds/test.bin bs=260K count=4 2>&1|\
    grep copi |cut -d, -f4; \
    a=$SECONDS; echo -ne 'reading:'; cat /feeds/test.bin >/dev/null ; \
    let a=SECONDS-a ; \
    echo $a sec"
done

注:您的示例将是:

kubectl exec -t octavia-api-worker-pod-test -c octavia-api -- bash -c "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"
jw5wzhpr

jw5wzhpr4#

张贴在这里,因为谷歌搜索仍然会带你到这个职位...
我想扔掉使用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

相关问题