web-dev-qa-db-ja.com

Kubernetesポッドで複数のコマンドを(またはシェルスクリプトから)実行する

ポッドにログインし、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

このスクリプトを実行した後、何も出力されません。どんな助けでも大歓迎です

9
ahmed meraj

これらすべてのコマンドを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"
30
AhmetB - Google

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

以下はうまくいくはずです

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

1
RB7