Выполнение нескольких команд (или из сценария оболочки) в модуле 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
После запуска этого скрипта я не получаю никакого вывода. Любая помощь будет оценена
4 ответа
Вы запускаете все эти команды как одну строку? Во-первых, нет ;
или же &&
между этими командами. Так что, если вы вставите его как многострочный скрипт в свой терминал, скорее всего, он будет выполняться локально.
Во-вторых, чтобы 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"
Следующее должно работать
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
Публикую здесь, потому что поиск Google все еще приводит вас к этому сообщению...
Я хотел бы отказаться от использования HEREDOC в качестве дополнительной возможности.
kubectl exec -i --tty-false PODNAME -- bash << EOF
echo "insert all your commands here."
echo "this subprocess will even pickup any variables you have in"
echo "the shell script that is calling this"
EOF
-т может решить вашу задачу
Например, я запускаю здесь несколько 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
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"