【问题标题】:Executing multiple commands( or from a shell script) in a kubernetes pod在 kubernetes pod 中执行多个命令(或从 shell 脚本)
【发布时间】:2017-09-15 21:28:24
【问题描述】:

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

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

【问题讨论】:

  • 不是真正的描述性:你期望什么输出?

标签: kubernetes kubernetes-pod


【解决方案1】:

您是否将所有这些命令作为单行命令运行?首先,这些命令之间没有;&&。所以如果你把它作为一个多行脚本粘贴到你的终端,它很可能会在本地执行。

其次,要告诉 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"

【讨论】:

  • 在这种情况下,'--' 有什么作用?为什么需要它?
  • 双破折号“--”用于将要传递给命令的参数与 kubectl 参数分开
  • 感谢您的回答。我还没有看到过这样的 docker 分隔符。那里也存在吗?
  • @cafebabe1991 否。在docker run 命令中,[image] 参数之后的任何位置参数都被视为CMD 参数。您可以在[image] 之前传递--entrypoint=[program] 选项。例如docker run --rm -it --entrypoint=sleep busybox 9999 运行 sleep 9999
【解决方案2】:

-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"

【讨论】:

【解决方案3】:

以下应该可以工作

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

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

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2018-03-29
    相关资源
    最近更新 更多