이번 글에서는 Helm Chart를 활용하여 Kafka 클러스터를 자동으로 설치하고 구성하는 방법을 정리해보려 합니다. Kubernetes 환경에서 Kafka를 안정적으로 운영하기 위해 반복 가능한 설치 환경이 중요하다는 점, 다들 공감하시죠? 😎

1. Helm으로 Kafka 설치 준비
Kafka를 설치하기 위해 먼저 Helm Chart 저장소를 추가하고 최신 차트를 가져옵니다:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm pull bitnami/kafka --untar
bitnami/kafka
차트를 기반으로 Helm Chart 디렉토리가 생성되며, 여기에 필요한 커스터마이징을 적용해 나갑니다.
2. 왜 Helm을 사용할까?
Kafka는 분산 시스템이다 보니 브로커 설정, 컨트롤러 구성, PVC, 서비스 설정 등 복잡한 설정이 요구됩니다. 이런 설정을 values.yaml
로 정의해두면:
- 반복적인 설치가 가능하고,
- 설정 변경 시 GitOps와 같은 DevOps 전략과도 잘 어울리며,
- 복잡한 설정을 하나의 파일로 관리할 수 있어 유지보수가 쉬워집니다.
그래서 Helm Chart를 커스터마이징하여 Kafka 설치를 자동화한 스크립트를 구성하게 되었죠.
3. 구성 파일 구조 살펴보기
./
├── generator-kafka.sh # Kafka 설치를 위한 설정 YAML 자동 생성 스크립트
├── run.sh # Helm Chart로 Kafka 설치를 수행하는 메인 실행 스크립트
└── kafka/ # Helm Chart 폴더 (bitnami kafka 차트 기반)
이렇게 나눠 관리하고 있습니다. 핵심은 generator-kafka.sh
가 values.yaml
파일을 자동 생성해준다는 점이에요.
4. values.yaml 구성 요소 요약
자동 생성되는 values.yaml
의 주요 파라미터는 다음과 같습니다:
replicaCount
: 브로커 복제 수controller.replicaCount
: 컨트롤러 복제 수 (KRaft 기반)storage
: 각 브로커/컨트롤러의 PV 용량 및 접근 방식listeners
: client, inter-broker, external 등 리스너 세팅externalAccess
: 외부 연결을 위한 설정 (NodePort 사용)
물론 metrics, podAntiAffinity, tolerations 같은 것도 함께 설정 가능합니다.
externalAccess:
enabled: true
broker:
service:
type: NodePort
nodePorts:
- 30000
- 30001
- 30002
이렇게 하면 Helm 설치 시 외부 노드 포트를 고정으로 설정할 수 있어요.
4-2. generator-kafka.sh 구성 요소 요약
generator-kafka.sh
는 저자가 생성한 bash 코드 파일입니다. Helm을 이용해 Kafka를 설치할 때 반복적이거나 동적으로 생성해야 하는 값을 자동화하기 위해 사용되며, 입맛에 맞는 구조로 쉽게 커스터마이징이 가능합니다.
#!/bin/bash
# Kafka PV/PVC Generator Script (Bitnami KRaft Mode)
nsc="$1"
controllerCount="${2:-3}"
brokerCount="${3:-3}"
if [[ -z "$nsc" ]]; then
echo "❌ Usage: ./generator-kafka.sh <namespace> [controller-count] [broker-count]"
exit 1
fi
rm -f "$baseDir"/pv-kafka-*.yaml "$baseDir"/pv-kafka-log.yaml
cat <<EOF >> "kafka/pv-kafka-broker.yaml"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-kafka-broker-${i}
labels:
type: nfs
kafka-broker-id: "${i}"
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.33.02
path: /mnt/icas/kafka/broker-${i}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-kafka-broker-${i}
namespace: \${nsc}
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
selector:
matchExpressions:
- key: kafka-broker-id
operator: In
values:
- "${i}"
EOF
이 스크립트는 Helm 설치 전 사전에 필요한 PVC 정의를 자동으로 생성하는 핵심 역할을 합니다.
5. 설치 스크립트(run.sh) 예시
#!/bin/bash
# Kafka 설치 스크립트
namespace="kafka-test"
replicaCount=3
./generator-kafka.sh "$namespace" "$replicaCount"
helm install kafka -n "$namespace" ./kafka \
-f ./kafka/values.yaml \
--set controller.replicaCount=3 \
--set replicaCount=3
위처럼 실행하면 자동으로 values.yaml을 생성한 뒤 Helm을 통해 Kafka 클러스터를 배포합니다.✨
6. 마무리하며
이 글에서는 Helm과 Shell Script를 활용해 Kafka를 자동으로 설치하는 전략을 소개했습니다. 다음 글에서는 NodePort 기반 외부 접속 구성에 대해 살펴볼게요. Kafka를 처음 다루거나 Helm Chart를 커스터마이징하려는 분들께 도움이 되었으면 좋겠습니다.