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.
 
 
 
 
 
 

12 KiB

Strimzi Kafka Operator 배포

1. 배포 방법

1) 배포시 주의 사항

  • Strimzi Kafka Operator는 Kubernetes 1.25+ 버전이 필요합니다.
  • CRD(Custom Resource Definitions) 업데이트가 필요할 수 있으므로 배포 전 확인이 필요합니다.
  • 클러스터 범위 리소스 생성 권한이 필요합니다.
  • ZooKeeper 기반 클러스터 지원이 제거되었으므로 KRaft 모드를 사용해야 합니다.

2) CRD 업데이트 방법

  • Helm 업그레이드 시 CRD는 자동으로 업데이트되지 않으므로 수동으로 적용해야 합니다.
# CRD 수동 업데이트
kubectl apply -f https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.47.0/strimzi-crds-0.47.0.yaml

3) 배포 방법

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

2. custom-values.yaml 예시

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

# Global 설정
defaultImageRegistry: ""  # paasup.io (오프라인 환경에서 설정)
defaultImageRepository: "strimzi"
defaultImageTag: "0.47.0"

# Operator 기본 설정
replicas: 1

# 네임스페이스 감시 설정
watchAnyNamespace: true  # 전체 클러스터 감시 (기본값)
watchNamespaces: []      # watchAnyNamespace가 false일 때 감시할 특정 네임스페이스 목록

# 로그 설정
logLevel: INFO
logConfiguration: ""

# 타임아웃 설정
fullReconciliationIntervalMs: 120000
operationTimeoutMs: 300000

# 리소스 설정
resources:
  limits:
    memory: 384Mi
    cpu: 1000m
  requests:
    memory: 384Mi
    cpu: 200m

# RBAC 설정
rbac:
  create: yes
serviceAccountCreate: yes
serviceAccount: strimzi-cluster-operator

# 보안 설정
createGlobalResources: true
createAggregateRoles: false

# 네트워크 정책
generateNetworkPolicy: true
generatePodDisruptionBudget: true

# 모니터링 설정 (선택사항)
dashboards:
  enabled: false
  namespace: ~
  label: grafana_dashboard
  labelValue: "1"
  annotations: {}
  extraLabels: {}

# Pod Disruption Budget
podDisruptionBudget:
  enabled: false
  minAvailable: 1
  maxUnavailable:
  unhealthyPodEvictionPolicy: IfHealthyBudget

# 고급 설정
featureGates: ""
labelsExclusionPattern: ""
connectBuildTimeoutMs: 300000

# 환경 변수 (선택사항)
extraEnvs: []
# extraEnvs:
#   - name: JAVA_OPTS
#     value: "-Xms256m -Xmx256m"

# 스케줄링 설정 (선택사항)
tolerations: []
affinity: {}
nodeSelector: {}
priorityClassName: ""

# 보안 컨텍스트 (선택사항)
podSecurityContext: {}
securityContext: {}

3. custom-values.yaml 설정 설명

1) 전역 설정

  • 오프라인 환경 배포시 사용한다.
Name 설명 기본값
defaultImageRegistry 오프라인 설치 시에 설정.
paasup 설치시에는 "paasup.io"으로 설정
quay.io
defaultImageRepository 기본 이미지 리포지토리 strimzi
defaultImageTag 기본 이미지 태그 0.47.0

2) Operator 설정

Name 설명 기본값
replicas Cluster Operator의 replica 수 1
watchAnyNamespace 전체 클러스터(모든 네임스페이스) 감시 여부.
true: 모든 네임스페이스 감시
false: watchNamespaces에 지정된 네임스페이스만 감시
true
watchNamespaces watchAnyNamespace가 false일 때 감시할 특정 네임스페이스 목록.
예: ["kafka", "streaming"]
[]
logLevel 로그 레벨 설정 INFO
fullReconciliationIntervalMs 전체 재조정 간격 (밀리초) 120000
operationTimeoutMs 작업 타임아웃 (밀리초) 300000

네임스페이스 감시 설정 예시

전체 클러스터 감시 (기본 설정):

watchAnyNamespace: true
watchNamespaces: []  # 이 값은 무시됨

특정 네임스페이스만 감시:

watchAnyNamespace: false
watchNamespaces: 
  - kafka
  - streaming
  - production

3) 이미지 설정

  • 각 컴포넌트별 이미지 설정을 오버라이드할 수 있다.
Name 설명 기본값
image.registry Cluster Operator 이미지 레지스트리 오버라이드 ""
image.repository Cluster Operator 이미지 리포지토리 오버라이드 ""
image.name Cluster Operator 이미지 이름 operator
image.tag Cluster Operator 이미지 태그 오버라이드 ""

4) 리소스 설정

Name 설명 기본값
resources.limits.memory 메모리 제한 384Mi
resources.limits.cpu CPU 제한 1000m
resources.requests.memory 메모리 요청 384Mi
resources.requests.cpu CPU 요청 200m

5) RBAC 및 보안 설정

Name 설명 기본값
rbac.create RBAC 관련 리소스 생성 여부 yes
serviceAccountCreate ServiceAccount 생성 여부 yes
serviceAccount Cluster Operator의 ServiceAccount 이름 strimzi-cluster-operator
createGlobalResources 클러스터 범위 리소스 생성 허용 true
createAggregateRoles Strimzi CRD와 상호작용하는 집계된 클러스터 역할 생성 false

6) 네트워크 및 정책 설정

Name 설명 기본값
generateNetworkPolicy Strimzi가 네트워크 정책 리소스를 생성할지 제어 true
generatePodDisruptionBudget Strimzi가 Pod Disruption Budget 리소스를 생성할지 제어 true

7) 모니터링 설정

Name 설명 기본값
dashboards.enabled Grafana 대시보드 ConfigMap 생성 false
dashboards.label 사이드카용 대시보드 레이블 grafana_dashboard
dashboards.labelValue 사이드카용 대시보드 레이블 값 "1"

8) 고급 설정

Name 설명 기본값
featureGates 기능 게이트 설정 ""
labelsExclusionPattern 일부 레이블을 제외하기 위한 패턴 오버라이드 ""
connectBuildTimeoutMs 새로운 Kafka Connect 빌드의 기본 타임아웃 값 오버라이드 300000

4. KafkaConnect 및 KafkaConnector 생성 예시

Strimzi Kafka Operator 배포 후 KafkaConnect와 KafkaConnector를 생성하는 예시:

1) KafkaConnect 클러스터 생성

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
  namespace: kafka
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  version: 3.8.0
  replicas: 3
  bootstrapServers: my-cluster-kafka-bootstrap:9092
  config:
    group.id: connect-cluster
    offset.storage.topic: connect-offsets
    config.storage.topic: connect-configs
    status.storage.topic: connect-status
    key.converter: org.apache.kafka.connect.json.JsonConverter
    value.converter: org.apache.kafka.connect.json.JsonConverter
    plugin.path: /opt/kafka/plugins
  authentication:
    type: plain
    username: user1
    passwordSecret:
        secretName: kafka-cluster-passoword-secret
        password: password
  logging:
    type: inline
    loggers:
      rootLogger.level: INFO
---
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
  name: debezium-postgres-source
  namespace: kafka
  labels:
    strimzi.io/cluster: my-connect-cluster
spec:
  class: io.debezium.connector.postgresql.PostgresConnector
  tasksMax: 1
  config:
    database.hostname: "postgresql-host"
    database.port: "5432"
    database.user: postgres
    database.password: changeme
    database.dbname: testdb
    database.server.name: pgserver1
    plugin.name: pgoutput
    slot.name: debezium_slot
    publication.autocreate.mode: filtered
    topic.prefix: pg

5. 주요 기능

1) 지원하는 Kafka 생태계 컴포넌트

  • Kafka Cluster: KRaft 모드로 실행되는 Apache Kafka 클러스터
  • Kafka Connect: 데이터 소스와 싱크 간의 데이터 이동
  • Kafka MirrorMaker 2: 서로 다른 Kafka 클러스터 간 데이터 미러링
  • Kafka Bridge: HTTP 프로토콜을 통한 Kafka 클러스터 접근
  • Cruise Control: Kafka 클러스터의 파티션 자동 밸런싱

2) 관리 기능

  • Topic Management: Kafka 토픽 생성 및 관리
  • User Management: Kafka 사용자 생성 및 관리
  • Connector Management: Kafka Connect 커넥터 생성 및 관리
  • Auto-rebalancing: 스케일 업/다운 시 자동 리밸런싱
  • Tiered Storage: 오래된 데이터를 저비용 스토리지로 오프로드

3) 모니터링 및 관찰성

  • Prometheus 모니터링: 내장된 Prometheus 모니터링 지원
  • Grafana 대시보드: Grafana 사이드카를 통한 대시보드 로딩 지원
  • JMX 메트릭: Kafka 및 관련 컴포넌트의 JMX 메트릭 노출

6. 트러블슈팅

1) 일반적인 문제

  • CRD 버전 불일치: 새 버전 배포 전 CRD를 수동으로 업데이트해야 함
  • 권한 부족: 클러스터 범위 리소스 생성 권한 필요
  • 네임스페이스 충돌: watchNamespaces.Release.Namespace가 같으면 RoleBinding 중복 생성 오류

2) 로그 확인

# Operator 로그 확인
kubectl logs -n kafka deployment/strimzi-cluster-operator

# Kafka 클러스터 상태 확인
kubectl get kafka -n kafka
kubectl describe kafka my-cluster -n kafka

3) 리소스 상태 확인

# 모든 Strimzi 리소스 확인
kubectl get strimzi -n kafka

# 특정 리소스 상태 확인
kubectl get kafkatopic -n kafka
kubectl get kafkauser -n kafka