Sustituya la variable de entorno en todos los archivos cuando se aplique kubectl

Jan 14 2021

Digamos que tenemos varios archivos de configuración de Kubernetes en una carpeta kubernetesy queremos aplicarlos todos:

kubectl apply -f kubernetes -n MyNamespace

Algunos de estos archivos contienen variables de entorno que deben sustituirse primero (sin plantillas en Kubernetes). Por ejemplo, varios de los yamls de implementación contienen algo como:

image: myregistry.com/myrepo:$TAG

Para un solo archivo yaml, esto se puede hacer, por ejemplo, usando envsubst como este:

envsubst < deploy.yml | kubectl apply -f -

¿Cuál es la mejor manera de hacer estas sustituciones para todos los archivos yaml?

(Hacer un bucle sobre los archivos en la carpeta y llamar envsubstcomo se indicó anteriormente es una opción, pero sospecho que sería preferible pasar toda la carpeta kubectly no archivos individuales)

Respuestas

5 Inian Jan 13 2021 at 23:26

Puede dejar envsubstleer el contenido de varios archivos desde la entrada estándar como si estuviera leyendo un archivo, < deploy.yamlya sea utilizando la <(..)función de sustitución de procesos de basho utilizando simple ol 'cat

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

o

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

Esto funciona:

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