최신 버전 Strimzi 1.2.0 (Kafka 4.2 · 4.3) — 2026-09-20 확인. https://github.com/strimzi/strimzi-kafka-operator/releases/latest . Strimzi 0.46 부터 ZooKeeper 기반 클러스터를 지원하지 않는다. 아래 예제(
zookeeper:절, Kafka 3.1.0)는 0.45 이하에서만 동작하며, 현행에서는 KRaft 모드(KafkaNodePool+strimzi.io/kraft: enabled)로 만든다.
https://strimzi.io/downloads/ 참조
CustomResourceDefinitions / ClusterRoles / ClusterRoleBindings 배포
install/cluster-operator 아래 롤 바인딩과 관련된 모든 파일의 namespace 변경
sed -i 's/namespace: .*/namespace: $NAMESPACE/' install/cluster-operator/*RoleBinding*.yaml
sed -i 's/namespace: .*/namespace: kafka/' install/cluster-operator/*RoleBinding*.yaml
cluster-operator 배포
kubectl create -f install/cluster-operator -n $NAMESPACE # install/cluster-operator 디렉토리의 모든 yaml 파일을 배포한다.
kubectl create -f install/cluster-operator -n kafka
NAME READY STATUS RESTARTS AGE
pod/strimzi-cluster-operator-7599bc57cb-rjxz7 1/1 Running 0 2m30s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/strimzi-cluster-operator 1/1 1 1 2m30s
NAME DESIRED CURRENT READY AGE
replicaset.apps/strimzi-cluster-operator-7599bc57cb 1 1 1 2m30s
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
version: 3.1.0
replicas: 3
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
### 외부 연결을 위한 노드 포트가 필요한 경우 여기부터
- name: external
port: 9099
type: nodeport
tls: false
configuration:
bootstrap:
nodePort: 30099
### 여기까지 추가한다
config:
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
default.replication.factor: 3
min.insync.replicas: 2
inter.broker.protocol.version: "3.1"
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 10Gi
deleteClaim: false
zookeeper:
replicas: 3
storage:
type: persistent-claim
size: 10Gi
deleteClaim: false
entityOperator:
topicOperator: {}
userOperator: {}
kubectl apply -f examples/kafka/kafka-persistent.yaml -n kafka
NAME READY STATUS RESTARTS AGE
pod/my-cluster-entity-operator-67cbb8f86f-ftz8r 3/3 Running 0 3m10s
pod/my-cluster-kafka-0 1/1 Running 0 5m34s
pod/my-cluster-kafka-1 1/1 Running 0 5m34s
pod/my-cluster-kafka-2 1/1 Running 0 5m34s
pod/my-cluster-zookeeper-0 1/1 Running 0 7m7s
pod/my-cluster-zookeeper-1 1/1 Running 3 (6m30s ago) 7m7s
pod/my-cluster-zookeeper-2 1/1 Running 0 7m7s
pod/strimzi-cluster-operator-7599bc57cb-rjxz7 1/1 Running 0 57m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-cluster-kafka-bootstrap ClusterIP 10.111.125.97 <none> 9091/TCP,9092/TCP,9093/TCP 5m35s
service/my-cluster-kafka-brokers ClusterIP None <none> 9090/TCP,9091/TCP,9092/TCP,9093/TCP 5m35s
service/my-cluster-kafka-external-0 NodePort 10.111.164.120 <none> 9099:30131/TCP 5m35s
service/my-cluster-kafka-external-1 NodePort 10.100.176.75 <none> 9099:30406/TCP 5m35s
service/my-cluster-kafka-external-2 NodePort 10.98.27.200 <none> 9099:31214/TCP 5m35s
service/my-cluster-kafka-external-bootstrap NodePort 10.106.150.134 <none> 9099:30099/TCP 5m35s
service/my-cluster-zookeeper-client ClusterIP 10.107.41.62 <none> 2181/TCP 7m8s
service/my-cluster-zookeeper-nodes ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP 7m8s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-cluster-entity-operator 1/1 1 1 3m10s
deployment.apps/strimzi-cluster-operator 1/1 1 1 57m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-cluster-entity-operator-67cbb8f86f 1 1 1 3m10s
replicaset.apps/strimzi-cluster-operator-7599bc57cb 1 1 1 57m
NAME READY AGE
statefulset.apps/my-cluster-kafka 3/3 5m34s
statefulset.apps/my-cluster-zookeeper 3/3 7m7s