Substitua a variável de ambiente em todos os arquivos ao aplicar o kubectl
Digamos que temos vários arquivos de configuração do Kubernetes em uma pasta kubernetes
e 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 envsubst
como acima é uma opção, mas suspeito que seria preferível passar a pasta inteira kubectl
e não os arquivos individuais)
Respostas
Você pode deixar envsubst
ler o conteúdo de vários arquivos da entrada padrão como se estivesse lendo um arquivo < deploy.yaml
usando o <(..)
recurso de substituição de processo bash
ou usando o simplescat
envsubst < <(cat *.yaml) | kubectl apply -f -
ou
cat *.yaml | envsubst - | kubectl apply -f -
Isso funciona:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done