0. INTRO

  • K8s환경(Minikube)을 대상으로 진행
  • HelmChart 를 사용한 Strimzi Opeator 사용
  • Kafka Cluster를 구축

 

1. Minikube 실행

minikube 실행

minikube start

 

2. Helm 설치

Helm 설치페이지에 접근

해당 페이지에서 원하는 방식으로 설치

내가 추천하는 방식은 스크립트 기반의 설치

 

helm 설치되어있는지 확인 : helm

헬름 설치 이후 alias 설정(zsh쉘 기준)

설정파일 접근 : vi ~.zshrc

alias h=’helm’ 입력

설정파일 저장 : source ~/.zshrc

 

3. 쿠버네티스 버전확인

버전확인하는 명령어 : kubectl version

Server Version의 GitVersion이 쿠버네티스의 버전이다

 

4. Strimzi Operator 설치

helm repo에 strimzi 저장소를 등록

helm repo add strimzi https://strimzi.io/charts/
helm repo update

strimzi helm chart 를 다운로드

helm pull strimzi/strimzi-kafka-operator

압축해제및 helm chart로 설치

#압축해제
tar -zxvf strimzi-kafka-operator-helm-3-chart-0.32.0.tgz

#디렉토리 이동
cd strimzi-kafka-operator

#헬름차트로 설치
helm install strimzi-kafka-operator .
#헬름차트의 이름을 strimzi-kafka-operator로 지정
#현재위치를 기준으로 지정

CRD 존재하는지 확인

 

 

5. Kafka 클러스터 배포

strimzi github 의 example 페이지 접속

https://github.com/strimzi/strimzi-kafka-operator/tree/main/examples

 

 

해당 페이지에는 다양한 예제가 들어있다. 클러스터를 배포하기 위함이니 kafka 디렉토리 선택

 

 

볼륨지정유무 구분

  • epehemeral : 볼륨을 지정하지않겠다(파드의 기본 볼륨만 사용하겠다)
  • persistent : 볼륨을 지정하겠다(PV, PVC를 사용하겠다)

브로커 구성 구분

  • single : 단일파드(1개) 로 지정하겠다
  • (없음) : 다중파드(여러개) 로 지정하겠다

여기서는 kafka-ephemeral.yaml 파일 선택

 

 

 

yaml파일의 전체내용 복사 후 로컬파일로 저장.

 

 

사진에서는 파일구분을 위해 CLUSTER 디렉토리 생성, cluster.yaml 이름으로 저장하였다

이때 Kind는 Kafka(CRD로만든것) 이고, 생성될 클러스터의 이름은 my-cluster 이다. 또한, Strimzi 버전에 맞추어서 카프카 버전을 3.2.0 으로 지정해주었다.

이후 카프카 클러스터 배포

minikube kubectl -- apply -f cluster.yaml

배포되어있는지 확인(READY에 TRUE 되기까지 시간이 몇분 걸렸다)

 

 

6. Topic 배포

토픽 파일내용을 전체 복사

 

 

이후 로컬파일로 저장

 

디렉토리 구분을 위해서 TOPIC폴더를 만들고, topic.yaml파일로 저장

이때 metadata.labels.strimzi.io/cluster 에는 5에서 배포한 kafka cluster의 이름과 동일해야함.

토픽 배포 : minikube kubectl -- apply -f topic.yaml

 

제대로 토픽이 떠있는지 확인

minikube kubectl -- get kafkatopics

READY 확인

 

 

7. 배포한 브로커의 정보조회

jq 설치

Brew : brew install jq

Ubuntu : apt install jq

정보조회

#minikube kubectl -- get kafka {kafka-clustername} -o jsonpath={.status} | jq -r ".listeners”
minikube kubectl -- get kafka my-cluster -o jsonpath={.status} | jq -r ".listeners"

 

이때 나오는 bootstrapServers 값이 카프카 브로커의 Bootstrap IP

9092포트로 지정한 Plain Listener는 "my-cluster-kafka-bootstrap.default.svc:9092"

9093포트로 지정한 TLS Listener는 "my-cluster-kafka-bootstrap.default.svc:9093”

인것을 확인할수 있다.

jjongguet