kubectlを適用するときに、すべてのファイルの環境変数を置き換えます。

Jan 14 2021

フォルダ内に多数のKubernetes構成ファイルがあり、kubernetesそれらすべてを適用したいとします。

kubectl apply -f kubernetes -n MyNamespace

これらのファイルの一部には、最初に置き換える必要のある環境変数が含まれています(Kubernetesではテンプレート化されていません)。たとえば、いくつかのデプロイメントyamlには次のようなものが含まれています。

image: myregistry.com/myrepo:$TAG

単一YAMLファイルの場合、これは、することができます行われ、このようenvsubstを使用して、例えば:

envsubst < deploy.yml | kubectl apply -f -

すべてのyamlファイルに対してこれらの置換を行うための最良の方法は何ですか?

(フォルダー内のファイルをループしてenvsubst上記のように呼び出すことは1つのオプションですが、kubectl個々のファイルではなくフォルダー全体を渡す方が望ましいと思います)

回答

5 Inian Jan 13 2021 at 23:26

のプロセス置換機能を使用するか、プレーンなol 'を使用して、envsubst1つのファイルを読み取るかのように、標準入力から複数のファイルの内容を読み取ることができます。< deploy.yaml<(..)bashcat

envsubst < <(cat *.yaml) | kubectl apply -f -

または

cat *.yaml | envsubst - | kubectl apply -f -
2 Max Jan 14 2021 at 07:39

これは機能します:

for f in *.yaml; do envsubst < $f | kubectl apply -f -; done