kubectl 적용시 모든 파일의 환경 변수 대체

Jan 14 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

프로세스 대체 기능을 사용하거나 일반 ol '을 사용 하여 envsubst하나의 파일을 읽는 것처럼 표준 입력에서 여러 파일의 내용을 읽을 수 있습니다.< deploy.yaml<(..)bashcat

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