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