Zastąp zmienną środowiskową we wszystkich plikach podczas stosowania kubectl

Jan 14 2021

Powiedzmy, że mamy kilka plików konfiguracyjnych Kubernetes w folderze kubernetesi chcemy je wszystkie zastosować:

kubectl apply -f kubernetes -n MyNamespace

Niektóre z tych plików zawierają zmienne środowiskowe, które należy najpierw podstawić (bez tworzenia szablonów w Kubernetes). Na przykład kilka yamli wdrożeniowych zawiera coś takiego:

image: myregistry.com/myrepo:$TAG

W przypadku pojedynczego pliku yaml można to zrobić np. Używając envsubst w następujący sposób:

envsubst < deploy.yml | kubectl apply -f -

Jaki jest najlepszy sposób na wykonanie tych podstawień dla wszystkich plików yaml?

(Zapętlenie po plikach w folderze i wywołanie envsubstjak powyżej to jedna z opcji, ale podejrzewam, że byłoby lepiej przekazać cały folder, kubectla nie poszczególne pliki)

Odpowiedzi

5 Inian Jan 13 2021 at 23:26

Możesz pozwolić envsubstczytać zawartość wielu plików ze standardowego wejścia tak, jakby czytał jeden plik < deploy.yamlużywając <(..)funkcji podstawiania procesu bashlub używając zwykłego ol 'cat

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

lub

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

To działa:

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