본문 바로가기

Container/Kubernetes

[ Kubernetes ] Helm과 Kustomize 비교하며 사용하기 - Helm 배포

728x90
반응형

> 패키지 매니저를 쓰는 이유

 

> 설치 구성 비교

 

 

> 사용 방식 비교

 

 

1) Helm(Ver. 3.13.2) 설치 - CI/CD Server에서 helm 설치

[root@cicd-server ~]#
curl -O https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz
tar -zxvf helm-v3.13.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/helm

 

- 확인 및 템플릿 생성

# jenkins 유저로 전환해서 확인
[root@cicd-server ~]# su - jenkins -s /bin/bash
[jenkins@cicd-server ~]$ helm

[jenkins@cicd-server ~]$ helm create api-tester

 

 

2) Kustomize(Ver. 5.0.1) 설치 및 

- kubectl v1.14부터 포함되어 있어 따로 설치 필요 없음.(현재 v1.27.2 사용중)

kubectl version --short --client

 


 

1. Helm 배포 시작하기

- "222" 탭을 생성 후 pipeline 생성

Enter an item name에 [2221-deploy-helm] 입력
[Pipeline] 선택
[OK] 버튼 클릭

 

- Configure > General > GitHub project > Project url

Project url : https://github.com/[본인의 username]/kubernetes-anotherclass-sprint2/

 

 

- Configure > Advanced Project Option > Pipeline

Definition : Pipeline script from SCM
Definition > SCM : Git
Definition > SCM > Repositories > Repository URL : https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git
Definition > SCM > Branches to build > Branch Specifier : */main
Definition > SCM > Branches to build > Additional Behaviours > Sparse Checkout paths > Path : 2221
Definition > Script Path : 2221/Jenkinsfile

 

 

- 저장 후 지금 빌드 실행하여 Stage View 결과 확인

* 배포 되기전 꼭 배포될 템플릿 Logs 확인

 

 

1-1. Helm Package 만들기

- Helm 템플릿 생성(init)

# helm 템플릿 생성 
[jenkins@cicd-server ~]$ helm create api-tester
[jenkins@cicd-server ~]$ cd api-tester
[jenkins@cicd-server api-tester]$ ls
charts  Chart.yaml  templates  values.yaml

 

- 당장 필요없는 내용 삭제 (deleting)

 

- 내 yaml 파일에 맞게 Helm Package 수정 (modify)

- Service에서 port와 containerPort가 동일하게 들어가는 부분 주의

- 동적 변수 넣기 (미리 넣기보단 지금 필요한 것만 넣기)

- 완벽할 필요 없음, 잘못된 부분이 있으면 배포시 문법에러 나옴

 

- yaml 파일 수정

더보기

기존 배포에 사용된 deployment.yaml 파일과 비교하여 values.yaml 파일 수정
 ( template > deployment.yaml 파일 아님 주의)

 

1. replicaCount, image 수정

values.yaml

2. serviceAccount 수정

현 단계에서는 serviceAccount를 사용하지 않아 false로 변경

values.yaml

3. service 수정

service 부분에서 NodePort 부분은 새로 작성해야 하는데 이때 template > service.yaml 파일에 다음과 같이 nodePort를 추가 후 values.yaml 파일에 수정해야함.

values.yaml
service.yaml

 4. resources 수정

values.yaml

 

* volumes, volumeMounts는 configmap, secret 추가시 설명

 

5. templates > deployment.yaml 파일 수정

startupProbe 추가, livenessProbe, readinessProbe 수정

deployment.yaml

* envFrom은 configmap, secret 추가시 설명

 

 

 

- 내 resource 더 추가하기 (addition)

- configmap, secret 추가하기 (두 object는 한 App에 여러개 만들 수 있음, name에 하드코딩 필요)

 

 

- yaml 파일 추가 및 수정

더보기

1. secret.yaml 파일 추가

secret.yaml

 

 2. configmap.yaml 파일 추가

configmap.yaml

 

3. values.yaml 파일 수정

values.yaml에 volumes, volumeMounts 추가
values.yaml에 configmap, secret 추가

 

4. templates > deployment.yaml 파일 수정

deployment.yaml

* containerPort는 serivce의 pport와 동일하게 쓰는것이 권고사항이지만, 기존에 배포된 deployment.yaml에는 containerPort가 8080으로 되어있기때문에 8080으로 변경

 

 

- 실습 후 정리

# helm 조회
helm list -n anotherclass-222
# helm 삭제
helm uninstall -n anotherclass-222 api-tester-2221

# namespace 삭제
kubectl delete ns anotherclass-222
728x90
반응형