ローカルターミナルからコマンドを実行したい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>".
これは現在機能しているようです。しかし、これがこれを達成する最良の方法であるとは確信していません。また、このコマンドを実行すると、コンテナー内のすべての環境変数が表示されます。可能であれば、印刷したくないと思います。誰かが私を正しい方向に向けることができますか?
静的変数の場合、 Config maps を使用することをお勧めします。
ローカルシェルから一時変数を使用する必要があるため、execが実行中のコンテナ(pod)に端末を接続するため、長く複雑なコマンドを使用する必要はありません。問題をテストし、ローカルシステムに簡単な環境変数を作成しました。提供された構文を使用しました:
kubectl exec -it $pod_name -- sh -c 'key=123 key2=121; echo "$key $key2"'
Env変数を渡すには、そのように設定し、区切り文字「;」を追加するだけです。変数とコマンドの間。
bash -c "cd ../b/; env ENV_VARIABLE_1=ENV_VALUE_2 ENV_VARIABLE_2=ENV_VALUE_2 <cmd to run>"
マニフェスト.yamlファイルで詳細(env変数を含む)を指定し、kubectl create -f manifest.yaml
これは、コマンドラインに大量のフラグを設定するよりもはるかに再現性があります。
これは非常に遅いですが、非常に役立つと確信しています。
envsubst
は、1行でこの問題を解決します。
以下のコマンドは、YAMLファイルのenv変数を実際の値に置き換えます。
cat <filename>.yaml | envsubst | kubectl apply -f -