Helm 스터디

2024. 4. 9. 14:13IT

1. Helm 이란?

  • 차트는 쿠버네티스의 리소스 yaml파일을 템플릿으로 만들고 메타정보파일 등을 압축한 파일
    아래와 같이 desployment와 service 두개의 yaml 파일들을 템플릿으로 그룹화 한것.
  • artifacthub 라는 곳에 헬름 차트의 저장소들이 있다. 해당 저장소에서 필요한 차트들을 다운 받고 사용
  • helm install을 통해 공통 설정을 쿠버네티스에 일괄 배포할 수 있다. 더불어 수정, 삭제도 쉽게 할 수 있다. helm으로 배포된 리소스만 수정하면 된다.

2. Helm 설치

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

chmod 700 get_helm.sh

./get_helm.sh

3. Helm 차트 생성

https://helm.sh/docs/topics/charts/#the-chart-file-structure

  • 파일을 설치하지 않고 다운로드 받아 보려면 helm pull chatrepo/chatname
    ex) helm pull signoz/signoz --version 0.37.1
  • templates
    • 쿠버네티스 오브젝트 설치들에 필요한 yaml 파일들을 모아둔 곳
  • Chart.yaml
    • helm 파트의 버전, 이름 등 메타 정보를 저장한 파일
    • 필수: apiVersion(chart API 버전), name(차트 이름), version(차트 버전)
    • ex) ps. (_)보다는 (-)을 사용하도록
    • apiVersion: v2 name: signoz version: 0.37.1
  • values.yaml
    • templates에 있는 yaml파일들을 동적으로 변경하고 싶을 때 사용하는 파일

4. Helm 차트 설치, 조회, 삭제

Repo 추가

helm repo add <release이름> <차트위치,깃헙주소>

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/

설치

  • helm install <release이름> <차트위치>
    ex) helm install ttt .
  • namespace 지정하지 않으면 default로 설정
  • ttt라는 helm 이름으로 설치가 되고 kubernetes에 해당 templates의 yaml파일들로 배포가 된다.

조회

  • helm list

삭제

  • helm delete <release이름>
  • helm delete ttt 를 통해 삭제할 경우 배포된 오브젝트들도 삭제가 된다.

5. Helm 차트 템플릿 값 동적 수정

  • 템플릿 yaml 파일을 외부에서 수정 (동적 수정) 가능
  • 해당 values.yaml을 사용하려면 templates의 yaml 파일의 내용에서 변수로 지정을 해야한다.
    {{ .Values.image }}
    values.yaml 파일에서 image라는 변수명의 값을 대입시킨다. 라는 뜻

5-1. Helm chart release 이름 변경

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test **-> {{ .Release.Name }}**
  labels:
    app: nginx-test **-> {{ .Release.Name }}**
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
  • metadata.name: nginx-test로 고정으로 설정되어 있기에 release는 1개만 가능
  • 위와 같이 {{ .Release.Name }} 으로 설정한 후 helm install t1 . 와 같이 배포를 하면 t1이라는 이름으로 설치가 되고
    helm install t2 . 로 배포하면 t1이라는 metadata.name을 갖는 오브젝트가 배포가 된다.

6. namespace 설정 & Release Object 사용

  • 특정 namespace에 템플릿을 배포할 수 있다., 단 namespace는 생성되어 있어야 한다.

helm install —namespace <namespace> <release 이름>

  • helm namespace 생성(helm install —-help)
    • helm install —create-namespace -n test t1 .

helm install -n test t1 . (-n 이라는 옵션으로 namespace를 지정할 수 있다.)

  • 조회
    • 전체 조회: helm list -A
    • 특정 네임스페이스 조회: helm list -n <namespace이름>
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test **-> {{ .Release.Name }}**
  namespace: test **-> {{ .Release.Namespace }}**
  labels:
    app: nginx-test **-> {{ .Release.Name }}**
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
  • yaml 파일에서 {{ .Release.Namespace }} 로 설정해야한다.

7. 디버깅 명령어

  • 현재 release의 정보를 확인
    • helm get all -n <namespace> <release>
    • (base) ➜ metrics-server helm get all -n kube-system metrics-server NAME: metrics-server LAST DEPLOYED: Fri Sep 8 05:35:03 2023 NAMESPACE: kube-system STATUS: deployed REVISION: 1 CHART: metrics-server VERSION: 3.11.0 APP_VERSION: 0.6.4 TEST SUITE: None USER-SUPPLIED VALUES: null
    • USER-SUPPLIED VALUES: null → 사용자가 설정한 값이 없다.
    • COMPUTED VALUES: 설정된 values 값들
    • MANIFEST: 설정한 값에 따른 파일들
  • 내가 작성한 차트가 문법에 맞게 작성되었는지 확인 (문법 체크)
    • helm lint
  • 내가 작성한 템플릿과 values.yaml 파일 값이 적용된 결과를 보고 싶으면? (적용된 스택 결과 확인)
    • helm template -n <namespace> <release> <chart>

8. values.yaml 오버라이딩

  • Helm 차트의 기존 values.yaml 파일의 일부 값을 변경하고 싶은 상황
    1. --set 사용
      • helm install —-set image=nginx:latest -n test latest .
    2. 파일에 교체할 필드와 값을 설정
      • helm install -f <파일경로> -n test latest .

9. Release 업그레이드

  • 기존에 배포된 helm release 내용을 변경 (ex. templates, values.yaml)
  1. values 변경 (set옵션 사용)
    • helm upgrade --set image=nginx:1.21.4 -n test v1 .
    • 해당 명령어를 사용하면 REVISION이 변경되는것을 확인할 수 있다.
  2. template 변경
    • 기존에 배포된 template/deployment.yaml 파일 변경 후 helm upgrade
    • 결과: template이 변경사항이 잘 적용된다.
    • helm upgrade -n <namespace이름> <차트이름> <차트경로>
  • 업그레이드 시나리오
    1. helm upgrade --set image=nginx:1.21.4 -n test v1 .
    2. template / deployment.yaml 수정 후
      helm upgrade -n test v1
    3. 이전 values.yaml을 가져온다. Helm chart values.yaml이 아니라
  • 주의 사항
    • helm upgrade하면 정책에 따라 pod가 재기동 된다. (ex. rollingupdate)
    • Helm3와 helm2의 upgrade 결과는 다르다. (helm3에서 동작하는게 helm2에서 동작안할 수 있다.)

10. Relase Rollback

  • 이전 release rollback
  • helm history RELEASE
  • helm rollback <RELEASE> [REVISION] [flags]
(base) ➜  test_helm_nginx helm list -A
NAME                        	NAMESPACE        	REVISION	UPDATED                                	STATUS  	CHART                             	APP VERSION
aws-cloudwatch-metrics      	amazon-cloudwatch	2       	2023-09-20 18:02:02.077875619 +0900 KST	deployed	aws-cloudwatch-metrics-0.0.9      	1.247350
aws-for-fluent-bit          	kube-system      	3       	2023-11-15 17:56:19.63650374 +0900 KST 	deployed	aws-for-fluent-bit-0.1.30         	2.31.11
aws-load-balancer-controller	kube-system      	1       	2023-09-04 05:54:43.070737423 +0000 UTC	deployed	aws-load-balancer-controller-1.6.0	v2.6.0
karpenter                   	karpenter        	6       	2023-11-16 12:55:47.424917205 +0900 KST	deployed	karpenter-v0.30.0                 	0.30.0
metrics-server              	kube-system      	1       	2023-09-08 05:35:03.75849154 +0000 UTC 	deployed	metrics-server-3.11.0             	0.6.4
my-release                  	platform         	1       	2024-03-05 09:54:54.034874 +0900 KST   	deployed	signoz-0.32.0                     	0.36.0
(base) ➜  test_helm_nginx helm history -n karpenter karpenter
REVISION	UPDATED                 	STATUS    	CHART            	APP VERSION	DESCRIPTION
1       	Thu Nov 16 12:10:31 2023	superseded	karpenter-v0.31.2	0.31.2     	A Helm chart to deploy Karpenter
2       	Thu Nov 16 12:13:18 2023	superseded	karpenter-v0.29.2	0.29.2     	A Helm chart to deploy Karpenter
3       	Thu Nov 16 12:15:57 2023	superseded	karpenter-v0.28.1	0.28.1     	A Helm chart to deploy Karpenter
4       	Thu Nov 16 12:17:33 2023	superseded	karpenter-v0.31.2	0.31.2     	A Helm chart to deploy Karpenter
5       	Thu Nov 16 12:52:29 2023	superseded	karpenter-v0.31.2	0.31.2     	A Helm chart to deploy Karpenter
6       	Thu Nov 16 12:55:47 2023	deployed  	karpenter-v0.30.0	0.30.0     	A Helm chart to deploy Karpenter
 

'IT' 카테고리의 다른 글

Terraform 설명2 (함수)  (0) 2024.04.09
Terraform 설명 1  (0) 2024.04.09
Static, Dynamic Page, JSP, Servlet  (0) 2024.04.09
[AWS] 질문  (0) 2024.04.09
[AWS] 리소스 현황파악 및 분석  (0) 2024.04.09