Sustituya la variable de entorno en todos los archivos cuando se aplique kubectl
Digamos que tenemos varios archivos de configuración de Kubernetes en una carpeta kubernetes
y 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 envsubst
como se indicó anteriormente es una opción, pero sospecho que sería preferible pasar toda la carpeta kubectl
y no archivos individuales)
Respuestas
Puede dejar envsubst
leer el contenido de varios archivos desde la entrada estándar como si estuviera leyendo un archivo, < deploy.yaml
ya sea utilizando la <(..)
función de sustitución de procesos de bash
o utilizando simple ol 'cat
envsubst < <(cat *.yaml) | kubectl apply -f -
o
cat *.yaml | envsubst - | kubectl apply -f -
Esto funciona:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done