Sostituisci la variabile d'ambiente in tutti i file quando si applica kubectl

Jan 14 2021

Supponiamo di avere diversi file di configurazione di Kubernetes in una cartella kubernetese 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 envsubstcome sopra è un'opzione, ma sospetto che sarebbe preferibile passare l'intera cartella kubectle non i singoli file)

Risposte

5 Inian Jan 13 2021 at 23:26

Puoi lasciare envsubstleggere il contenuto di più file dall'input standard come se stesse leggendo un file < deploy.yamlutilizzando la <(..)funzione di sostituzione del processo basho usando il semplice ol 'cat

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

o

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

Funziona:

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