안녕하세요! 오늘은 Kubernetes 환경에서 Kafka 클러스터를 반복 가능하고 자동화된 방식으로 설치하는 방법을 소개하려 합니다. 특히 Helm Chart와 간단한 스크립트를 활용해서 Kafka를 손쉽게 배포하는 전략을 정리해보았어요. 😎

1. Kafka 설치를 위한 Helm Chart 준비하기
Kafka를 설치하기 위해 Helm 저장소를 먼저 등록하고 최신 차트를 가져옵니다:
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 및 서비스 설정 등 손이 많이 가는 작업이 많습니다. 이러한 복잡성을 줄이기 위해 Helm Chart를 활용하면:
- 동일한 설정으로 여러 번 재설치가 가능하고,
- GitOps 같은 DevOps 워크플로우에 적합하며,
- 복잡한 설정을 values.yaml 하나로 관리할 수 있어 유지보수가 쉬워집니다.
그래서 Helm Chart 커스터마이징과 함께 설치 자동화를 위한 스크립트를 구성했죠.
3. 구성 파일 구조 한눈에 보기
./
├── generator-kafka.sh # Kafka 설정 YAML 자동 생성 스크립트
├── run.sh # Kafka 설치를 수행하는 메인 실행 스크립트
└── kafka/ # bitnami Kafka Helm Chart 폴더
핵심은 generator-kafka.sh가 Kafka 설치에 필요한 values.yaml을 자동 생성해준다는 점이에요.
4. values.yaml 주요 항목 요약
자동 생성되는 values.yaml에는 다음과 같은 설정이 포함됩니다:
- replicaCount: Kafka 브로커 개수
- controller.replicaCount: 컨트롤러 개수 (KRaft 모드)
- storage: 브로커/컨트롤러의 PV 용량
- listeners: 다양한 리스너 설정 (클라이언트, 내부 통신 등)
- externalAccess: 외부 접속 설정 (NodePort 기반)
예시:
externalAccess:
enabled: true
broker:
service:
type: NodePort
nodePorts:
- 30000
- 30001
- 30002
NodePort를 명시함으로써 외부에서 고정된 포트로 Kafka에 접속할 수 있게 됩니다.
4-2. generator-kafka.sh의 역할은?
Kafka 설치 전 필요한 PersistentVolume(PV), PersistentVolumeClaim(PVC) 정의 등을 자동으로 만들어주는 Bash 스크립트입니다. Helm Chart 설정 외부에서 반복적인 작업을 줄여주는 도우미죠.
#!/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/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
이런 식으로 반복 작업을 자동화하면 실수도 줄고 속도도 빨라집니다.
5. 설치 스크립트(run.sh) 예시
Kafka를 실제로 배포할 때는 다음과 같은 실행 스크립트를 사용합니다:
#!/bin/bash
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 기반 외부 접속 구성과 NGINX와 연동하는 방식에 대해 다룰 예정입니다. Kafka와 Kubernetes를 함께 운영하고 계신 분들께 작게나마 도움이 되었기를 바랍니다 🙌
'DevOps > Kubernetes' 카테고리의 다른 글
Node.js 애플리케이션을 Kubernetes에 Ingress로 배포하 (0) | 2025.04.18 |
---|---|
Kubernetes Master(Node)에서 Pod 스케줄링 방지하기 (0) | 2025.04.09 |
Kubernetes CNI 비교: Calico vs Flannel - 당신의 클러스터에 더 적합한 선택은? (0) | 2025.04.06 |
Kubernetes 환경에서 InfluxDB를 자동화된 방식으로 배포하기 (0) | 2025.04.05 |
Ubuntu 환경에서 Kubernetes 설치 및 클러스터 구성 가이드 (0) | 2025.04.04 |