Kubectl установить переменные среды и запустить команду - PullRequest
0 голосов
/ 02 июля 2018

У меня есть контейнер, работающий в Kubernetes, где я хотел бы запустить команду из моего локального терминала. Рабочий каталог контейнера, основанный на его файле yaml, находится, скажем, /opt/gopath/src/a/. Тем не менее, я хотел бы запустить команду в каталоге /opt/gopath/src/b/. Кроме того, мне также нужно установить некоторые временные переменные среды перед запуском этой команды. В настоящее время я занимаюсь этим:

kubectl exec $pod_name -- bash -c "cd ../b/; env ENV_VARIABLE_1=ENV_VALUE_2 && env ENV_VARIABLE_2=ENV_VALUE_2 && <cmd to run>".

Это, кажется, работает в настоящее время. Однако я не уверен, что это лучший способ добиться этого. Кроме того, выполнение этой команды отображает все переменные среды в контейнере, которые я бы не хотел выводить, если это возможно. Может ли кто-нибудь указать мне правильное направление?

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

В случае статических переменных, я бы предложил использовать Config maps .

Поскольку вам необходимо использовать временные переменные из локальной оболочки, нет необходимости использовать длинные и сложные команды, поскольку exec подключает ваш терминал к работающему контейнеру (pod). Я проверил вашу проблему и создал простую переменную среды в локальной системе. Я использовал предоставленный вами синтаксис:

kubectl exec -it $pod_name -- sh -c 'key=123 key2=121; echo "$key $key2"'

Чтобы передать env vars, вы можете просто установить его так и добавить разделитель ';' между переменными и вашей командой.

0 голосов
/ 10 сентября 2018

Я бы предложил указать детали (включая переменные env) в файле манифеста .yaml, а затем сделать kubectl create -f manifest.yaml

Это гораздо более воспроизводимо, чем тонна флагов в командной строке.

0 голосов
/ 02 июля 2018

bash -c "cd ../b/; env ENV_VARIABLE_1=ENV_VALUE_2 ENV_VARIABLE_2=ENV_VALUE_2 <cmd to run>"

...