본문 바로가기
Kubernetes

[Kubernetes-Kafka] 1. strimzi-Kafka 및 Kafka-UI 설치

by 우솨 2025. 2. 6.

kafka-yaml.zip
0.19MB

1. Kafka 설치

1-1. kafka라는 네임스페이스 생성

kubectl create namespace kafka

1-2. helm repo에 strimzi추가

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

 

1-3. kafka네임스페이스에 strimzi 최신버전 설치

helm install my-strimzi-cluster-operator oci://quay.io/strimzi-helm/strimzi-kafka-operator -n kafka

1-4. 배포한 리소스 확인 : Operator deployment(파드)

kubectl get deploy,pod -n kafka
kubectl get all -n kafka

1-5. 지원하는 카프카 버전 확인
       - 첨부파일의 kafka-1.yaml과 kafka-2.yaml의 버전을 지원하는 버전으로 수정 (현재 첨부파일은 3.9.0버전)

kubectl describe deploy -n kafka | grep KAFKA_IMAGES: -A3

1-6.  첨부파일의 kafka-1.yaml 과 kafka-2.yaml을 수정
       - kafka-2.yaml 는 kafka-1.yaml에서 프로메테우스로 카프카의 metrics를 보내는 기능을 추가한 것
        (처음부터 kafka-2.yaml로 배포해도 상관없음)
      - 지원하는 카프카 버전topologyKey를 알맞게 수정
      - replicas: 3 => 브로커, 주키퍼 3개씩 생성 (노드 3개 필요)

Autopilot 모드와 Standard 모드

topologyKey는 카프카 파드의 배포 위치를 결정하는데 사용됩니다. 이 설정은 카프카 클러스터의 파드들이 어떻게 분배될지에 대한 규칙을 정의합니다.
Autopilot 모드
- topology.kubernetes.io/zone을 사용
- 이 모드는 주로 자동으로 리소스를 관리하도록 설정된 환경에서 사용됩니다. 파드들이 각 가용 영역(zone)별로 분배될 수 있습니다. 주로 다중 가용 영역에 걸쳐 파드를 분배하고자 할 때 사용됩니다.
Standard 모드
- kubernetes.io/hostname을 사용
- 일반적으로 하나의 가용 영역 내에서 파드를 배치하거나, 노드별로 배치하는 환경에 사용됩니다. 파드들이 각 노드별로 분배될 수 있습니다. 즉, 노드 단위로 파드 배치를 제어하고 싶을 때 사용됩니다.

굳이 바꿔야 할까요?
기본적으로 설정하지 않아도 동작할 수 있지만, 가용성 및 안정성을 고려해 적절한 topologyKey를 설정하는 것이 좋습니다. 기본적으로 오류는 발생하지 않지만, 카프카 클러스터의 가용성이나 리소스 분배에 문제가 생길 수 있습니다.
만약 다중 가용 영역에 배포하거나 파드를 고르게 분산하려면, 해당 topologyKey를 설정하는 것이 좋습니다.

1-7.  kafka-1.yaml 배포

kubectl apply -f kafka-1.yaml -n kafka

1-8. 배포 확인 - 파드 생성이 잘되었는지 확인

kubectl get kafka -n kafka
kubectl get cm,secret -n kafka
kubectl get strimzipodsets -n kafka

1-9. Strimzi로 배포된 Broker 의 상세정보를 configmap에서 확인
       - zookeeper는 cluster에 대한 Configmap만 존재

kubectl describe cm -n kafka my-cluster-kafka-0
kubectl describe cm -n kafka my-cluster-zookeeper-config

1-10. Listeners 정보확인

kubectl get kafka -n kafka my-cluster -o jsonpath={.status.listeners} | jq

bootstrapServers : 브로커주소
포트 정보
  9092 : Plaintext(평문)
  9093 : TLS(암호화)
  9094 => 32728 : external(nodePort연결)


2. Kafka-UI 설치

2-1. helm repo에 추가

helm repo add kafka-ui https://provectus.github.io/kafka-ui-charts

2-2. 첨부파일의 kafkaui-values.yml 배포

helm install kafka-ui kafka-ui/kafka-ui -f kafkaui-values.yml

2-3. 로드밸런서 설정

kubectl patch svc kafka-ui -p '{"spec":{"type":"LoadBalancer"}}'
kubectl annotate service kafka-ui "external-dns.alpha.kubernetes.io/hostname=kafka-ui"

2-4. 배포 확인

echo -e "kafka-ui Web URL = http://kafka-ui"

2-5. 주소 확인

kubectl get svc

2-6. 주소로 접속
       - 34.47.71.106:80 (EXTERNAL-IP:PORT)