在 kubernetes pod 中执行多个命令(或从 shell 脚本执行)
Executing multiple commands( or from a shell script) in a 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
在 运行 这个脚本之后,我没有得到任何输出。
任何帮助将不胜感激
你 运行 所有这些命令都是一行命令吗?首先,这些命令之间没有 ;
或 &&
。因此,如果您将它作为多行脚本粘贴到您的终端,它可能会在本地执行。
其次,要告诉 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"
-t
can solve your task
比如我运行这里有几个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
p.s。你的例子将是:
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"
以下应该有效
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/bash
、sh
或 /bin/sh
之一
我正在编写一个 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
在 运行 这个脚本之后,我没有得到任何输出。 任何帮助将不胜感激
你 运行 所有这些命令都是一行命令吗?首先,这些命令之间没有 ;
或 &&
。因此,如果您将它作为多行脚本粘贴到您的终端,它可能会在本地执行。
其次,要告诉 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"
-t can solve your task
比如我运行这里有几个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
p.s。你的例子将是:
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"
以下应该有效
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/bash
、sh
或 /bin/sh