Zastąp zmienną środowiskową we wszystkich plikach podczas stosowania kubectl
Powiedzmy, że mamy kilka plików konfiguracyjnych Kubernetes w folderze kubernetes
i 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 envsubst
jak powyżej to jedna z opcji, ale podejrzewam, że byłoby lepiej przekazać cały folder, kubectl
a nie poszczególne pliki)
Odpowiedzi
Możesz pozwolić envsubst
czytać zawartość wielu plików ze standardowego wejścia tak, jakby czytał jeden plik < deploy.yaml
używając <(..)
funkcji podstawiania procesu bash
lub używając zwykłego ol 'cat
envsubst < <(cat *.yaml) | kubectl apply -f -
lub
cat *.yaml | envsubst - | kubectl apply -f -
To działa:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done