From 02e7a7f905c5377c7cf8ea11d66ceebc762a0ac1 Mon Sep 17 00:00:00 2001 From: wbsong111 Date: Mon, 8 Sep 2025 09:32:24 +0900 Subject: [PATCH] Add custom-values.yaml, README.md --- charts/strimzi-kafka-operator/BUILD-README.md | 89 +++++ .../strimzi-kafka-operator/CUSTOM-README.md | 310 ++++++++++++++++++ .../strimzi-kafka-operator/custom-values.yaml | 33 ++ 3 files changed, 432 insertions(+) create mode 100644 charts/strimzi-kafka-operator/BUILD-README.md create mode 100644 charts/strimzi-kafka-operator/CUSTOM-README.md create mode 100644 charts/strimzi-kafka-operator/custom-values.yaml diff --git a/charts/strimzi-kafka-operator/BUILD-README.md b/charts/strimzi-kafka-operator/BUILD-README.md new file mode 100644 index 0000000..2265f42 --- /dev/null +++ b/charts/strimzi-kafka-operator/BUILD-README.md @@ -0,0 +1,89 @@ +# strimzi-kafka-operator 버전 갱신 가이드 + +## 1. git 작업 환경 구성 + +- 서비스 카탈로그 git 다운로드 +``` +$ git clone https://github.com/paasup/service-catalog.git +``` + +- 작업 브랜치로 체크아웃 +``` +$ git checkout -b update-strimzi-kafka-operator/0.47.0 +``` + +## 2. helm chart 업데이트 + +### 1) 차트 버전 변경 + +- BUILD-README.md, CUSTOM-README.md를 제외한 파일 삭제 + ``` sh + # chart 디렉토리로 이동 + cd ~/service-catalog/charts/strimzi-kafka-operator + + # 파일 삭제 전 삭제할 파일 목록 확인 + find . -mindepth 1 \( -name "CUSTOM-README.md" -o -name "BUILD-README.md" \) -prune -o -print + + # 파일 삭제 + find . -mindepth 1 \( -name "CUSTOM-README.md" -o -name "BUILD-README.md" \) -prune -o -exec rm -rf {} + + ``` + +- strimzi/strimzi-kafka-operator 차트 다운로드 + ``` sh + # charts 디렉토리로 이동 + cd ~/service-catalog/charts + + # helm repo 추가 + helm repo add strimzi https://strimzi.io/charts/ + helm repo update + + # helm 차트 다운로드 + helm pull strimzi/strimzi-kafka-operator --version="0.47.0" + + # 차트 압축 해제 + tar xzvf strimzi-kafka-operator*.tgz + + # 필요 없는 파일 삭제 + rm strimzi-kafka-operator-*.tgz + ``` + + +## 2. git push 및 tag 추가 + +- 갱신작업 진행후 commit +``` +$ git add . +$ git commit -m "update strimzi-kafka-operator/0.47.0-1" +``` + +- main 브랜치에 체크아웃 후 merge +``` +$ git checkout main +$ git merge update-strimzi-kafka-operator/0.47.0-1 +``` + +- git에 push 후 작업 브랜치 삭제 +``` +$ git push -u origin main +$ git branch -d update-strimzi-kafka-operator/0.47.0-1 +``` + +- git tag 추가 후 push +``` +$ git tag strimzi-kafka-operator/0.47.0-1 +$ git push origin strimzi-kafka-operator/0.47.0-1 +``` + +## 3. 차트 버전 정보 + +- strimzi-kafka-operator/0.47.0 + - Apache Kafka 클러스터 운영을 위한 Strimzi Cluster Operator 배포 + - KRaft 모드 지원 (ZooKeeper 없이 Kafka 실행 가능) + - 서비스 배포를 위하여 custom-values.yaml에 정의하였다. + - 차트의 빌드 방법과 배포 방법을 BUILD-README.md, CUSTOM-README.md 문서에 작성하였다. + - Kafka Connect, MirrorMaker 2, Kafka Bridge, Cruise Control 등 다양한 Kafka 생태계 컴포넌트 지원 + +- strimzi-kafka-operator/0.47.0-1 + - 배포 가이드 문서 개선 + - custom-values.yaml 템플릿 추가 + - 환경별 설정 가이드 보완 \ No newline at end of file diff --git a/charts/strimzi-kafka-operator/CUSTOM-README.md b/charts/strimzi-kafka-operator/CUSTOM-README.md new file mode 100644 index 0000000..ae4b4af --- /dev/null +++ b/charts/strimzi-kafka-operator/CUSTOM-README.md @@ -0,0 +1,310 @@ + +# Strimzi Kafka Operator 배포 + +## 1. 배포 방법 + +### 1) 배포시 주의 사항 +- Strimzi Kafka Operator는 Kubernetes 1.25+ 버전이 필요합니다. +- CRD(Custom Resource Definitions) 업데이트가 필요할 수 있으므로 배포 전 확인이 필요합니다. +- 클러스터 범위 리소스 생성 권한이 필요합니다. +- ZooKeeper 기반 클러스터 지원이 제거되었으므로 KRaft 모드를 사용해야 합니다. + +### 2) CRD 업데이트 방법 +- Helm 업그레이드 시 CRD는 자동으로 업데이트되지 않으므로 수동으로 적용해야 합니다. + +```sh +# CRD 수동 업데이트 +kubectl apply -f https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.47.0/strimzi-crds-0.47.0.yaml +``` + +### 3) 배포 방법 +```sh +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 파일의 예시입니다: + +```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` | + +#### 네임스페이스 감시 설정 예시 + +**전체 클러스터 감시 (기본 설정):** +```yaml +watchAnyNamespace: true +watchNamespaces: [] # 이 값은 무시됨 +``` + +**특정 네임스페이스만 감시:** +```yaml +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 클러스터 생성 + +```yaml +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) 로그 확인 +```sh +# Operator 로그 확인 +kubectl logs -n kafka deployment/strimzi-cluster-operator + +# Kafka 클러스터 상태 확인 +kubectl get kafka -n kafka +kubectl describe kafka my-cluster -n kafka +``` + +### 3) 리소스 상태 확인 +```sh +# 모든 Strimzi 리소스 확인 +kubectl get strimzi -n kafka + +# 특정 리소스 상태 확인 +kubectl get kafkatopic -n kafka +kubectl get kafkauser -n kafka \ No newline at end of file diff --git a/charts/strimzi-kafka-operator/custom-values.yaml b/charts/strimzi-kafka-operator/custom-values.yaml new file mode 100644 index 0000000..a129971 --- /dev/null +++ b/charts/strimzi-kafka-operator/custom-values.yaml @@ -0,0 +1,33 @@ +# Global 설정 +defaultImageRegistry: "" # paasup.io (오프라인 환경에서 설정) +defaultImageRepository: "strimzi" +defaultImageTag: "0.47.0" + +# Operator 기본 설정 +replicas: 1 +watchNamespaces: [] +watchAnyNamespace: true + +# 로그 설정 +logLevel: INFO +logConfiguration: "" + +# 타임아웃 설정 +fullReconciliationIntervalMs: 120000 +operationTimeoutMs: 300000 + +# 리소스 설정 +resources: + limits: + memory: 384Mi + cpu: 1000m + requests: + memory: 384Mi + cpu: 200m + +# 환경 변수 (선택사항) +extraEnvs: [] +# extraEnvs: +# - name: JAVA_OPTS +# value: "-Xms256m -Xmx256m" +