Kafka

Kubernetes 위에 kafka 구축 - strimzi

JackCokebb 2022. 1. 11. 10:32

Kafka 수동으로 운영하려면 수많은 구성 요소를 꼼꼼히 설정해야 하므로 일이 매우 복잡해진다.

Strimzi에서 제공하는 오퍼레이터를 사용하여 Apache Kafka 설정을 순조롭게 원활히 배포한다

 

strimzi github page

https://github.com/strimzi/strimzi-kafka-operator

 

GitHub - strimzi/strimzi-kafka-operator: Apache Kafka running on Kubernetes

Apache Kafka running on Kubernetes. Contribute to strimzi/strimzi-kafka-operator development by creating an account on GitHub.

github.com

 

strimzi는 컨테이너 이미지와 오퍼레이터를 제공하여 kubernetes위에 kafka를 쉽게 구축할 수 있게 한다.

 

strimzi kafka 구조

strimzi kafka에서 제공하는 operator는 3 종류이다. 

kubernetes의 operator는 쿠버네티스 API의 기능을 확장하여 쿠버네티스 사용자를 대신해 복잡한 애플리케이션의 인스턴스를 생성, 설정 및 관리하는 애플리케이션별 컨트롤러이다.

operator는 사용자 정의 리소스(CR)를 사용하여 애플리케이션과 그 구성 요소를 관리하는 역할을 한다.

  1. cluster operator: kafka cluster, kafka connect cluster 등 다양한 cluster를 생성
  2. topic operator: broker의 topic을 생성, 변경, 삭제해주는 역할을 수행
  3. User operator: User의 설정을 통해, kafka에 접근할 때, 접근을 승인하거나 권한을 줌

 

Kafka deploy 방식

위에서 설명한 것처럼 operator를 먼저 kubernetes에 배포해야한다. 그 후에 사용자가 resource를 정의해서 apply하면 operator가 그 사용자 정의 리소스에 참고하여 cluster를 생성하거나 다른 작업을 수행해준다.

 

kafka cluster 생성하기

자세한 방법은 공식문서로 대체한다.

https://strimzi.io/docs/operators/in-development/deploying.html#deploying-cluster-operator-str

 

Deploying and Upgrading (In Development)

Strimzi image for running Kafka, including: Kafka Broker Kafka Connect Kafka MirrorMaker ZooKeeper TLS Sidecars

strimzi.io

본인 github에도 정리해두었으니 확인하길 바란다.

https://github.com/JackCokebb/kafka-all

 

GitHub - JackCokebb/kafka-all

Contribute to JackCokebb/kafka-all development by creating an account on GitHub.

github.com

 

 

kafka broker custom resource 정의

operator에게 전달해줄 custom resource를 정의해야한다. 즉 CR를 전달하는 시점에서는 operator가 kubernetes에 배포된 상태여야한다. 

https://github.com/JackCokebb/kafka-all/blob/master/kafkaServer/kafka-persistent.yaml

관련 코드는 본인 github에 올려두었다. 

 

//-f 는 파일 위치를 지정해야한다. 작성한 CR의 yaml파일 위치를 지정하자.
kubectl apply -f examples/kafka/kafka-persistent.yaml

CR을 apply하면 operator가 그에 맞는 작업을 수행한다. kafka-persistent.yaml을 올리면 cluster operator가 정의한 내용을 바탕으로 kafka cluster를 생성한다.

 

kubernetes monitoring tool lens로 monitoring 한 결과

kubernetes monitoring tool lens로 monitoring 한 결과, 정의 해준대로 kafka cluster가 생성된 것을 확인할 수 있다.

또는 코드로도 확인할 수 있다.

kubectl get deployments -n my-kafka-namespace