Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kubectl set environment variables and run command

I have a container running on Kubernetes where I would like to run a command from my local terminal. The working directory of the container based on its yaml file is at say /opt/gopath/src/a/. However, I would like to run the command at directory /opt/gopath/src/b/. Additionally, I also need to set certain temporary environment variables before running this command. So currently, this is what I am doing:

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

This seems to be working currently. However, I am not convinced that this is the best way to achieve this. Also, running this command displays all the environment variables in the container -- which I would like not to be printed if possible. Could anyone point me in the right direction?

like image 986
ab15 Avatar asked Jul 02 '18 02:07

ab15


1 Answers

In case of static variables, I would suggest using Config maps.

Since you need to use temporary variables from a local shell, there is no need to use long and complicated commands as exec connects your terminal to the running Container (pod). I tested your issue and created a simple environment variable on the local system. I used syntax provided by you:

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

To pass env vars, you can just set it like that and add delimiter ';' between variables and your command.

like image 85
aurelius Avatar answered Nov 16 '22 01:11

aurelius