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
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