Ersetzen Sie die Umgebungsvariable in allen Dateien, wenn kubectl angewendet wird

Jan 14 2021

Angenommen, wir haben eine Reihe von Kubernetes-Konfigurationsdateien in einem Ordner kubernetesund möchten sie alle anwenden:

kubectl apply -f kubernetes -n MyNamespace

Einige dieser Dateien enthalten Umgebungsvariablen, die zuerst ersetzt werden müssen (keine Vorlagen in Kubernetes). Beispielsweise enthalten einige der Bereitstellungs-Yamls Folgendes:

image: myregistry.com/myrepo:$TAG

Für eine einzelne Yaml-Datei kann dies beispielsweise mithilfe von envsubst wie folgt erfolgen:

envsubst < deploy.yml | kubectl apply -f -

Was ist der beste Weg, um diese Ersetzungen für alle Yaml-Dateien vorzunehmen?

(Das Durchlaufen der Dateien im Ordner und das Aufrufen envsubstwie oben ist eine Option, aber ich vermute, dass es vorzuziehen wäre, den gesamten Ordner an kubectleinzelne Dateien und nicht an einzelne Dateien zu übergeben.)

Antworten

5 Inian Jan 13 2021 at 23:26

Sie können envsubstden Inhalt mehrerer Dateien von der Standardeingabe lesen lassen , als würde eine Datei < deploy.yamlentweder mithilfe der Prozessersetzungsfunktion <(..)von bashoder mit der einfachen Funktion 'cat

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

oder

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

Das funktioniert:

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