Helm Chart 구조 상세 분석
4️⃣ Helm Chart 구조 상세 분석
Helm Chart는 여러 파일과 디렉토리로 구성됩니다. 이 구조를 이해하면 Helm을 활용한 쿠버네티스 애플리케이션 배포를 효과적으로 할 수 있습니다.
1 Chart.yaml (메타데이터)
Chart.yaml
파일은 Helm Chart의 메타데이터를 포함합니다.
📌 예제 (Chart.yaml)
apiVersion: v2
name: my-chart
description: A Helm chart for Kubernetes
type: application
version: 1.0.0
appVersion: 1.16.0
필드 | 설명 |
---|---|
apiVersion |
Chart의 API 버전 (v2 권장) |
name |
차트 이름 |
description |
차트 설명 |
type |
application 또는 library |
version |
차트의 버전 |
appVersion |
배포되는 애플리케이션 버전 |
2 values.yaml (기본값 설정)
values.yaml
파일은 기본 설정 값을 정의합니다. 사용자가 --set
옵션이나 values-override.yaml
을 통해 값을 변경할 수 있습니다.
📌 예제 (values.yaml)
replicaCount: 2
image:
repository: nginx
tag: latest
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
이 값은 템플릿(templates/
)에서 변수로 사용됩니다.
3 templates/ 디렉토리
이 디렉토리에는 쿠버네티스 매니페스트 템플릿이 들어 있습니다. values.yaml
에서 정의한 값과 결합하여 실제 배포 파일이 생성됩니다.
4 _helpers.tpl (템플릿 함수)
템플릿 함수 파일로, 재사용 가능한 템플릿을 정의할 때 사용됩니다.
📌 예제 (_helpers.tpl)
{{- define "my-chart.fullname" -}}
{{ .Release.Name }}-{{ .Chart.Name }}
{{- end -}}
이제 deployment.yaml
에서 호출할 수 있습니다.
metadata:
name: {{ include "my-chart.fullname" . }}
5 deployment.yaml (배포 매니페스트)
Deployment
리소스를 정의합니다.
📌 예제 (deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-chart.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
6 service.yaml (서비스 매니페스트)
쿠버네티스 Service
리소스를 정의합니다.
📌 예제 (service.yaml)
apiVersion: v1
kind: Service
metadata:
name: {{ include "my-chart.fullname" . }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
selector:
app: {{ .Release.Name }}
7 ingress.yaml (인그레스 매니페스트)
Ingress를 사용하여 외부 트래픽을 관리할 수 있습니다.
📌 예제 (ingress.yaml)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "my-chart.fullname" . }}
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ include "my-chart.fullname" . }}
port:
number: {{ .Values.service.port }}
8 configmap.yaml & secrets.yaml (설정 및 보안 정보)
✅ ConfigMap 예제 (configmap.yaml)
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "my-chart.fullname" . }}-config
data:
config.json: |
{
"env": "production"
}
✅ Secret 예제 (secrets.yaml)
apiVersion: v1
kind: Secret
metadata:
name: {{ include "my-chart.fullname" . }}-secret
type: Opaque
data:
password: {{ "my-password" | b64enc }}
9 charts/ (서브 차트)
charts/
디렉토리는 서브 차트를 포함합니다. 예를 들어, PostgreSQL
을 함께 설치하려면 여기에 PostgreSQL Chart를 추가할 수 있습니다.
charts/
├── postgresql-10.3.11.tgz
🔟 .helmignore (제외 파일 목록)
.helmignore
파일은 Chart 패키징 시 제외할 파일을 정의합니다.
📌 예제 (.helmignore)
*.md
.git/
*.tgz
tests/
마지막 수정일자