# Terraform으로 EKS 클러스터 생성 및 HELM Chart를 활용하여 리소스 생성
- 구성도는 아래와 같다.
1. eks 클러스터를 iac 코드인 Terraform을 활용하여 생성
2023.03.06 - [Terraform(테라폼)/Terraform-EKS] - Terraform을 활용한 EKS 클러스터 설계
2. HELM Chart 생성하기
2023.02.20 - [Helm (헬름)/Helm] - Helm Chart 만들기 for kubernetes
- 위의 링크에서 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 업로드 방법
- 그리고 해당 레파지토리의 왼쪽 메뉴의 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
- 끝 -
'Helm (헬름) > Helm chart' 카테고리의 다른 글
Helm Chart Customizing - nginx - multi service (0) | 2023.03.09 |
---|---|
Helm Chart Customizing - nginx (0) | 2023.03.09 |
helm chart 설치 오류 해결하기 (0) | 2023.03.08 |
helm 원격 리포지토리 (Repository) (0) | 2023.02.21 |
helm chart 렌더링, 업그레이드, 삭제 및 상태 확인 (0) | 2023.02.21 |