web-dev-qa-db-fra.com

Exécution de plusieurs commandes (ou à partir d'un script Shell) dans un pod kubernetes

J'écris un script Shell qui doit se connecter au pod et exécuter une série de commandes dans un pod kubernetes.

ci-dessous est mon 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

Après avoir exécuté ce script, je ne reçois aucune sortie. Toute aide sera fortement appréciée

9
ahmed meraj

Exécutez-vous toutes ces commandes en une seule ligne? Tout d'abord, il n'y a pas de ; ou && entre ces commandes. Donc, si vous le collez en tant que script multiligne sur votre terminal, il sera probablement exécuté localement.

Deuxièmement, pour dire à bash d'exécuter quelque chose, vous avez besoin de: bash -c "command".

Essayez d'exécuter ceci:

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

Wed Apr 19 19:29:25 UTC 2017
1

Vous pouvez le rendre multiligne comme ceci:

$ kubectl exec POD_NAME -- bash -c "date && \
      echo 1 && \
      echo 2"
30
AhmetB - Google

-t peut résoudre votre tâche

Par exemple, je lance ici quelques 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. votre exemple sera:

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
dmitry_podyachev

Les éléments suivants devraient fonctionner

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

Si la commande ci-dessus ne fonctionne pas, essayez également de remplacer bash par l'un des /bin/bash, sh, bin/sh Suivants

1
RB7