ポッドにログインし、kubernetesポッドで一連のコマンドを実行する必要があるシェルスクリプトを書いています。
以下は私の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
このスクリプトを実行した後、何も出力されません。どんな助けでも大歓迎です
これらすべてのコマンドを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"
-tはタスクを解決できます
たとえば、いくつかのコマンドをここで実行します。
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
pSあなたの例は次のようになります:
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