본문 바로가기

Helm (헬름)/Helm chart

Terraform으로 EKS 클러스터 생성 및 HELM Chart로 리소스 구현

728x90
반응형

# Terraform으로 EKS 클러스터 생성 및 HELM Chart를 활용하여 리소스 생성

- 구성도는 아래와 같다.

Terraform_EKS_HELM_Chart_Basic.drawio
0.00MB

1. eks 클러스터를 iac 코드인 Terraform을 활용하여 생성

2023.03.06 - [Terraform(테라폼)/Terraform-EKS] - Terraform을 활용한 EKS 클러스터 설계

 

Terraform을 활용한 EKS 클러스터 설계

# Terraform을 활용한 EKS 설계... - 일단 Terraform을 활용해서 EKS 클러스터까지 구성을 하였는데, 소감은 복잡하다. 아직 Terraform을 완벽히 숙지하지 못한 부분도 있겠지만, 리소스 영역이 확립이 안돼

may9noy.tistory.com

2. HELM Chart 생성하기

2023.02.20 - [Helm (헬름)/Helm] - Helm Chart 만들기 for kubernetes

 

Helm Chart 만들기 for kubernetes

# 간단한 Helm Chart를 생성하여 k8s 에 배포하는 작업을 해보자. - k8s에서 수정한 코드를 배포하고 적용하는데 수분의 시간을 필요로 한다. 이유는 CI/CD를 태워야 하고, 해당 코드가 빌드가 되고 배

may9noy.tistory.com

- 위의 링크에서 1번까지의 과정만 수행한다.

3. HELM Chart 생성하기

- 위의 링크에서 생성 방법을 알아보았고, 여기에서 EKS_Resource라는 폴더를 helm create 명령어를 활용하여 생성한다.

hecl create EKS_Resource

- 폴더구조 확인하기 : 명령어 = tree /f {폴더명}

PS C:\HELM Chart> tree /f .\EKS_Resource\
폴더 PATH의 목록입니다.
볼륨 일련 번호는 2E4E-BB8F입니다.
C:\HELM CHART\EKS_RESOURCE
│  .helmignore
│  Chart.yaml
│  values.yaml
│
├─charts
└─templates
    │  deployment.yaml
    │  hpa.yaml
    │  ingress.yaml
    │  NOTES.txt
    │  service.yaml
    │  serviceaccount.yaml
    │  _helpers.tpl
    │
    └─tests
            test-connection.yaml

- 주요 파일 설명

Chart.yaml:  차트에 대한 이름, 버전, 설명등이 정의되어 있다. 

charts/ : chart 압축 파일들이 존재하는 디렉토리로  chart에서 사용하는 종속 chart들이 압축파일(tgz)로 존재.

helm dep up 명령 수행시 requirements.yaml을 참조하여 repository에서 다운로드하여 생성된다.

templates/: manifest 파일들이 들어있는 디렉토리이다.

values.yaml: 기본으로 제공되는 값으로 templates/의 manifest파일들에서 참조하여 리소스를 생성한다.

4. 리소스 추가하기

- templates 폴더에 test.yaml을 추가하고 리소스를 생성하기 위한 코드를 아래와 같이 입력한다.

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test-pod
  name: {{.Values.podname}}
spec:
  containers:
  - command:
    - sleep
    - "1000"
    image: busybox
    name: test-pod
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

- 위의 코드를 보면 알겠지만, {{. values.podname}} 이 values.yaml에 해당 값을 미리 정해놓고 실행하면 위의 정의된 코드로 pod가 생성이 된다.

- \HELM Chart\EKS_Resource\values.yaml 파일에 podname: 'test-pod-name-seung'이라고 추가하고 저장한다.

podname: 'test-pod-name-seung'

- 해당 리소스 문법에 이상이 있는지 검사

helm lint .\EKS_Resource\
==> Linting .\EKS_Resource\
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

- dry-run 명령어를 통해 실제로 클러스터에 배포하지 않고, 어떤 형태로 리소스가 생성되는지 확인한다.

helm install test .\EKS_Resource\ --dry-run

- 아래의 코드에서 metadata.name을 보면 values.yaml 파일에 지정한 값 (test-pod-name)이 추가된 것을 확인할 수 있다.

PS C:\HELM Chart> helm install test .\EKS_Resource\ --dry-run
NAME: test
LAST DEPLOYED: Tue Mar  7 16:39:23 2023
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: EKS_Resource/templates/test.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test-pod
  name: test-pod-name-seung
spec:
  containers:
  - command:
    - sleep
    - "1000"
    image: busybox
    name: test-pod
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=EKS_Resource,app.kubernetes.io/instance=test" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

5. 원격 레파지토리를 등록해서 사용해 보자. (gitlab 레파지토리 사용)

- Chart 패키징 하기

helm 레포지토리에는 helm Chart가 들어가는 게 아니라 위의 차트를 패키징 한 tgz 파일이 들어간다. 한마디로 tgz로 압축한 파일이 들어간다고 보면 된다.

helm package EKS_Resource

- 결과 화면

helm package EKS_Resource
Successfully packaged chart and saved it to: C:\HELM Chart\EKS_Resource-0.1.0.tgz

- github 레포지토리 생성 및 등록

github에서 레포지토리를 신규로 생성하고 아래의 링크를 참고하여, master 브랜치를 생성 및 파일 1개를 커밋과 푸시를 해준다.

2021.07.08 - [Git/Git & Git Hub] - Github 업로드 방법

 

Github 업로드 방법

1. 깃 저장 폴더로 이동 → git init 2. 파일 추가 → git add . 3. git commit -m "처음 저장소에 올림" 4. git branch - M main # 존재 하고 있다고 나옴, 실행 안해도 됨. 5. git remote add origin https://github.com/Nanninggu/gi

may9noy.tistory.com

- 그리고 해당 레파지토리의 왼쪽 메뉴의 Pages에서 아래의 설정과 동일하게 https로 접근이 가능하도록 설정한다.

6. 생성한 차트 파일을 git에 업로드

- git clone 후 로컬 레파지토리 폴더에 stable, incubator 디렉터리 생성하고 패키징 한 차트 압축 파일을 /helm-chart/stable에 복붙 해준다.

- tree 구조를 보면 아래와 같다.

- stable 폴더 밑에 패키징 한 helm 파일이 있는 것을 볼 수 있다.

PS C:> tree /f .\github\
폴더 PATH의 목록입니다.
볼륨 일련 번호는 2E4E-BB8F입니다.
C:\GITHUB
│  README.md
│
├─incubator
└─stable
        eks_helm_test-0.1.0.tgz

- index.yaml 파일을 생성

stable 폴더에 index.yaml 파일을 생성한다.

index.yaml 파일이 있어야 local에서 helm 레포지토리로 추가가 가능하다.

helm repo index C:\Users\seungkim\Desktop\github\stable

위의 명령어를 통해 레포지토리에 index.yaml 파일을 추가할 수 있다.

- 위의 과정이 모두 끝났으면, girhub에 파일을 추가하고 commit, push 하는 작업을 진행한다.

# github 파일 추가
# stable 폴더로 이동하고

# 파일 추가
git add .

# 파일 커밋
git commit -m "helm 레파지토리에 파일 업로드"

# master 브랜치로 파일 push
git push -u origin master

- 위의 과정을 마치고 git hub로 이동하여 파일의 업로드된 상태를 확인한다.

마스터 브랜치 안에 위와 같이 helm 패키징 파일과 index.yaml 파일이 함께 생성되어 있는 것을 확인할 수 있다.

index.yaml 파일을 열어보면 내용은 아래와 같다. 패키징 한 helm 파일의 정보를 담고 있는 것을 확인할 수 있다.

apiVersion: v1
entries:
  EKS_Resource:
  - apiVersion: v2
    appVersion: 1.16.0
    created: "2023-03-08T08:37:01.4233931+09:00"
    description: A Helm chart for Kubernetes
    digest: 5f027f480c948a828e2cd8bce0000000000000000000000000
    name: EKS_Resource
    type: application
    urls:
    - eks_helm_test-0.1.0.tgz
    version: 0.1.0
generated: "2023-03-08T08:37:01.4173836+09:00"

7 helm chart를 등록하고 클러스터에 배포

- helm chart 등록을 등록해 보자.

index.yaml이 있는 경로로 레포지토리를 추가해줘야 하기 때문에 아래와 같이 입력한다.

helm repo add github-stable https://Nanninggu.github.io/eks_helm_test/stable

- 레포지토리를 확인한다.

helm repo list
NAME            URL
stable          https://charts.helm.sh/stable
github-stable   https://Nanninggu.github.io/eks_helm_test/stable

- 방금 추가한 레포지토리가 등록되어 있는 것을 확인할 수 있다.

- 그리고 방금 추가한 레포지토리에 추가된 차트를 검색하여 확인한다.

helm search repo github-stable
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
github-stable/eks_resource      0.1.0           1.16.0          A Helm chart for Kubernetes

- 방금 추가한 chart를 이용해서 manifest 파일을 배포한다.

test라는 이름으로 eks_helm_test를 배포한다.

helm install test github-stable/eks_resource

- 확인

helm install test github-stable/eks_resource
NAME: test
LAST DEPLOYED: Wed Mar  8 10:03:34 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

- helm release로 상태 확인

PS C:\github\stable> helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION
test    default         1               2023-03-08 10:03:34.7713835 +0900 KST   deployed        eks_resource-0.1.0  1.16.0

- kubectl get pod -A 명령어로 배포된 pod 확인하기

kubectl get pod
NAME                                  READY   STATUS    RESTARTS   AGE
test-pod-name                         1/1     Running   0          4m52s

- 위의 결과로 정상적으로 배포된 것을 확인 할 수 있다.

- 배포된 헬름 삭제하기

PS C:\github\stable> helm uninstall test
release "test" uninstalled

- pod 확인, 종료 중

kubectl get pod
NAME                                  READY   STATUS        RESTARTS   AGE
test-pod-name                         1/1     Terminating   0          6m14s

- 끝 -

728x90
반응형