Add custom-values.yaml, README.md
This commit is contained in:
@@ -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 템플릿 추가
|
||||||
|
- 환경별 설정 가이드 보완
|
||||||
@@ -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` | 오프라인 설치 시에 설정. <br />paasup 설치시에는 "paasup.io"으로 설정 | `quay.io` |
|
||||||
|
| `defaultImageRepository` | 기본 이미지 리포지토리 | `strimzi` |
|
||||||
|
| `defaultImageTag` | 기본 이미지 태그 | `0.47.0` |
|
||||||
|
|
||||||
|
### 2) Operator 설정
|
||||||
|
|
||||||
|
| Name | 설명 | 기본값 |
|
||||||
|
| ------------------------- | ------------------------------------------------------------ | ----------- |
|
||||||
|
| `replicas` | Cluster Operator의 replica 수 | `1` |
|
||||||
|
| `watchAnyNamespace` | 전체 클러스터(모든 네임스페이스) 감시 여부.<br />true: 모든 네임스페이스 감시<br />false: watchNamespaces에 지정된 네임스페이스만 감시 | `true` |
|
||||||
|
| `watchNamespaces` | watchAnyNamespace가 false일 때 감시할 특정 네임스페이스 목록.<br />예: ["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
|
||||||
@@ -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"
|
||||||
|
|
||||||
Reference in New Issue
Block a user