2017-11-15 3 views
0

바닐라 도커를 사용하거나 compose 또는 swarm 할 때 컨테이너의 환경 변수를 정의하기 위해 "-add-env FOO = bar"를 Docker cli 매개 변수로 전달할 수 있습니다 런타임에. 그러나 kubernetes에서는 컨테이너 스펙 섹션에서 .yml 파일의 값을 하드 코어하는 방법 만 볼 수 있습니다.런타임시 환경 변수를 kubernetes에 전달

런타임에 전달하는 방법을 알려줄 수 있습니까? (예 : "kubectl apply ..."를 사용할 때 env var 전달)

고마워요! 정말 도움을 주셔서 감사합니다!

안부,

+0

불행히도는 Kubernetes 그 @ 라덱 - 고블린 - pieczonka 언급 기본적으로 지원하지 않습니다

가장 간단한 사용 사례를 들어 당신은 envsubst를 사용할 수 있습니다. 두 답변 모두 그렇게 할 수 있으며 드래프트와 같은 여러 템플릿 엔진이 있지만 모두 매우 복잡합니다. 나는 꽤 빠르지 만 유효한 첫 번째 대답을 취할 것입니다. 다들 감사 해요. –

답변

1

나는 "실행"에 의해 실제로 생성/호출 적용 kubectl 때 의미 있다고 가정합니다. 불가능하지 않습니다.

대신 수행하려는 작업은 일부 템플릿 엔진을 통해 매니페스트를 실행하는 것입니다. 가장 간단하게 템플릿을 cat manifest | sed 's/PLACEHOLDER/VALUE/'과 같은 sed를 kubectl apply에 파이프하여 manifest에 적절하게 정의 된 ENV를 kubectl에 푸시되기 전에 대체되는 자리 표시 자 문자열로 연결할 수 있습니다. 좀 더 진보 된 솔루션과 내가 일반적으로 조언하는 것 중 하나는 예를 들어 실행할 수있는 조타 차트에 익숙해지는 것입니다. helm upgrade my-release --reuse-vars --set my.var=value

+0

그게 실망 스럽습니다 ... : ( –

+0

이것이'helm'이있는 이유입니다 :) 사실, 필자는 자신 만의 python/jinja2 솔루션을 사용하여 템플릿 자산을 훌륭하게 지원했지만, 합리적인, 그리고 단순한 templating 넘어 훨씬 간다 –

2

원하는 템플릿 언어를 사용하는 것은 매우 쉽습니다. 예를 들어 erb를 사용하면 erb deployment.erb.yaml | kubectl apply -f -을 사용할 수 있습니다. cat deployment.yaml | envsubst | kubectl apply -f -

관련 문제