2017-11-15 17 views
0

バニラドッカーを使って、composeまたはswarmを実行しているとき、Dockerのcliパラメータとして "-add-env FOO = bar"を渡すことができます。実行時にしかし、kubernetesでは、コンテナ仕様のセクションで.ymlファイルの値をハードコーディングする方法しか見ていません。実行時に環境変数をkubernetesに渡す

誰でも実行時にそれを渡す方法を教えてもらえますか? (つまり、 "kubectl apply ..."を使用すると、env varを渡します)

ありがとう!本当に助けてくれてありがとう!

敬具は、

+0

@のラデク・ゴブリン-pieczonkaが述べたように残念ながらKubernetesがネイティブそれをサポートしていません:あなただけenvsubst使用できる最も簡単なユースケースについては

。両方の答えはそれを行うことができ、ドラフトのような複数のテンプレートエンジンがありますが、それらはすべて非常に複雑です。私はそれがかなり速かったので最初の答えを有効にします。皆さん、ありがとうございました。 –

答えて

1

私は、「ランタイム」で、あなたが実際に作成/起動された適用kubectlとき意味することを前提としています。いいえ、それは不可能です。

代わりにやりたいことは、おそらくいくつかのテンプレートエンジンによってマニフェストが実行されている可能性があります。あなたが行うことができる最も簡単な方法は、kubectl applyにcat manifest | sed 's/PLACEHOLDER/VALUE/'のようなsedを使ってテンプレートをパイプし、マニフェストで正しく定義されたプレースホルダ文字列をkubectlにプッシュする前に置換することです。もう少し高度な解決策と私が一般的にアドバイスしているのは、例えば実行できるヘルムチャートに慣れることです。helm upgrade my-release --reuse-vars --set my.var=value

+0

これはイライラしています... :( –

+0

これは 'helm'がある理由です:)実際、私は独自のpython/jinja2ソリューションを使ってしばらくの間、テンプレート資産をうまくサポートしていましたが、合理的で、単純なテンプレートをはるかに超えています –

2

あなたが選んだテンプレート言語は使いやすいです。たとえば、erbでは、erb deployment.erb.yaml | kubectl apply -f -とするだけです。 cat deployment.yaml | envsubst | kubectl apply -f -

関連する問題