Data Streaming · Kafka ·
[Kubernetes] Strimzi Operator(0.45.0)
Helm 설치 및 설명 참고 {: .prompt-info }
설치 방법 #
- Operator Yaml (
strimzi-cluster-operator-0.45.0.yaml) - Helm (
strimzi-kafka-operator-helm-3-chart-0.45.0.tgz) - cluster-operator Yaml 파일 (https://github.com/strimzi/strimzi-kafka-operator/tree/main/install/cluster-operator)
Strimzi Release 참고 - https://github.com/strimzi/strimzi-kafka-operator/releases {: .prompt-info }
Operator Yaml로 설치 #
Namespace kafka에 설치 #
1kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka특정 Namespace 또는 여러 Namespace 관리 #
watchNamespaces- 특정 Namespace에서만 Resource를 감시(watch)하도록 지정하는 기능
watchAnyNamespace- Kafka 및 관련 Resource를 관리할 때, 여러 Namespace에서 발생하는 변경 사항을 감시(watch)할 수 있도록 설정하는 옵션
- 여러 Namespace에서 Kafka 관련 Resource의 생성, 삭제, 업데이트 등을 실시간으로 추적할 수 있다.
1# If you set `watchNamespaces` to the same value as ``.Release.Namespace` (e.g. `helm ... --namespace $NAMESPACE`),
2# the chart will fail because duplicate RoleBindings will be attempted to be created in the same namespace
3watchNamespaces: []
4watchAnyNamespace: falsevalues yaml 참고 - https://github.com/strimzi/strimzi-kafka-operator/blob/main/helm-charts/helm3/strimzi-kafka-operator/values.yaml {: .prompt-info }
확인 #
1kubectl get pod -n kafka --watchLog 확인 #
1kubectl logs deployment/strimzi-cluster-operator -n kafka -fStorage Class 세팅 (Storage Class 및 PersistentVolume 세팅이 되어 있지 않다면) #
1kind: StorageClass
2apiVersion: storage.k8s.io/v1
3metadata:
4 name: local-storage
5provisioner: kubernetes.io/no-provisioner
6volumeBindingMode: WaitForFirstConsumerPatch Storage Class #
1kubectl patch storageclass local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'확인 #
1kubectl get sc
2
3NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
4local-storage (default) kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 3h16mPersistentVolume 세팅 #
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: kafka-pv-volume
5 labels:
6 type: local
7spec:
8 storageClassName: local-storage
9 capacity:
10 storage: 10Gi
11 accessModes:
12 - ReadWriteOnce
13 hostPath:
14 path: "/mnt/data"
15---
16apiVersion: v1
17kind: PersistentVolume
18metadata:
19 name: kafka-pv-volume-2
20 labels:
21 type: local
22spec:
23 storageClassName: local-storage
24 capacity:
25 storage: 10Gi
26 accessModes:
27 - ReadWriteOnce
28 hostPath:
29 path: "/mnt/data"
30---
31apiVersion: v1
32kind: PersistentVolume
33metadata:
34 name: kafka-pv-volume-3
35 labels:
36 type: local
37spec:
38 storageClassName: local-storage
39 capacity:
40 storage: 10Gi
41 accessModes:
42 - ReadWriteOnce
43 hostPath:
44 path: "/mnt/data"Kafka Single Node - kraft 모드 #
Kafka Single Node Yaml 파일 수정 및 참고 - kraft 모드 #
1apiVersion: kafka.strimzi.io/v1beta2
2kind: KafkaNodePool
3metadata:
4 name: dual-role
5 labels:
6 strimzi.io/cluster: my-cluster
7spec:
8 replicas: 1
9 roles:
10 - controller
11 - broker
12 storage:
13 type: jbod
14 volumes:
15 - id: 0
16 type: persistent-claim
17 class: local-storage
18 size: 10Gi
19 deleteClaim: false
20 kraftMetadata: shared
21---
22
23apiVersion: kafka.strimzi.io/v1beta2
24kind: Kafka
25metadata:
26 name: my-cluster
27 annotations:
28 strimzi.io/node-pools: enabled
29 strimzi.io/kraft: enabled
30spec:
31 kafka:
32 version: 3.9.0
33 metadataVersion: 3.9-IV0
34 listeners:
35 - name: plain
36 port: 9092
37 type: internal
38 tls: false
39 - name: tls
40 port: 9093
41 type: internal
42 tls: true
43 template:
44 pod:
45 securityContext:
46 runAsUser: 0
47 config:
48 offsets.topic.replication.factor: 1
49 transaction.state.log.replication.factor: 1
50 transaction.state.log.min.isr: 1
51 default.replication.factor: 1
52 min.insync.replicas: 1
53 entityOperator:
54 topicOperator: {}
55 userOperator: {}참고 - https://github.com/strimzi/strimzi-kafka-operator/tree/main/examples/kafka/kraft {: .prompt-info }
Kafka Single Node 설치 - kraft 모드 #
1kubectl apply -f https://strimzi.io/examples/latest/kafka/kraft/kafka-single-node.yaml -n kafka 준비될 때까지 기다리기 #
1kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka Kafka - kraft 모드 #
Kafka Yaml 파일 수정 및 참고 - kraft 모드 #
1apiVersion: kafka.strimzi.io/v1beta2
2kind: KafkaNodePool
3metadata:
4 name: controller
5 labels:
6 strimzi.io/cluster: my-cluster
7spec:
8 replicas: 3
9 roles:
10 - controller
11 storage:
12 type: jbod
13 volumes:
14 - id: 0
15 type: persistent-claim
16 size: 100Gi
17 kraftMetadata: shared
18 deleteClaim: false
19---
20
21apiVersion: kafka.strimzi.io/v1beta2
22kind: KafkaNodePool
23metadata:
24 name: broker
25 labels:
26 strimzi.io/cluster: my-cluster
27spec:
28 replicas: 3
29 roles:
30 - broker
31 storage:
32 type: jbod
33 volumes:
34 - id: 0
35 type: persistent-claim
36 size: 100Gi
37 kraftMetadata: shared
38 deleteClaim: false
39---
40
41apiVersion: kafka.strimzi.io/v1beta2
42kind: Kafka
43metadata:
44 name: my-cluster
45 annotations:
46 strimzi.io/node-pools: enabled
47 strimzi.io/kraft: enabled
48spec:
49 kafka:
50 version: 3.9.0
51 metadataVersion: 3.9-IV0
52 listeners:
53 - name: plain
54 port: 9092
55 type: internal
56 tls: false
57 - name: tls
58 port: 9093
59 type: internal
60 tls: true
61 config:
62 offsets.topic.replication.factor: 3
63 transaction.state.log.replication.factor: 3
64 transaction.state.log.min.isr: 2
65 default.replication.factor: 3
66 min.insync.replicas: 2
67 entityOperator:
68 topicOperator: {}
69 userOperator: {}참고 - https://github.com/strimzi/strimzi-kafka-operator/tree/main/examples/kafka/kraft {: .prompt-info }
Kafka 설치 - kraft 모드 #
1kubectl apply -f https://strimzi.io/examples/latest/kafka/kraft/kafka.yaml -n kafka 준비될 때까지 기다리기 #
1kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka Advertisement