2017-12-13 19 views
2

Helm 차트는 서비스의 정규화 된 이름을 만드는 데 사용되는 _helpers.tpl의 도우미 템플릿을 정의합니다. 서비스 (DNS) 이름에 대한 템플릿의 표준 양식은 : subchart로 PostgreSQL의를 사용하여, 당신은 어떻게 그것을 참조하는 DNS 기반 서비스의 검색을 사용하기로되어있다올바른 컨텍스트를 사용하여 하위 차트에서 조종 장치 '도우미'템플릿을 어떻게 호출 할 수 있습니까?

{{- define "postgresql.fullname" -}} 
{{- $name := default .Chart.Name .Values.nameOverride -}} 
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 
{{- end -}} 

경우? 일반적인 패턴은 하위 차트 헬퍼를 부모 차트로 복사하는 것입니다.

{{- define "keycloak.postgresql.fullname" -}} 
{{- $name := default "postgresql" .Values.postgresql.nameOverride -}} 
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 
{{- end -}} 

이것은 분명한 이유 때문에 총 광기입니다!

확실히 하위 차트 도우미를 사용하는 더 좋은 방법이 있습니까?

value: {{ template "postgresql.fullname" ({Chart: {Name: 'not-used'}, Release: {Name: .Release.Name}, Values: { nameOverride: .Values.postgresql.nameOverride}}) }} 

는 슬프게도 나는 실제로 동적으로 컨텍스트를 만드는 방법 아무 생각이 : 당신이 컨텍스트 개체를 만들 수 있다면 같은 그것을 호출 할 수있을 것입니다. 도우미 함수가 새로운 속성을 참조하도록 변경되었지만 분명한 방법으로 변경되면 여전히 중단됩니다.

또는 다른 방법으로 하위 차트에서 서비스 이름을 사용할 수 있습니까?

답변

0

어쨌든 이것은 매우 간단합니다.

여기에 무슨 일이 벌어지고 있는지 생각해 보면 실습을 따르고 있으며 템플릿을 사용하는 것이 가능하다고 생각합니다.

연습은 "차트는 기본적으로 작동합니다"- 서브 차트 든 독립형이든 상관없이 작동해야합니다. 이것은 전개하고 참조하는 자원의 이름 공간을 올바르게 구성하기 위해 구성해야하는 것에 영향을 미칩니다.

나는, 매우 비슷한 문제를 가지고 볼 How to reference a value defined in a template in a sub-chart in helm for kubernetes?

이 내 "솔루션"내 자신의 _helpers.tpl에 postgres.fullname를 다시 정의하는 것입니다 : 릴리스 이름부터

{{- define "postgresql.fullname" -}} 
{{- $name := printf "%s-%s" .Values.global.appId .Values.global.fkNameId -}} 
{{- printf "%s-%s" $name "postgresql" | trunc 63 | trimSuffix "-" -}} 
{{- end -}} 

해야 틸러 설치마다 고유해야하며 클러스터에 하나의 틸러가 있습니다. 참조 이름 및 자체 명명 규칙의 일부로 릴리스 이름을 사용하는 데는 다소 거리가 있습니다.

템플릿의 정의는 전역입니다.

{{- define "postgresql.fullname" -}} 
{{- $name := printf "%s-%s" .Values.global.appId .Values.global.fkNameId -}} 
{{- printf "%s-%s" $name "postgresql" | trunc 63 | trimSuffix "-" -}} 
{{- end -}} 

내가 인터넷 쇼핑몰 서비스 - 인터넷 쇼핑몰 "(서비스 이름을 복제하지 않을 릴리스 이름으로 올 수없는 : 당신이 기본적으로 릴리스 이름 접두어 좋은 있다면 그래서 당신은 단지 포스트 그레스 차트들을 사용할 수 있습니다 -service ") 그래서 필자는 틸러 인스턴스가 아닌 네임 스페이스 당 필요하기 때문에 사용하지 않는 경향이 있습니다.

하위 차트에서 이름을 정의하면 서비스에서 참조됩니다. 나는 내가 챠트를 참조하고 이름을 위해 무엇을 사용 하는지를 알기 때문에 그 점에 대해 잘 알고있다. 그러나 사실 : 하위 차트를 업그레이드해야합니까? 이름이 같은지 확인해야합니다. 그러나 그 "fullname"이 꽤 일반적이어서 나는 좋다. 그리고 일부 테스트는 어쨌든 실패합니다.

하지만 아름다운 "해결책"은 아닙니다.

되지 않음 대답

- (나는 그렇게 생각하지 않습니다하지만) 내가 나쁜 관행을 분출 할 수 있도록 나를 위해 단지 충분히 좋은 :)

0

나는 투구 매우 녹색입니다. 내가 아는 바로는 이름이 지정된 템플릿은 모든 부모 및 하위 차트에서 사용할 수 있습니다. 그러나 이것은 가치에 대해서는 사실이 아닙니다. 부모 값에는 하위 차트에서 액세스 할 수 없지만 하위 차트 값에는 부모가 액세스 할 수 있습니다. https://docs.helm.sh/chart_template_guide/#declaring-and-using-templates-with-define-and-template에서 인용

...

"템플릿의 이름을 지정할 때 한 가지 유념해야 할 정말 중요한 세부 사항이있다 :. 템플릿 이름은 전역 당신이 마지막 의지를로드 중 한 같은 이름을 가진 두 개의 템플릿을 선언하는 경우 하위 차트의 템플릿은 최상위 템플릿과 함께 컴파일되므로 차트 이름으로 템플릿 이름을 지정해야합니다. "

참조 :
https://docs.helm.sh/chart_template_guide/#named-templates https://docs.helm.sh/chart_template_guide/#subcharts-and-global-values