Заменить переменную среды во всех файлах при применении kubectl
Допустим, у нас есть несколько файлов конфигурации Kubernetes в папке, kubernetes
и мы хотим применить их все:
kubectl apply -f kubernetes -n MyNamespace
Некоторые из этих файлов содержат переменные среды, которые необходимо сначала подставить ( в Kubernetes нет шаблонов ). Например, некоторые из yaml-ов развертывания содержат что-то вроде:
image: myregistry.com/myrepo:$TAG
Для одного файла yaml это можно сделать, например, используя envsubst следующим образом:
envsubst < deploy.yml | kubectl apply -f -
Как лучше всего выполнить эти замены для всех файлов yaml?
( envsubst
Один из вариантов - перебирать файлы в папке и вызывать, как указано выше, но я подозреваю, что было бы предпочтительнее передавать всю папку, kubectl
а не отдельные файлы)
Ответы
Вы можете позволить envsubst
читать содержимое нескольких файлов со стандартного ввода, как если бы он читал один файл, < deploy.yaml
либо с использованием <(..)
функции замены процесса, bash
либо с использованием простого ol 'cat
envsubst < <(cat *.yaml) | kubectl apply -f -
или же
cat *.yaml | envsubst - | kubectl apply -f -
Это работает:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done