Kubernetes Podの”command”や”args”で環境変数を参照する方法いろいろ
はじめに
KubernetesでPod(もしくはReplicaSet、Deployment)のマニフェストにて、 command や args 属性を使って実行コマンドを指定する事ができます。
command や args に指定する実行コマンドで環境変数を利用する場合の注意点と対処法について紹介します。
検証環境
command や args に環境変数をベタ書きした場合、うまく参照できない
環境変数を出力するだけのPodを作成してみます。
まずはPodのマニフェストファイルを作成します。
env
属性で NAME
という環境変数を設定し、それを出力させてみます。
マニフェストファイルを元にPodを作成します。
applyが正常にできたら、ログを確認してみます。
env
属性で設定した環境変数が展開されませんでした。
このように、Kubernetesマニフェストの command や args で環境変数を参照する場合、
シェルの感覚で $NAME
や ${NAME}
と記述してもうまく展開されないことがあります。
環境変数を参照するにはどうしたら良いでしょう?
対処法1:$(...)
形式で参照
先程の環境変数を参照していた ${NAME}
という記述を $(NAME)
のように 丸括弧 に書き換えます。
では、このマニフェストファイルをapplyしてみます。
applyが正常にできたら、ログを確認してみます。
環境変数の値が正しく出力されるようになりました。
対処法2:bash -c
形式で参照
こちらの方法が見やすくて個人的には好きですが、利用のためにいくつかの条件をクリアしなければなりません。
command に bash -c
を指定し、 args にスクリプト文字列を埋め込んでやるとなぜか ${NAME}
が参照できるようになります。
マニフェストファイルをapplyします。
applyが正常にできたら、ログを確認してみます。
環境変数の値が正しく出力されるようになりました。
ひとこと
個人的には通常のシェルと同じ感覚で記述できる 対処法2 の方が好きではありますが、利用できる条件が揃っている場合しか利用できません。
対処法1 の方法はどんな記法を採用していても利用できます。
ディスカッション
コメント一覧
まだ、コメントがありません