Helm Chart 구조 상세 분석

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/
RSS Feed
마지막 수정일자