J'ai un conteneur s'exécutant sur Kubernetes sur lequel j'aimerais lancer une commande à partir de mon terminal local. Le répertoire de travail du conteneur basé sur son fichier yaml est à dire /opt/gopath/src/a/
. Cependant, j'aimerais lancer la commande dans le répertoire /opt/gopath/src/b/
. De plus, je dois également définir certaines variables d'environnement temporaires avant d'exécuter cette commande. Donc, actuellement, voici ce que je fais:
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>".
Cela semble fonctionner actuellement. Cependant, je ne suis pas convaincu que ce soit le meilleur moyen d'y parvenir. En outre, l’exécution de cette commande affiche toutes les variables d’environnement du conteneur, ce que je ne voudrais pas imprimer si possible. Quelqu'un pourrait-il me diriger dans la bonne direction?
En cas de variables statiques, je suggérerais d'utiliser Cartes de configuration .
Comme vous devez utiliser des variables temporaires à partir d'un shell local, il n'est pas nécessaire d'utiliser des commandes longues et compliquées, car exec connecte votre terminal au conteneur (pod) en cours d'exécution. J'ai testé votre problème et créé une variable d'environnement simple sur le système local. J'ai utilisé la syntaxe fournie par vous:
kubectl exec -it $pod_name -- sh -c 'key=123 key2=121; echo "$key $key2"'
Pour passer env vars, vous pouvez simplement le définir comme ça et ajouter un délimiteur ';' entre les variables et votre commande.
bash -c "cd ../b/; env ENV_VARIABLE_1=ENV_VALUE_2 ENV_VARIABLE_2=ENV_VALUE_2 <cmd to run>"
je suggérerais de spécifier les détails (y compris les variables env) dans un fichier .yaml manifeste, puis de faire kubectl create -f manifest.yaml
C'est beaucoup plus reproductible que d'avoir une tonne d'indicateurs dans la ligne de commande.