Substitua a variável de ambiente em todos os arquivos ao aplicar o kubectl

Jan 13 2021

Digamos que temos vários arquivos de configuração do Kubernetes em uma pasta kubernetese queremos aplicar todos eles:

kubectl apply -f kubernetes -n MyNamespace

Alguns desses arquivos contêm variáveis ​​de ambiente que precisam ser substituídas primeiro (sem modelos no Kubernetes). Por exemplo, vários yamls de implantação contêm algo como:

image: myregistry.com/myrepo:$TAG

Para um único arquivo yaml, isso pode ser feito, por exemplo, usando envsubst desta forma:

envsubst < deploy.yml | kubectl apply -f -

Qual é a melhor maneira de fazer essas substituições para todos os arquivos yaml?

(Repetir os arquivos na pasta e chamar envsubstcomo acima é uma opção, mas suspeito que seria preferível passar a pasta inteira kubectle não os arquivos individuais)

Respostas

5 Inian Jan 13 2021 at 23:26

Você pode deixar envsubstler o conteúdo de vários arquivos da entrada padrão como se estivesse lendo um arquivo < deploy.yamlusando o <(..)recurso de substituição de processo bashou usando o simplescat

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

ou

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

Isso funciona:

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