반응형
Helm으로 2 tier webapp 배포 (종속성)에 이어지는 내용입니다.
지금까지 진행했던 결과인 현재 chart 구조
참고
-
[Helm] 2. Helm 차트 만들기 - 내장 객체/변수주입 우선순위/사용자 정의 변수 - KimDoubleB
-
Values 파일 - Helm docs
목표
front_dep, front_svc에 정의된 이름들을 sample-vote/values.yaml에 정의하고,
helm 설치 시 인자로 받을 수 있는 부분까지 해보겠습니다.
values.yaml
templetes의 여러 yaml 파일들에서 values.yaml에 정의된 변수들을 참조하게 할 수 있습니다.
환경에 따른 values 선택
helm install을 통해 배포하는 행위를 release라고 하며 release할 때 아래와 같이 values.yaml을 참조하게 할 수 있습니다.
-
helm install <chart-name> . -f values.yaml
위 명령줄은 아래 명령줄과 정확히 동일하게 동작합니다.
-
helm install <chart-name> .
values.yaml을 명시하지 않더라도 기본 네이밍인 values.yaml을 참조하게 됩니다.
만약 환경이 다른 values.yaml들이 필요하다면 아래와 같이 사용할 수 도 있습니다.
(Helm에 대해 여러개의 values.yaml 파일을 가질 수 있습니까? - wake-up-neo.com)
-
helm install <chart-name> . -f values-prod.yaml
-
helm install <chart-name> . -f values-qa.yaml
-
helm install <chart-name> . -f values-dev.yaml
또, 하위 chart가 존재하는 경우 기본으로는 최상위 chart를 참조하지만 각 하위 chart에 존재하는 values.yaml로 재정의 할 수 있는 것 같은데 이것도 확인 해봐야겠습니다.
(확인해봐야 할게 계속 나오네요.... ㅎㄷㄷ)
value 친구 _helpers
잠깐 _helpers가 무엇인지만 찾아보고 지나가겠습니다.
values.yaml과 더불어 templates/_helpers.tpl도 유동적인 값을 사용할 수 있는데요
values가 단순히 값만 처리하는 반면 _helpers는 문장을 반환 할 수 있다는 차이가 있습니다.
이는 일반적인 코딩언어에서 사용되는 define 과 동일한 방식으로,
helm에서는 약간의 함수처럼 사용되는 것 같습니다.
templetes의 yaml파일들에서 _helpers.tpl의 값을 사용할 때는 include 형식으로 가져다 쓰입니다.
yaml에서 사용된 _helpers.tpl의 값은 요렇게 동작 합니다.
selector:
{{- include "temp.selectorLabels" . | nindent 4 }} <-- <요 부분이>
<렌더링을 거치면 아래와 같은 형식으로 치환 됩니다.>
selector:
app.kubernetes.io/name: temp
app.kubernetes.io/instance: myAppName-temp
그 밖에도 _helpers에서는 if 문 사용이 가능하여 조건에 따라 다른 문장을 사용하도록 할 수 도 있습니다.
언능 value파일 사용해보고 _helpers 파일도 사용해봐야겠습니다.
values.yaml 작성 및 svc,pod yaml 파일에 적용
values.yaml 작성
front-end에서 사용 될 service와 pod 의 변수 값을 작성 합니다.
frontInfo:
app: vote-front
service:
type: LoadBalancer
port: 80
pod:
replicaCount: 1
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
resources:
request:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
containerPort: 80
azure-vote-front_svc.yaml 작성
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.frontInfo.app }}-svc
spec:
type: {{ .Values.frontInfo.service.type }}
ports:
- port: {{ .Values.frontInfo.service.port }}
selector:
app: {{ .Values.frontInfo.app }}
azure-vote-front_pod.yaml 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.frontInfo.app }}-pod
spec:
replicas: {{ .Values.frontInfo.pod.replicaCount }}
selector:
matchLabels:
app: {{ .Values.frontInfo.app }}
template:
metadata:
labels:
app: {{ .Values.frontInfo.app }}
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: {{ .Values.frontInfo.app }}-con
image: {{ .Values.frontInfo.pod.image }}
resources:
requests:
cpu: {{ .Values.frontInfo.pod.resources.request.cpu }}
memory: {{ .Values.frontInfo.pod.resources.request.memory }}
limits:
cpu: {{ .Values.frontInfo.pod.resources.limits.cpu }}
memory: {{ .Values.frontInfo.pod.resources.limits.memory }}
ports:
- containerPort: {{ .Values.frontInfo.pod.containerPort }}
env:
- name: REDIS
value: "azure-vote-back"
dry-run으로 렌더링 검사
helm install sample-vote . --dry-run --debug
내용이 길어 중간을 자르긴 했지만 정상적으로 렌더링 되었다는 결과도 받았고,
value를 적용 했던 svc, pod도 자세히 살펴보면 변수를 사용한 부분들에 값들로 바뀌어 있습니다.
vote-front-service
vote-front-pod
Helm Install
이제 AKS cluster에 배포 후 샘플앱 확인을 해보겠습니다.
helm install sample-vote .
pod
service
변수를 참조한 pod, service 네이밍 확인이 가능 하였고 앱도 정상 실행 되었습니다.
이쁘게도 잘 배포 되었네요
설치 했던 sample-vote release는 삭제하고 다음으로는 하위차트에서 변수 사용을 해보겠습니다.
helm uninstall sample-vote
반응형
LIST
'IT > Kubernetes' 카테고리의 다른 글
Pod 배포 컨트롤러 종류와 차이 (0) | 2023.04.17 |
---|---|
Helm으로 2 tier webapp 배포 (하위차트 변수) (1) | 2023.04.17 |
Helm으로 2 tier webapp 배포 (종속성) (1) | 2023.04.17 |
Helm으로 2 tier webapp 배포 (0) | 2023.04.17 |
Helm에 대해 알아보자 (1) | 2023.04.17 |