Helm 스터디
2024. 4. 9. 14:13ㆍIT
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 파일의 일부 값을 변경하고 싶은 상황
- --set 사용
- helm install —-set image=nginx:latest -n test latest .
- 파일에 교체할 필드와 값을 설정
- helm install -f <파일경로> -n test latest .
- --set 사용
9. Release 업그레이드
- 기존에 배포된 helm release 내용을 변경 (ex. templates, values.yaml)
- values 변경 (set옵션 사용)
- helm upgrade --set image=nginx:1.21.4 -n test v1 .
- 해당 명령어를 사용하면 REVISION이 변경되는것을 확인할 수 있다.
- template 변경
- 기존에 배포된 template/deployment.yaml 파일 변경 후 helm upgrade
- 결과: template이 변경사항이 잘 적용된다.
- helm upgrade -n <namespace이름> <차트이름> <차트경로>
- 업그레이드 시나리오
- helm upgrade --set image=nginx:1.21.4 -n test v1 .
- template / deployment.yaml 수정 후
helm upgrade -n test v1 - 이전 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 |