Repository for dip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

9.2 KiB

Apache Kafka 배포

1. 배포 방법

1) 배포시 주의 사항

  • Apache Kafka 4.0.0은 KRaft 모드로만 동작하며 ZooKeeper가 필요하지 않습니다.
  • Controller-eligible 노드와 Broker-only 노드를 분리하여 배포할 수 있습니다.
  • SASL 인증이 기본적으로 활성화되어 있으므로 클라이언트 연결 시 인증 정보가 필요합니다.
  • 프로덕션 환경에서는 리소스 설정과 영속성 스토리지 설정을 반드시 확인해야 합니다.

2) 배포 방법

git clone https://github.com/paasup/service-catalog.git
cd charts/kafka
helm upgrade kafka ./ -f custom-values.yaml --install -n kafka --create-namespace

2. custom-values.yaml 예시

다음은 배포 시 사용할 수 있는 custom-values.yaml 파일의 예시입니다:

# Global 설정
global:
  imageRegistry: ""  # paasup.io (오프라인 환경에서 설정)
  imagePullSecrets: []
  defaultStorageClass: ""

# Kafka 이미지 설정
image:
  registry: docker.io
  repository: bitnami/kafka
  tag: 4.0.0-debian-12-r10

# Controller-eligible 노드 설정 (Controller + Broker 역할)
controller:
  replicaCount: 3
  controllerOnly: false  # true로 설정하면 Controller 전용 노드
  persistence:
    enabled: true
    size: 8Gi
    storageClass: ""
  logPersistence:
    enabled: false
    size: 8Gi
    storageClass: ""
  resources: {}
  resourcesPreset: "small"
  
# Broker-only 노드 설정 (선택사항)
broker:
  replicaCount: 0  # 필요시 증가
  persistence:
    enabled: true
    size: 8Gi
    storageClass: ""
  logPersistence:
    enabled: true
    size: 8Gi
    storageClass: ""
  resources: {}
  resourcesPreset: "small"

# 리스너 설정
listeners:
  client:
    containerPort: 9092
    protocol: SASL_PLAINTEXT
  controller:
    containerPort: 9093
    protocol: SASL_PLAINTEXT
  interbroker:
    containerPort: 9094
    protocol: SASL_PLAINTEXT

# SASL 인증 설정
sasl:
  enabledMechanisms: PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
  client:
    users: ["user1"]
    passwords: ""  # 자동 생성 또는 별도 설정

# 서비스 설정
service:
  type: ClusterIP
  ports:
    client: 9092

# 메트릭 설정
metrics:
  jmx:
    enabled: false

3. custom-values.yaml 설정 설명

1) 전역 설정

  • 오프라인 환경 배포시 사용합니다.
Name 설명 기본값
global.imageRegistry 오프라인 설치 시에 설정.
paasup 설치시에는 "paasup.io"으로 설정
""
global.imagePullSecrets Docker 레지스트리 시크릿 이름 배열 []
global.defaultStorageClass 영속성 볼륨을 위한 기본 StorageClass ""

2) Kafka 이미지 설정

Name 설명 기본값
image.registry Kafka 이미지 레지스트리 docker.io
image.repository Kafka 이미지 리포지토리 bitnami/kafka
image.tag Kafka 이미지 태그 4.0.0-debian-12-r10

3) Controller-eligible 노드 설정

Name 설명 기본값
controller.replicaCount Controller-eligible 노드 수 3
controller.controllerOnly true로 설정하면 Controller 전용 노드로 동작
false면 Controller+Broker 역할
false
controller.persistence.enabled 데이터 영속성 활성화 true
controller.persistence.size 영속성 볼륨 크기 8Gi
controller.persistence.storageClass 영속성 볼륨 StorageClass ""
controller.logPersistence.enabled 로그 영속성 활성화 false
controller.resourcesPreset 리소스 프리셋 (none, nano, micro, small, medium, large, xlarge, 2xlarge) small

4) Broker-only 노드 설정 (선택사항)

Name 설명 기본값
broker.replicaCount Broker 전용 노드 수 (0이면 비활성화) 0
broker.persistence.enabled 데이터 영속성 활성화 true
broker.persistence.size 영속성 볼륨 크기 8Gi
broker.logPersistence.enabled 로그 영속성 활성화 false
broker.resourcesPreset 리소스 프리셋 small

5) 리스너 설정

Name 설명 기본값
listeners.client.containerPort 클라이언트 연결 포트 9092
listeners.client.protocol 클라이언트 리스너 보안 프로토콜 SASL_PLAINTEXT
listeners.controller.containerPort Controller 통신 포트 9093
listeners.controller.protocol Controller 리스너 보안 프로토콜 SASL_PLAINTEXT
listeners.interbroker.containerPort Broker 간 통신 포트 9094
listeners.interbroker.protocol Inter-broker 리스너 보안 프로토콜 SASL_PLAINTEXT

6) SASL 인증 설정

Name 설명 기본값
sasl.enabledMechanisms 활성화된 SASL 메커니즘 (쉼표로 구분) PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
sasl.client.users 클라이언트 사용자 목록 ["user1"]
sasl.client.passwords 클라이언트 사용자 비밀번호 (빈 문자열이면 자동 생성) ""

7) 메트릭 설정

Name 설명 기본값
metrics.jmx.enabled JMX 메트릭을 Prometheus로 노출할지 여부 false

4. 배포 아키텍처

1) 기본 배포 (Controller + Broker)

  • controller.replicaCount: 3, controller.controllerOnly: false
  • 각 노드가 Controller와 Broker 역할을 모두 수행
  • 소규모 환경에 적합

2) 분리 배포 (Controller 전용 + Broker 전용)

  • controller.replicaCount: 3, controller.controllerOnly: true
  • broker.replicaCount: 3 이상
  • Controller와 Broker 역할을 분리하여 성능 최적화
  • 대규모 환경에 적합

5. 클라이언트 연결

1) 클라이언트 설정 예시

bootstrap.servers=kafka:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user1" password="<password>";

2) 비밀번호 확인

kubectl get secret kafka-user-passwords -o jsonpath='{.data.client-passwords}' | base64 -d

6. 트러블슈팅

1) 일반적인 문제

  • Pod 시작 실패: 리소스 부족 또는 영속성 볼륨 문제 확인
  • 클라이언트 연결 실패: SASL 인증 정보 및 네트워크 정책 확인
  • 성능 문제: 리소스 설정 및 JVM 힙 크기 조정

2) 로그 확인

# Kafka 로그 확인
kubectl logs -n kafka kafka-controller-0

# 모든 Kafka 노드 상태 확인
kubectl get pods -n kafka -l app.kubernetes.io/name=kafka

3) 토픽 관리

# 토픽 생성
kubectl exec -it kafka-controller-0 -n kafka -- kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 3

# 토픽 목록 확인
kubectl exec -it kafka-controller-0 -n kafka -- kafka-topics.sh --list --bootstrap-server localhost:9092