2016-04-18 14 views
0

複数のゾーンで実行されているKubernetesクラスタにサービスを展開しようとしていますが、環境変数を使用して地域/ゾーンラベルをポッドに注入できるようにしたいと考えています。Kubernetesポッドにノードラベルを注入する

私は下向きのAPIを見てきましたが、ポッド/サービスのラベル/メタデータを挿入することができますが、ポッドを実行しているノードからは注入できません。

ノードラベルを挿入する方法がない場合、私が考えた別の解決策は、コンテナーにkubernetes/AWS APIをクエリしてこの情報を取得させることでしたが、コンテナにはかなりの複雑さが追加されます。

答えて

1

私はkubernetes/AWS APIは私に複雑のかなり多くを追加することを意味しているが、この情報を取得するために、コンテナのクエリを持っていたことについて考えコンテナ。

これは現在、下位APIで利用できない情報を取得するための推奨アプローチです。コンテナの複雑さを避けるため、「サイドカー」を使用して、バリエーションをTobias's solutionにすることができます。サイドカーは、connects to the kubernetes APIというポッド内の追加のコンテナで、探している情報(ノードラベル)を照会し、その出力を共有ボリュームに書き込みます。現時点では「初期コンテナ」のコンセプトはないため、サイドカーは永遠にスリープするかAPIを見続けるべきですが、終了することはできません。

1

これを達成する1つのオプションは、必要な環境変数の定義を含む各ノードにカスタムファイルを格納することです。次に、ファイルを含むフォルダをコンテナにマウントし、コンテナの起動の一環としてファイルの内容を取得します。 Kubernetes秘密のため

同様のアプローチがここで説明されていますhttps://github.com/kubernetes/kubernetes/blob/master/docs/design/secrets.md#deferral-consuming-secrets-as-environment-variables

0

Tim St. Clairの回答の派生物として、PostStart container hookの中からポッドメタデータを書き出すことも考えられます。 a well known URLから必要なメタデータを取得してください。それからk8s via the APIに書き出してください。これには、1回限りの実行であるという利点があります。地域とゾーンの情報は変わらないので、サイドカーを走らせ続ける必要はありません。

関連する問題