연재 시리즈

Helm 시작하기 - 7편. Release Object사용

악분 2021. 11. 25. 00:08
반응형

 

7편에서는 Release Object를 사용하는 방법을 설명합니다.

영상에서는 25:35 ~ 29:45내용에 해당합니다.

https://youtu.be/ajcyC_6velc?t=1536 

 

1. 기존 차트의 문제점

기존 차트는 템플릿의 yaml파일의 이름(metadata.name)이 항상 동일합니다. 그러므로 동일한 helm차트를 helm install을 할 경우 이름이 중복되어 오류가 발생합니다.

 

2. Release Object란?

해결방법은 간단합니다. yaml파일의 이름(metadata.name)을 서로 다르게 하면 됩니다. helm에서는 default Object 또는 변수를 가지고 있습니다. 

 

helm 차트가 Release되면 해당 정보를 Release라는 Object에 저장합니다. 예를 들어 helm install helloworld로 차트를 release하면, Release Objectd의 name필드에 helloworld값이 저장되어 있습니다.

 

Releae Object이외에 기본으로 제공되는 Object를 Built-in(내장) Object라고 합니다. 공식문서에서 다양한 Built-in Object를 만나 볼 수 있습니다.

공식문서: https://helm.sh/docs/chart_template_guide/builtin_objects/

 

3. Relelase Object를 이용하여 템플릿 이름 변경

Release.name필드에는 Release 이름을 가지고 있습니다. 이 점을 이용하여 metadata.name 필드 값을 동적으로 변경할 수 있습니다.

 

templates/deployment.yaml을 아래와 같이 수정합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
  labels:
    app: {{ .Release.Name }}
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx
        image: {{ .Values.image }}
        ports:
        - containerPort: 80

 

template/service.yaml을 아래와 같이 수정합니다.

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}
spec:
  selector:
    app: {{ .Release.Name }}
  ports:
  - port: 80
    targetPort: 80
  type: NodePort

 

values.yaml파일 설정은 아래와 같습니다.

image: nginx:stable

 

4. helm 차트 Releae

helm install명령어로 helm 차트를 Releaes합니다. 그리고 kubectl get deploy,po,svc로 배포된 쿠버네티스 리소스이름을 확인해보세요. Release 이름이 쿠버네티스 리소스 이름 사용되고 있는 것을 확인할 수 있습니다.

helm install test ./
kubectl get deploy,po,svc

 

반응형