Helm의 필요성
쿠버네티스 환경에서 yaml 파일이 너무 많아지면 이 파일들을 하나하나 관리하는 것은 힘들다.
그래서 yaml 파일들을 묶어서 관리하고 템플릿 문법을 이용해서 동적으로 yaml 파일을 생성하도록 도와주는 것이 Helm이다.
Helm에서의 차트란?
차트란 위의 파일들을 한데 묶어서 표현한 것을 말한다.
Chart.yaml에는 Helm에 대한 버전과 내가 배포할 차트의 버전을 적는다.
templates에는 yaml 파일들이 들어간다.
values.yaml에는 templates에 있는 yaml에 필요한 환경 변수들을 등록해둘 수 있다.
Helm 차트는 일반적으로 .tgz 또는 .tar.gz 형식으로 압축된다.
Helm은 이러한 압축된 차트를 설치할 수 있다.
helm package my-test-helm
helm install my-test-helm ./my-test-helm-0.1.0.tgz
다만, 위와 같이 압축되지 않은 차트 디렉터리도 굳이 압축하지 않아도 설치할 수 있다.
이 경우 Helm은 디렉터리 내의 모든 파일을 차트로 처리한다.
Helm 설치
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get-helm-3 > get_helm.sh
chmod +x get_helm.sh
./get_helm.sh
Helm을 이용하는 방법은 온라인 차트와 내가 직접 차트를 만들어서 이용하는 방법 2가지가 있다.
온라인 차트 이용하기
온라인에 올라와있는 Helm 차트를 이용해보자.
1. 온라인 Helm Chart Repository 등록
helm repo add bitnami https://charts.bitnami.com/bitnami
2. 등록된 Repository 확인
helm repo list
3. 해당 Repository에서 설치할 수 있는 차트 목록 확인
helm search repo bitnami
helm search repo bitnami/nginx
4. 해당 Repository에 있는 차트 설치
helm install my-nginx bitnami/nginx --version 15.4.0
5. helm install 명령어로 만들어진 차트 확인하기
helm list
내 차트 만들어서 이용하기
helm create my-test-chart
위의 명령어를 입력하면 현재 내가 위치한 경로에 my-test-chart라는 폴더를 만들고 내부에 chart 샘플 파일들을 만들어둔다.
하지만 처음에는 이 샘플 파일들이 복잡하게 생겨서 오히려 어려울 수 있으니 수동으로 직접 만들어서 테스트해보는 것이 좋다.
위에 있는 파일을 수동으로 만들어주자.
1. Chart.yaml
Chart.yaml에는 helm에 대한 버전과 현재 내가 배포하고 있는 helm에 대한 버전을 시맨틱 버저닝을 사용해서 적어준다.
apiVersion: v2
name: my-test-helm
version: 0.0.1
2. templates
여기에는 내가 원하는 Pod, Deploy, Service에 관한 yaml파일을 넣어준다.
예시 파일이 없다면 아래의 소스를 사용하자.
kubectl run nginx --image=nginx --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
3. values.yaml
당장은 values를 이용하지 않아도 되니 아무 내용도 집어넣지 않는다.
4. 차트가 있는 경로에서 아래 명령어 입력
helm install helm-test .
5. helm install 명령어로 만들어진 차트 확인하기
helm list
6. 만들어진 차트 지우기
helm delete helm-test
템플릿 문법 이용하기
Values.yaml 파일 이용하기
이제 yaml 파일에 템플릿 문법을 이용해보자.
pod yaml 파일에 {{ .Values.image }} 이렇게 입력한 뒤에 values.yaml에 image: nginx:latest 라고 입력하면 values.yaml에 있는 변수가 yaml 파일에 삽입되어서 실행된다.
혹은 Values.yaml에 적힌 변수들을 오버라이드해서 아래와 같이 다른 값으로 이용할 수도 있다.
helm install —-set image=nginx:latest
--set이 아닌 다른 value 파일을 엎어서 사용할 수도 있다.
helm install -f 파일경로
Release Template 문법
위의 값들이 정적이었다면 동적으로 변경 가능한 값을 위해 Release Template 문법도 존재한다.
{{ .Release.Name }}
이라고 적은 뒤에
helm install helm-v1 .
이렇게 설치하면 이 helm-v1 이름이 Release.Name으로 들어가게된다.
Release Template 문법이 대표적으로 쓰이는 것이 네임스페이스다.
helm install t1 . -n my-namespace
위와 같이 네임스페이스를 지정하고 싶을 경우 해당 네임스페이스에 바로 배포되는게 아니라
{{ .Release.Namespace }} 로 지정해줘야한다.
배포된 차트 조회하기
helm list -n test
helm list -A
배포된 차트를 조회할 때도 kubectl 처럼 namespace를 지정해야한다.
Helm 디버깅
helm lint
템플릿 문법의 오류를 찾아준다.
helm get all
쿠버네티스 클러스터에 설치된 모든 릴리스에 대한 정보를 출력하는 명령어
helm template
어떤 yaml 파일에 value들을 적용하여 배포할지 미리 볼 수 있다.
Helm 업그레이드와 롤백
helm upgrade —set image=nginx:1.21.4 -n test v1 .
이렇게하면 upgrade 된다.
yaml 파일이 수정된 것도 upgrade 된다.
롤백은 helm rollback 을 하면된다.
이것에 대한 결과물을 보기 위해서는
helm history로 확인하자.
'☸️ Kubernetes' 카테고리의 다른 글
[kubernetes] ConfigMap과 Security (0) | 2023.12.04 |
---|---|
[Kubernetes] Logging 알아보기 (1) | 2023.11.30 |
[kubernetes] SC에 대한 개념 이해하기 (0) | 2023.11.30 |
[kubernetes] PV, PVC를 Pod에 연결하기 (0) | 2023.11.30 |
[kubernetes] Service Account와 Token (0) | 2023.10.27 |