본문 바로가기

Helm (헬름)/Helm chart

Helm Chart Customizing - nginx - multi service

728x90
반응형

# Helm Chart를 구성하고 multi service로 활용하는 방법에 대해서 알아보자.

2023.03.09 - [Helm (헬름)/Helm chart] - Helm Chart Customizing - nginx

 

Helm Chart Customizing - nginx

# Helm Chart Customizing에 대해서 알아본다. Helm Chart를 활용하여 복잡한 리소스를 관리 할 수 있다. 일단 eks는 deployment.yaml 과 service.yaml 등 기본 리소스를 생성하기 위한 자원들이 존재하는데 이것들

may9noy.tistory.com

위의 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 리소스를 패키징하여 원격 레파지토리에서 배포 및 관리하는 방법 등에 대해서 알아보자.

728x90
반응형