Выполнение нескольких команд (или из сценария оболочки) в модуле 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"
Другие вопросы по тегам