Helm과 Kubernetes 연동 심화

Helm과 Kubernetes 연동 심화

9️⃣ Helm과 Kubernetes 연동 심화


Helm은 Kubernetes 애플리케이션을 관리하는 강력한 도구로, Kubernetes의 다양한 리소스를 효율적으로 설정하고 배포할 수 있게 도와줍니다. 이번 섹션에서는 Helm과 Kubernetes 리소스를 심화적으로 연동하는 방법을 다룹니다.


1 Helm과 ConfigMap, Secret 연동

Helm은 ConfigMapSecret 리소스를 통해 애플리케이션의 환경 설정 및 비밀 정보를 관리할 수 있습니다. Helm 차트를 작성할 때 이러한 리소스를 쉽게 정의하고, 필요에 따라 값을 설정하여 Kubernetes에서 활용할 수 있습니다.

📌 Helm에서 ConfigMap 사용 예시

values.yaml 파일에서 값을 정의하고, ConfigMap 리소스를 Helm 템플릿에서 참조합니다.

values.yaml

config:
  app_mode: production
  log_level: debug

configmap.yaml (Helm 템플릿)

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-config
data:
  APP_MODE: {{ .Values.config.app_mode }}
  LOG_LEVEL: {{ .Values.config.log_level }}

위 예시에서는 ConfigMap 리소스를 정의하고 values.yaml에서 제공하는 값을 참조하여 환경 변수를 설정합니다.

📌 Helm에서 Secret 사용 예시

values.yaml

secrets:
  db_password: supersecretpassword

secret.yaml (Helm 템플릿)

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-secret
type: Opaque
data:
  DB_PASSWORD: {{ .Values.secrets.db_password | b64enc }}

b64enc 함수는 값을 Base64 인코딩하여 Secret으로 안전하게 저장할 수 있도록 합니다.


2 Helm을 활용한 Ingress Controller 설정

Helm을 사용하여 Ingress Controller를 설치하고 구성하는 방법을 배워봅니다. Ingress는 Kubernetes 클러스터 내에서 외부 요청을 적절한 서비스로 라우팅하는 역할을 합니다.

📌 Ingress Controller 설치 예시

  1. Helm을 사용하여 Ingress Controller를 설치합니다. 예를 들어, NGINX Ingress Controller를 설치합니다.
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace kube-system
  1. Ingress 리소스를 사용하여 트래픽을 라우팅합니다.

ingress.yaml (Helm 템플릿)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress
  namespace: {{ .Release.Namespace }}
spec:
  rules:
  - host: {{ .Values.ingress.host }}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: {{ .Release.Name }}-service
            port:
              number: 80

values.yaml

ingress:
  host: my-app.example.com

위 예시에서는 Ingress Controllermy-app.example.com 도메인의 트래픽을 해당 서비스로 라우팅하도록 설정하고 있습니다.


3 Helm으로 StatefulSet 배포 (데이터베이스, Kafka 등)

StatefulSet은 상태를 가진 애플리케이션을 Kubernetes에서 관리하는 리소스입니다. 데이터베이스나 Kafka와 같은 상태ful 애플리케이션을 배포할 때 주로 사용됩니다.

📌 StatefulSet 배포 예시

statefulset.yaml (Helm 템플릿)

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {{ .Release.Name }}-statefulset
spec:
  serviceName: {{ .Release.Name }}-headless
  replicas: 3
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
    spec:
      containers:
      - name: {{ .Release.Name }}-container
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi

values.yaml

image:
  repository: my-db-image
  tag: latest

위 예시는 StatefulSet을 사용하여 데이터베이스와 같은 상태ful 애플리케이션을 배포하는 방법을 보여줍니다. volumeClaimTemplates를 통해 Persistent Volume을 사용할 수 있습니다.


4 Helm과 Persistent Volume (PVC) 사용법

**Persistent Volume (PVC)**은 Kubernetes에서 데이터 저장소를 관리하는 리소스로, 데이터를 지속적으로 저장하고 관리할 수 있습니다. Helm을 통해 PVC를 관리하여 애플리케이션에 필요한 저장소를 제공합니다.

📌 Persistent Volume Claim (PVC) 사용 예시

pvc.yaml (Helm 템플릿)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: {{ .Release.Name }}-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

위 예시는 **Persistent Volume Claim (PVC)**을 정의하여 애플리케이션에 5Gi의 저장소를 요청하는 방법을 보여줍니다.

📌 PVC와 StatefulSet 연동 예시

statefulset.yaml (Helm 템플릿)

volumeClaimTemplates:
- metadata:
    name: data
  spec:
    accessModes: ["ReadWriteOnce"]
    resources:
      requests:
        storage: 5Gi

이 예시에서는 StatefulSet 내에서 PVC를 사용하여 애플리케이션의 데이터 저장소를 관리합니다.

RSS Feed
마지막 수정일자