Ersetzen Sie die Umgebungsvariable in allen Dateien, wenn kubectl angewendet wird
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
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 -
Das funktioniert:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done