[Kubernetes] Strimzi Operator(0.45.0)

Helm 설치 및 설명 참고 {: .prompt-info }

설치 방법 #

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

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

Log 확인 #

1kubectl logs deployment/strimzi-cluster-operator -n kafka -f

Storage Class 세팅 (Storage Class 및 PersistentVolume 세팅이 되어 있지 않다면) #

1kind: StorageClass
2apiVersion: storage.k8s.io/v1
3metadata:
4  name: local-storage
5provisioner: kubernetes.io/no-provisioner
6volumeBindingMode: WaitForFirstConsumer

Patch 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                  3h16m

PersistentVolume 세팅 #

 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