Helm bitnami를 사용한 카프카(kafka) 설치 24.03
버전정보
helm version : v3.14.3
EKS t3.medium
이 글은 M1 pro 칩을 기준으로 작성되었습니다.
Helm
Helm 은 쿠버네티스 패키지 인스톨러로 EKS에 카프카를 구축하는 방법 중 거의 가장 간단했던 것 같다. 다만 버전에 따라 조금씩 달라지는 부분들이 많아 조금 애를 먹었다.
먼저 Helm을 설치해 주어야 한다.
curl -fsSL -o get_helm.sh <https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3>
chmod 700 get_helm.sh
./get_helm.sh
helm을 설치하고 권한을 주었다.
해당 코드를 통해 설치가 잘되었는지 확인할 수 있다
helm version
bitnami
이제 helm 레포에 bitnami를 추가해주어야 한다.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
추가해준 뒤 helm업데이트를 해준다.
PersistentVolume 생성
예전에는 이 상태에서 bitnami를 이용해 바로 kafka를 설치하면 주키퍼와 함께 설치되며 모든 셋팅이 마무리 되었다. 하지만 이 버전에서는 설치를 해도 카프카 Pod들이 Pending상태에서 움직이지 않았다.
예상되는 문제는 노드의 리소스 부족이였는데 t3.medium 을 여러개 붙여 사용하고 있었고 노드의 사용 리소스양을 확인해봐도 부족하지는 않았다. 파드가 켜지지 않아 로그는 확인할 수 없고 describe를 통해 상세 정보를 확인했더니 PersistentVolume이 바인딩 되어있지 않았다.
따라서 수동으로 생성해주어 문제를 해결했다.
vi kafka-pv-1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: kafka-pv-1
spec:
capacity:
storage: 8Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: gp2
hostPath:
path: /var/log/kafka-data-1
kubectl create -f kafka-pv-1.yaml
kafka-pv-1, kafka-pv-2, kafka-pv-3 에 대해 동일하게 만들고 적용해야 한다.
만약 카프카 파드를 더 여러개 사용한다면 그만큼 늘려주어야 한다.
Kafka 설치
이제 드디어 카프카를 설치 할 차례다.
helm install my-kafka --set volumePermissions.enabled=true,replicaCount=2,listeners.client.protocol=PLAINTEXT oci://registry-1.docker.io/bitnamicharts/kafka
처음에는 뒤에 옵션들이 없이 그냥 카프카를 설치했다.
이때 또 문제가 발생했는데 카프카 파드들의 STATUS가 CrashLoopBackoff인것이였다.
파드의 로그를 확인해봤다.
kafka 02:20:25.05 INFO ==> ** Starting Kafka setup ** mkdir: cannot create directory '/bitnami/kafka/config': Permission denied
디렉토리 '/bitnami/kafka/config'를 만들 수 없는 권한 부족 문제가 발생했다.
이 때문에 --set volumePermissions.enabled=true 옵션을 통해 해당 권한을 주어 install 해야 했다.
listeners.client.protocol=PLAINTEXT 옵션이 붙은 이유에 대해서는 아래에 따로 설명했다.
EKS에 Helm bitnami 을 이용한 Kafka 구축 중 SASL 에러
기존 코드 # 헬름 설치 curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh # bitnami 추가 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update # 카
h-castle.tistory.com
이제 조금 기다리면 Init 상태였던 카프카 파드들이 Running 상태로 정상 작동하는 모습을 확인할 수 있다.
EKS에 helm/bitnami를 이용해 kafka를 설치하는 사람들에게 도움이 되었으면 좋겠다.
트러블 슈팅 정리
파드가 Pending 상태일때 -> 파드의 바인딩 상태를 확인하고 바인딩이 되어있지 않으면 바인딩이 될 수 있는 알맞는 PV를 생성해야한다.
파드가 CrashLoopBackOff 상태일때 -> 파드의 권한을 확인하고 권한을 부여하자.
파드가 Running이지만 정상 동작하지 않을때(연결되어있지 않을때) -> protocol 셋팅을 확인하자. 링크된 글 참조.
+++
t3.small로 구성하였으면 리소스가 부족해 자꾸 카프카 파드들이 돌아가며 꺼지는 문제가 발생할 수 있다.
t3.medium이상으로 구성하는 것을 추천한다.