⚓ 쿠버네티스 어나더 클래스 (지상편) - Spring 1, 2 을 듣고 작성하는 복습 블로그 입니다.
(1) 명칭 정리

배포툴
- Jenkins : 지금까지 배포툴로 사용
- argo : 이번시간부터 배포툴로 사용
kubectl 을 써서 쿠버네티스로 배포
- kubectl 은 커맨드 라인 도구인 CLI
- create 나 apply 로 자원 생성
- CLI 명령 중 하나를 사용한거지 배포를 위한 부가적인 기능은 없었음
- 실무에서는 kubectl 을 쿠버네티스 자원을 조회하거나 급한 수정할 때만 사용
- 실제 자원 생성은 Kustomize 나 Helm 을 통해서 한다
패키지 매니저 : Helm, Kustomize
- kubectl 과 같이 6명의 명령을 날리지만,
- 작업자 입장에서는 한 번으로 모두 처리할 수 있다
- App 을 패키지 단위로 관리
(2) Helm vs Kustomize
2-1. 공통점
- 사용 목적 : 중복 관리 최소화
- 마이크로 서비스로 App 종류가 많아졌기 때문에
- 다양한 배포 환경 때문에
- 다양한 배포 툴에서 지원
- 부가적인 기능을 지원해준다
2-2. 차이점
| Helm | Kustomize.io | |
| 배포 편의 기능 갯수 | 200개 | 10개 |
| 한 패키지 당 활용 범위 (권고) | 마이크로 서비스 AND 다양한 배포 환경 | 마이크로 서비스 OR 다양한 배포 환경 ⇒ 점점 패키지 내부 파일량이 많아지는 구조 |
| 사용 목적 | 프로젝트관리 패키지용 + 기업 제품 패키지용 | 프로젝트관리 패키지용 |
| 유즈케이스 | 대형프로젝트 App 종류 - 5개 이상 |
간단한 프로젝트 App 종류 - 5개 미만 |
2-3. 최종 의견
- 쿠버네티스를 하면서 무조건 여러 오픈소스를 도입하게 된다.
- 그리고 그 오픈소스는 대부분 Helm 형태로 배포
- 그렇기 때문에 Helm 은 어차피 알아야 한다.
- 그래서 처음에 학습이 어렵지만 Helm 을 먼저 쓰면 Kustomize 를 사용할 필요는 없어지게 된다.
Kustomize 를 알아야 하는 경우
- 처음부터 끝까지 소규모 프로젝트가 될 경우
- 빨리 파이프라인을 구축해야하고, 단계적으로 Helm 적용해도 되는 경우
- 이미 누가 Kustomize 로 배포 파이프 라인을 적용해 놔서 분석해야 할 경우
2-4. Helm vs Kustomize 비교
2-4-1. 설치 구성

| Kustomize | Helm |
|
|
2-4-2. 사용 방식

| Helm → 함수 방식 | Kustomize → 오버레이 방식 |
|
|
2-4-3. 패키지 구조
| Helm | Kustomize |
|
|
(3) Helm 배포
0. 설치하기
0-1. Helm 설치
[root@cicd-server ~]#
yum install -y tar
curl -O <https://get.helm.sh/helm-v3.13.2-linux-arm64.tar.gz>
tar -zxvf helm-v3.13.2-linux-arm64.tar.gz
mv linux-arm64/helm /usr/bin/helm
확인하기
# jenkins 유저로 전환해서 확인
[root@cicd-server ~]# su - jenkins -s /bin/bash
[jenkins@cicd-server ~]$ helm
템플릿 생성하기
helm create api-tester

0-2. Kustomize 설치

- kubectl 에 이미 설치되어 있음
1. Helm 배포 시작하기
1-1. Pipeline 생성
- item name : 2221-deploy-heml
- type : Pipeline
1-2. Configuration
- Configure > General > GitHub project > Project url : https://github.com/soyeon207/kubernetes-anotherclass-sprint2/
- Advanced Project Options > Pipeline
Definition : Pipeline script from SCM
Definition > SCM : Git
Definition > SCM > Repositories > Repository URL : <https://github.com/soyeon207/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
1-3. 지금 빌드

- 배포 시작 버튼을 누르면 Helm 배포
- Helm 템플릿 확인
더보기
# Source: api-tester/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: api-tester-2221-postgresql
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
stringData:
postgresql-info.yaml: |-
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "dev"
password: "dev123"
---
# Source: api-tester/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: api-tester-2221-properties
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
data:
application_role: ALL
postgresql_filepath: /usr/src/myapp/datasource/postgresql-info.yaml
spring_profiles_active: dev
---
# Source: api-tester/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: api-tester-2221
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
spec:
type: NodePort
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
nodePort: 32221
selector:
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
---
# Source: api-tester/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-tester-2221
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
template:
metadata:
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
spec:
serviceAccountName: default
securityContext:
{}
containers:
- name: api-tester
securityContext:
{}
image: "1pro/api-tester:v1.0.0"
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
protocol: TCP
envFrom:
- configMapRef:
name: api-tester-2221-properties
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 24
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
readinessProbe:
httpGet:
path: "/readiness"
port: 8080
resources:
limits:
cpu: 200m
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- mountPath: /usr/src/myapp/datasource
name: secret-datasource
volumes:
- name: secret-datasource
secret:
secretName: api-tester-2221-postgresql
1-4. 배포 코드 확인
https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2/tree/main/2221

- 앱을 Helm 패키지로 만들기 위해서 필요한 단계
1-5. Helm Package 를 만드는 순서
1-5-1. Helm 템플릿 생성
# 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
1-5-2. 당장 필요없는 내용 삭제하기 (deleting)

- helm create api-tester 를 사용하면 최상단에 메인차트 폴더 생성
- 하위로
- charts : 서브차트 폴더 → 사용 X 삭제
- templates : 메인차트 yaml 파일 폴더
- .helmignore : 렌더링 시 제외 파일지정, 공유할 필요 없는 파일들
- Chart.yaml : 차트 기본정보 선언
- values.yaml : 배포될 yaml 파일에 들어가 있는 변수들의 기본값 선언, 변수 값 argument 를 설정
- templates : 메인차트 yaml 파일 폴더
- tests : App 의 통신 상태 확인 (부가기능) → 사용 X 삭제
- _helpers.tpl : 사용자 정의 전역변수 선언
- NOTES.txt : 배포 후 안내문구
- deployment.yaml : 배포 될 파일
1-5-3. 내 yaml 파일에 맞게 Helm Package 수정하기 (modify)

- helm command → .Release 를 써서 변수를 넣을 수 있다
- Chart.yaml → .Chart 를 써서 변수를 넣을 수 있다
- .Chart.Name 처럼 뒤에 대문자로 시작
- values.yaml → .Values 를 써서 변수를 넣을 수 있다
- .Values.replicaCount 처럼 뒤에 소문자로 시작
- _helpers.tpl → include 를 써서 import
→ helm 명령이랑 Chart.yaml, values.yaml 은 templates 안에 있는 모든 파일에서 가져다가 사용 가능
→ _helpers.tpl 은 templates 전체에서 사용 가능
1-5-4. additional
configmap.yaml 이랑 secret.yaml 을 추가
- helm install → kubectl create
- helm upgrade → kubectl patch
- helm upgrade --install → kubectl apply
1-6. 실습 후 정리
# helm 조회
helm list -n anotherclass-222
# helm 삭제
helm uninstall -n anotherclass-222 api-tester-2221
# namespace 삭제
kubectl delete ns anotherclass-222
이미지 출처 URL : https://inf.run/k7mF
'🌱 인프런 > ⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글
| (14) Helm과 Kustomize 비교하며 사용-2 (1) | 2025.06.24 |
|---|---|
| [미션5] 컨테이너 이미지 사례 실습 (1) | 2025.06.16 |
| (12) Jenkins Pipeline (기초부터 Blue/Green 까지) (1) | 2025.06.14 |
| (11) 배포를 시작하기 전에 반드시 알아야 할 것들 (2) | 2025.06.11 |
| (10) 손쉽게 데브옵스 환경을 구축하는 방법 (2) | 2025.06.10 |