Я не понимаю, как выполнять команды $ () в exec. Я создаю работу в кубернетах со следующими параметрами:

command:
    - ./kubectl
    - -n
    - $MONGODB_NAMESPACE
    - exec
    - -ti
    - $(kubectl
    - -n
    - $MONGODB_NAMESPACE
    - get
    - pods
    - --selector=app=$MONGODB_CONTAINER_NAME
    - -o
    - jsonpath='{.items[*].metadata.name}')
    - --
    - /opt/mongodb-maintenance.sh

Но часть с $ (kubectl -n ... --selector ...) обрабатывается как строка и не выполняется. Подскажите пожалуйста, как правильно это сделать. Спасибо!

1
Alexandr Kondratiev 13 Мар 2018 в 01:51

2 ответа

Лучший ответ

Насколько мне известно, это невозможно, если поместить каждый раздел в виде элемента массива. Вместо этого вы можете сделать что-то вроде следующего:

command:
    - /bin/sh
    - -c
    - |        
      ./kubectl -n $MONGODB_NAMESPACE exec -ti $(kubectl -n $MONGODB_NAMESPACE get pods --selector=app=$MONGODB_CONTAINER_NAME -o jsonpath='{.items[*].metadata.name}') -- /opt/mongodb-maintenance.sh
0
dippynark 12 Мар 2018 в 23:08

Из вывода kubectl exec я заметил, что вы можете использовать -- для разделения аргументов

# List contents of /usr from the first container of pod 123456-7890 and sort by modification time.
# If the command you want to execute in the pod has any flags in common (e.g. -i),
# you must use two dashes (--) to separate your command's flags/arguments.
# Also note, do not surround your command and its flags/arguments with quotes
# unless that is how you would execute it normally (i.e., do ls -t /usr, not "ls -t /usr").

kubectl exec 123456-7890 -i -t -- ls -t /usr
0
What Would Be Cool 9 Окт 2018 в 16:22