# Helm Chart를 구성하고 multi service로 활용하는 방법에 대해서 알아보자.
2023.03.09 - [Helm (헬름)/Helm chart] - Helm Chart Customizing - nginx
위의 url을 참고하여 nginx를 helm chart로 구성하는 방법에 대해서 설명이 되어 있다.
1. multi service 구성
- 서비스 환경은 values.yaml 파일을 여러 개로 만듦으로 손쉽게 서비스를 추가할 수 있다.
- 아래와 같은 디렉터리 구조로 구성하면 멀티서비스를 생성할 수 있다.
- values*.yaml 파일은 templates 폴더의 파일의 내용을 참조하여 리소스를 생성하므로 values*. yaml 파일만 추가함으로써 새로운 리소스 환경을 만들 수 있다.
- tree 로 폴더구조를 보면 아래와 같다.
- values-01.yaml 파일과 values.yaml 파일이 seung-helm-chart 폴더의 templates폴더 안에 있는 deployment.yaml 파일의 내용을 참조하여 리소스를 생성한다. values*. yaml 파일에는 변수가 저장되어 있고, deployment.yaml에는 해당 변수와 매칭되는 {{. Values.resource}} 정보로 구성되어 있다.
PS C:\> tree /f .\chart\
폴더 PATH의 목록입니다.
볼륨 일련 번호는 2E4E-BB8F입니다.
C:\CHART
│ values-01.yaml
│ values.yaml
│
└─seung-helm-chart
│ .helmignore
│ Chart.yaml
│
├─charts
└─templates
deployment.yaml
_helpers.tpl
2. values*.yaml 파일의 내용을 보면 아래와 같다.
- values.yaml
name: "nginx"
replicas: 3
label: nginx-label
image: "nginx:1.14.2"
namespace: "nginx"
- values-01.yaml
name: "nginx-01"
replicas: 2
label: nginx-label
image: "nginx:1.14.2"
namespace: "nginx-01"
3. 변경된 내용 적용하기
PS C:\chart> helm install -f .\values-01.yaml helm-chart-ver-11 .\seung-helm-chart\
NAME: helm-chart-ver-11
LAST DEPLOYED: Thu Mar 9 16:15:44 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
4. helm 배포 리소스 확인하기
- 명령어 : helm ls
PS C:\chart> helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
helm-chart-ver-01 default 1 2023-03-09 16:13:38.0669352 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
helm-chart-ver-11 default 1 2023-03-09 16:15:44.064853 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart default 1 2023-03-09 15:25:21.2056473 +0900 KST failed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart-deploy default 1 2023-03-09 15:25:56.9692852 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
- pod 확인 (namespace 별)
- 명령어 : kubectl get pod -n {namespace_name}
PS C:\chart> kubectl get pod -n nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-864cc6bbb8-qtxhm 1/1 Running 0 68m
nginx-deployment-864cc6bbb8-vqlc4 1/1 Running 0 68m
nginx-deployment-864cc6bbb8-w9twz 1/1 Running 0 68m
PS C:\chart> kubectl get pod -n nginx-01
NAME READY STATUS RESTARTS AGE
nginx-deployment-864cc6bbb8-hb8wf 1/1 Running 0 19m
nginx-deployment-864cc6bbb8-vcfsf 1/1 Running 0 19m
nginx-deployment-864cc6bbb8-xd8p5 1/1 Running 0 19m
5. 서비스 업그레이드 하기
Helm을 사용할 경우 편리한 점이 두 가지 정도 존재한다. 첫 번째는 yaml 파일 커스터마이징 용이성과 바로 Revision 관리의 용이성이다. 기존에는 yaml 파일의 변경 시 revision을 관리하기 위해 파일 백업 및 rename을 하거나 git history를 기반으로 코드를 확인해서 적용해야 했지만, heml은 이와 같은 과정을 간편화 하는 기능을 제공한다.
바로 helm history 기능과 helm upgrade 기능이다.
- 일단 helm 리소스를 배포하면 아래와 같이 revision을 확인할 수 있는데 아래와 같이 1을 확인할 수 있다.
PS C:\chart> helm install -f .\values-01.yaml helm-chart-ver-11 .\seung-helm-chart\
NAME: helm-chart-ver-11
LAST DEPLOYED: Thu Mar 9 16:15:44 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
- revision을 2로 변경하기
values-01.yaml 파일의 정보를 변경해보자.
- 기존 values-01.yaml의 replicas의 개수는 3 이로 설정이 되어 있다. 이것을 아래와 같이 1로 변경해 보자. 그리고 저장한다.
name: "nginx"
replicas: 1
label: nginx-label
image: "nginx:1.14.2"
namespace: "nginx-01"
- 반영을 한다.
반영은 upgrade -f 명령어를 통해 진행을 한다.
적용 명령어 : helm upgrade -f.\values-01.yaml helm-chart-ver-11.\seung-helm-chart\ --description replicas1
PS C:\chart> helm upgrade -f .\values-01.yaml helm-chart-ver-11 .\seung-helm-chart\ --description replicas1
Release "helm-chart-ver-11" has been upgraded. Happy Helming!
NAME: helm-chart-ver-11
LAST DEPLOYED: Thu Mar 9 16:57:59 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
PS C:\chart>
위와 같이 upgrade 명령어를 통해 helm을 업그레이드하면 Revision 번호가 업데이트되는 것을 확인할 수 있다.
여기서 --description 옵션을 볼 수 있는데 이는 이후에 리소스를 잘 못 반영시 롤백을 할 경우 유용하게 사용되기 때문에 반드시 함께 작성을 하는 것을 추천한다.
- pod개수를 확인해 보면 아래와 같이 1개의 pod만 기동 되고 있는 것을 확인할 수 있다.
PS C:\chart> kubectl get pod -n nginx-01
NAME READY STATUS RESTARTS AGE
nginx-deployment-864cc6bbb8-vcfsf 1/1 Running 0 44m
6. helm history 알아보기
- helm history에 대해서 잠시 알아보고 넘어간다.
명령어에도 나타나 있듯이 history에 대한 정보를 담고 있는데 helm 리소스 반영 name을 기반으로 helm history가 기록이 된다.
- helm history를 조회하는 방법은 아래와 같다.
helm list 명령어를 통해 현재 helm 배포 리스트를 확인할 수 있다.
여기서 helm 배포 리스트 중의 history를 확인하는 명령어는 아래와 같다.
helm history helm-chart-ver-11 → history의 DESCRIPTION을 보면 위에서 리소스 변경 시 등록한 Description 내용이 기록되어 있는 것을 확인할 수 있다. 해당 정보를 기반으로 Rollback을 할 수 있으므로, 주의 깊게 확인해야 한다.
PS C:\chart> helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
helm-chart-ver-01 default 1 2023-03-09 16:13:38.0669352 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
helm-chart-ver-11 default 2 2023-03-09 16:57:59.0125377 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart default 1 2023-03-09 15:25:21.2056473 +0900 KST failed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart-deploy default 1 2023-03-09 15:25:56.9692852 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
PS C:\chart> helm history helm-chart-ver-11
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Mar 9 16:15:44 2023 superseded seung-helm-chart-0.1.0 1.16.0 Install complete
2 Thu Mar 9 16:57:59 2023 deployed seung-helm-chart-0.1.0 1.16.0 replicas1
7. Helm Rollbak (롤백)
- helm 롤백에 대해서 알아보자.
위에서 helm upgrade를 할 때 description 옵션을 반드시 입력해야 한다고 강조하였는데 그 이유는 롤백 시 매우 유용하게 활용되기 때문이다.
- 일단 현재의 history 정보를 통해 해당 helm 리소스의 history 정보를 확인할 수 있다.
PS C:\chart> helm history helm-chart-ver-11
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Mar 9 16:15:44 2023 superseded seung-helm-chart-0.1.0 1.16.0 Install complete
2 Thu Mar 9 16:57:59 2023 deployed seung-helm-chart-0.1.0 1.16.0 replicas1
- 롤백을 수행하기
명령어 : helm rollback {deploy_name} {revision_number}
PS C:\chart> helm rollback helm-chart-ver-11 1
Rollback was a success! Happy Helming!
- 이전에 replicas 수를 1개로 수정하고 배포를 진행하였다. 그리고 롤백을 수행하고 pod 리소스를 확인해 보면 아래와 같다. 3개의 pod가 다시 복구된 것을 확인할 수 있다. history로 확인한 revision 버전 1로 리소스가 복구된 것을 확인 할 수 있다.
PS C:\chart> kubectl get pod -n nginx-01
NAME READY STATUS RESTARTS AGE
nginx-deployment-864cc6bbb8-mwv8v 1/1 Running 0 55s
nginx-deployment-864cc6bbb8-vcfsf 1/1 Running 0 54m
nginx-deployment-864cc6bbb8-vcv4w 1/1 Running 0 55s
- 마지막으로 helm history {deploy_name}으로 history 정보를 다시 확인하자.
롤백 정보도 REVISION 정보로 반영되어 3으로 변경된 것을 확인할 수 있다.
PS C:\chart> helm history helm-chart-ver-11
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Mar 9 16:15:44 2023 superseded seung-helm-chart-0.1.0 1.16.0 Install complete
2 Thu Mar 9 16:57:59 2023 superseded seung-helm-chart-0.1.0 1.16.0 replicas1
3 Thu Mar 9 17:09:40 2023 deployed seung-helm-chart-0.1.0 1.16.0 Rollback to 1
8. helm delete를 활용한 리소스 삭제하기
- 현재까지 반영한 리소스를 모두 제거하는 방법에 대해서 알아본다.
기본 명령어 : helm delete {deploy_name}
- 일단 status가 failed인 리소스부터 삭제를 하면 아래와 같다.
PS C:\chart> helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
helm-chart-ver-01 default 1 2023-03-09 16:13:38.0669352 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
helm-chart-ver-11 default 3 2023-03-09 17:09:40.0966878 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart default 1 2023-03-09 15:25:21.2056473 +0900 KST failed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart-deploy default 1 2023-03-09 15:25:56.9692852 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
PS C:\chart> helm delete seung-helm-chart
release "seung-helm-chart" uninstalled
PS C:\chart> helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
helm-chart-ver-01 default 1 2023-03-09 16:13:38.0669352 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
helm-chart-ver-11 default 3 2023-03-09 17:09:40.0966878 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
seung-helm-chart-deploy default 1 2023-03-09 15:25:56.9692852 +0900 KST deployed seung-helm-chart-0.1.0 1.16.0
- namespace가 nginx로 생성한 리소스 삭제
PS C:\chart> helm delete helm-chart-ver-01
release "helm-chart-ver-01" uninstalled
- pod 확인, 정상 삭제 확인
PS C:\chart> kubectl get pod -n nginx
No resources found in nginx namespace.
- 이제 namespace가 nginx-01로 생성된 pod 리소스 삭제
PS C:\chart> helm delete helm-chart-ver-11
release "helm-chart-ver-11" uninstalled
- pod 확인, 정상 삭제 확인
PS C:\chart> kubectl get pod -n nginx-01
No resources found in nginx-01 namespace.
- pod, svc, ingress 등 helm으로 구성한 리소스는 모두 삭제된 것을 확인하였다.
- 지금까지 helm을 배포하기 위한 리소스를 생성, customizing 후 eks에 배포 그리고 helm 리소스 업그레이드 및 helm 리소스 삭제등 전반적인 작업에 대해 알아보았다.
다음은 helm 리소스를 패키징하여 원격 레파지토리에서 배포 및 관리하는 방법 등에 대해서 알아보자.
'Helm (헬름) > Helm chart' 카테고리의 다른 글
Helm 차트를 사용하여 Kubernetes 애플리케이션을 패키징, 구성 및 배포 (0) | 2024.08.21 |
---|---|
Helm Chart Customizing - nginx (0) | 2023.03.09 |
Terraform으로 EKS 클러스터 생성 및 HELM Chart로 리소스 구현 (0) | 2023.03.08 |
helm chart 설치 오류 해결하기 (0) | 2023.03.08 |
helm 원격 리포지토리 (Repository) (0) | 2023.02.21 |