Sostituisci la variabile d'ambiente in tutti i file quando si applica kubectl
Supponiamo di avere diversi file di configurazione di Kubernetes in una cartella kubernetes
e di volerli applicare tutti:
kubectl apply -f kubernetes -n MyNamespace
Alcuni di questi file contengono variabili di ambiente che devono essere sostituite prima (nessun modello in Kubernetes). Ad esempio, molti degli yaml di distribuzione contengono qualcosa di simile:
image: myregistry.com/myrepo:$TAG
Per un singolo file yaml, questo può essere fatto ad esempio usando envsubst in questo modo:
envsubst < deploy.yml | kubectl apply -f -
Qual è il modo migliore per eseguire queste sostituzioni per tutti i file yaml?
(Il ciclo dei file nella cartella e la chiamata envsubst
come sopra è un'opzione, ma sospetto che sarebbe preferibile passare l'intera cartella kubectl
e non i singoli file)
Risposte
Puoi lasciare envsubst
leggere il contenuto di più file dall'input standard come se stesse leggendo un file < deploy.yaml
utilizzando la <(..)
funzione di sostituzione del processo bash
o usando il semplice ol 'cat
envsubst < <(cat *.yaml) | kubectl apply -f -
o
cat *.yaml | envsubst - | kubectl apply -f -
Funziona:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done