티스토리 뷰
쿠버네티스 실습: Helm Chart에 ConfigMap · Secret · PVC · Ingress · HPA 통합하기
octo54 2025. 9. 10. 13:45쿠버네티스 실습: Helm Chart에 ConfigMap · Secret · PVC · Ingress · HPA 통합하기
앞선 글에서는 Helm Chart를 이용해 단일 애플리케이션(Nginx)을 배포하고, values.yaml을 통해 배포 환경을 유연하게 관리하는 방법을 실습했습니다.
이번 글에서는 실제 운영 환경에서 흔히 필요한 리소스들(ConfigMap, Secret, PVC, Ingress, HPA)을 Helm Chart에 통합하는 방법을 다룹니다.
즉, 단순 배포 자동화를 넘어서 실제 서비스 레벨의 배포 패키지를 구성하는 단계입니다.
1) Chart 구조 확장
Helm Chart를 만들면 기본적으로 templates/ 디렉토리에 매니페스트 템플릿이 들어갑니다.
여기에 configmap.yaml, secret.yaml, pvc.yaml, ingress.yaml, hpa.yaml 등을 추가해 관리합니다.
myapp/
values.yaml
Chart.yaml
templates/
deployment.yaml
service.yaml
configmap.yaml
secret.yaml
pvc.yaml
ingress.yaml
hpa.yaml
2) ConfigMap 템플릿
templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-config
data:
APP_ENV: {{ .Values.app.env | quote }}
WELCOME_MSG: {{ .Values.app.welcomeMsg | quote }}
values.yaml에 추가:
app:
env: production
welcomeMsg: "Hello from Helm ConfigMap"
3) Secret 템플릿
templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-secret
type: Opaque
data:
DB_PASSWORD: {{ .Values.secrets.dbPassword | b64enc | quote }}
values.yaml에 추가:
secrets:
dbPassword: supersecret
4) PVC 템플릿
templates/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.size }}
values.yaml에 추가:
persistence:
size: 1Gi
5) Ingress 템플릿
templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}
port:
number: {{ .Values.service.port }}
values.yaml에 추가:
ingress:
enabled: true
host: myapp.local
6) HPA 템플릿
templates/hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: {{ .Release.Name }}-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ .Release.Name }}
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.hpa.targetCPUUtilizationPercentage }}
values.yaml에 추가:
hpa:
enabled: true
targetCPUUtilizationPercentage: 50
7) 통합 배포
Chart 적용:
helm install myapp ./myapp
배포 리소스 확인:
kubectl get all
kubectl get ingress
kubectl get hpa
8) 정리
- ConfigMap, Secret → 환경 변수와 민감 정보 주입
- PVC → 데이터 영속성 보장
- Ingress → 외부 접근 및 도메인 기반 라우팅
- HPA → 부하에 따른 자동 확장
즉, Helm Chart 하나로 애플리케이션 + 설정 + 스토리지 + 네트워크 + 확장성까지 패키징이 가능해졌습니다.
다음 글에서는 이 Helm Chart를 기반으로 NestJS + NextJS + PostgreSQL + Redis를 통합한 위치 기반 주유소 정보 시스템 전체 배포를 실습하겠습니다.
쿠버네티스,Helm,HelmChart,ConfigMap,Secret,PVC,Ingress,HPA,DevOps,K8s실습
Helm Chart 통합 구성에 도움이 될 웹 참고 자료
주제 핵심 내용
| 기초 구조와 템플릿 방식 | helm create로 생성되는 템플릿 구조, ConfigMap 추가 예시 (Helm, Civo.com) |
| 통합 구조의 실제 실무 예 | loki-stack 차트에 Deployment, Service, ConfigMap, HPA, Ingress, PVC 등 다양한 템플릿이 포함된 활용 예 (Civo.com) |
| ConfigMap·Secret의 관리 방식 | ConfigMap과 Secret을 분리해서 Helm 템플릿으로 관리하는 실전 패턴 (Stack Overflow, Medium) |
| Secret 보안 관리 팁 | helm-secrets 플러그인이나 외부 Secret Manager를 통한 안전한 Secrets 처리 전략 (GitGuardian 블로그) |
문서에 반영하면 좋을 핵심 보강 내용
- 템플릿 구조에 대한 공식 예시 추가
helm create로 생성된 차트 구조와 함께, configmap.yaml, secret.yaml, pvc.yaml 등 사용자 정의 템플릿을 추가할 수 있다는 점을 명확히 설명하세요. (Helm) - 멀티-리소스 포함 예시 강조
Loki Stack과 같은 차트가 실제로 Ingress, PVC, HPA까지 통합해 관리하는 사례를 보여줘, 독자에게 실용적인 모범안으로 제시하는 것이 좋습니다. (Civo.com) - ConfigMap 및 Secret 접근 전략 비교
값 직접 삽입 방식 vs. shared Secret 객체 참조 방식 등, 두 가지 접근 방식을 비교 설명하면 독자가 적절한 방식을 선택할 수 있습니다. (Stack Overflow) - Helm 기반 Secret 보안 강화 방안 소개
helm-secrets 같은 플러그인 또는 외부 Secret 관리자 연동 방식으로 Helm에서도 보안성을 확보할 수 있음을 강조하세요. (GitGuardian 블로그)
'project > 맥미니로 시작하는 쿠버네티스' 카테고리의 다른 글
| 쿠버네티스 실습: 운영 환경 트러블슈팅 사례 정리 (0) | 2025.09.17 |
|---|---|
| 쿠버네티스 실습: Helm Chart로 NestJS + NextJS + PostgreSQL + Redis 통합 배포하기 (0) | 2025.09.15 |
| 쿠버네티스 실습: Helm Chart로 애플리케이션 배포 자동화하기 (0) | 2025.09.09 |
| 쿠버네티스 실습: 네임스페이스와 RBAC 기초 (0) | 2025.09.08 |
| 쿠버네티스 실습: 리소스 Requests & Limits와 Pod QoS Class 이해하기 (0) | 2025.09.05 |
- Total
- Today
- Yesterday
- Prisma
- llm
- 딥러닝
- 웹개발
- JAX
- PostgreSQL
- Redis
- 개발블로그
- nextJS
- 쿠버네티스
- CI/CD
- rag
- 백엔드개발
- fastapi
- JWT
- ai철학
- seo 최적화 10개
- REACT
- SEO최적화
- 생성형AI
- LangChain
- flax
- Docker
- Python
- node.js
- NestJS
- kotlin
- Next.js
- Express
- DevOps
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |

