Заменить переменную среды во всех файлах при применении kubectl

Jan 13 2021

Допустим, у нас есть несколько файлов конфигурации 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а не отдельные файлы)

Ответы

5 Inian Jan 13 2021 at 23:26

Вы можете позволить envsubstчитать содержимое нескольких файлов со стандартного ввода, как если бы он читал один файл, < deploy.yamlлибо с использованием <(..)функции замены процесса, bashлибо с использованием простого ol 'cat

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

или же

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

Это работает:

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