Provisioning, Strimzi

Jeonghak Choยท2025๋…„ 7์›” 20์ผ

Provisioning

๋ชฉ๋ก ๋ณด๊ธฐ
42/44

๐Ÿ“— ํ”„๋กœ๋น„์ €๋‹ - Strimzi

๐Ÿณ๏ธโ€๐ŸŒˆ [๊ถ๊ธˆํ•œ์ ]

  • Strimzi๋ฅผ ์ด์šฉํ•œ Kafka ์„ค์น˜ ๋ฐฉ๋ฒ•

๐Ÿ”—[๋ชฉ์ฐจ]

1๏ธโƒฃ ์ค€๋น„

Strimzi StorageClass

์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” CSI๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • sc ์ •์˜ (dev-strimzi-sc.yml)
apiVersion: storage.k8s.io/v1
kind: StorageClass
reclaimPolicy: Delete  
metadata:
  name: dev-strimzi-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
  • sc ์ƒ์„ฑ
k apply -f dev-strimzi-sc.yml

Strimzi ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ

  • ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ (slave1)
sudo mkdir /tmp/dev-strimzi-data1
sudo chown -R 1001:1001 /tmp/dev-strimzi-data1

ls -ld /tmp/dev-strimzi-data1
drwxr-xr-x 2 1001 1001 4096 Jun  7 01:43 /tmp/dev-strimzi-data1

Strimzi PV ์ƒ์„ฑ

k apply -f dev-strimzi-pv.yaml

persistentvolume/dev-strimzi-pv1 created

k get pv
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                 STORAGECLASS              REASON   AGE
mypv1           2Gi        RWO            Retain           Bound       kafka/data-0-my-cluster-dual-role-0   local-storage-del                  34d

Strimzi ์ฐจํŠธ ๋‹ค์šด๋กœ๋“œ

helm pull oci://quay.io/strimzi-helm/strimzi-kafka-operator --untar --version 0.47.0

Pulled: quay.io/strimzi-helm/strimzi-kafka-operator:0.47.0
Digest: sha256:b57f1f204446c4cdb8aa0cbb3e85f59daafc26d460bfcaf5bafe6631a7fa5ad4

cd strimzi-kafka-operator

2๏ธโƒฃ ์„ค์ •

Strimzi ์‚ฌ์šฉ์ž Values ํŒŒ์ผ ์ƒ์„ฑ

cp values.yaml dev-strimzi-values.yaml
  • dev-strimzi-values.yaml ํŒŒ์ผ ํŽธ์ง‘
  • ์•„๋ž˜ ๋‚ด์šฉ ๋‚จ๊ธฐ๊ณ  ์‚ญ์ œ
replicas: 1

3๏ธโƒฃ ์„ค์น˜

Strimzi ์„ค์น˜ (standalone)

helm install my-kafka . -n kafka --create-namespace -f dev-strimzi-values.yaml

NAME: my-kafka
LAST DEPLOYED: Sun Jul 20 16:08:52 2025
NAMESPACE: kafka
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing strimzi-kafka-operator-0.47.0

To create a Kafka cluster refer to the following documentation.

https://strimzi.io/docs/operators/latest/deploying.html#deploying-cluster-operator-helm-chart-str

Strimzi POD ํ™•์ธ

k get po -n kafka -l name=strimzi-cluster-operator

NAME READY STATUS RESTARTS AGE
strimzi-cluster-operator-7dbb969fc-7j97f 1/1 Running 0 60s

> ## Strimzi ์ฐจํŠธ ๋ฒ„์ „
``` bash
helm ls -n kafka -l name=my-kafka

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
my-kafka        kafka           1               2025-07-20 16:08:52.648176422 +0900 KST deployed        strimzi-kafka-operator-0.47.0   0.47.0

Kafka CR ์„ค์น˜

  • kafka cr ์ •์˜ (kafka-cr.yml)
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
  name: dual-role
  namespace: kafka
  labels:
    strimzi.io/cluster: my-cluster
spec:
  replicas: 1
  roles:
    - controller
    - broker
  storage:
    type: jbod
    volumes:
      - id: 0
        type: persistent-claim
        size: 2Gi
        deleteClaim: false
        kraftMetadata: shared
---

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: kafka
  annotations:
    strimzi.io/node-pools: enabled
    strimzi.io/kraft: enabled
spec:
  kafka:
    version: 4.0.0
    metadataVersion: 4.0-IV3
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
    config:
      offsets.topic.replication.factor: 1
      transaction.state.log.replication.factor: 1
      transaction.state.log.min.isr: 1
      default.replication.factor: 1
      min.insync.replicas: 1
  entityOperator:
    topicOperator: {}
    userOperator: {}        
  • kafka cr ์ƒ์„ฑ
k apply -f kafka-cr.yml -n kafka

kafkanodepool.kafka.strimzi.io/dual-role created
kafka.kafka.strimzi.io/my-cluster created
  • kafka cr ์ƒ์„ฑ ํ™•์ธ
k get po -n kafka -w

NAME                                          READY   STATUS    RESTARTS   AGE
my-cluster-dual-role-0                        1/1     Running   0          97s
my-cluster-entity-operator-7d6d6dcd88-mvf2l   2/2     Running   0          28s
strimzi-cluster-operator-7dbb969fc-7j97f      1/1     Running   0          36m

4๏ธโƒฃ ๊ฒ€์ฆ

Strimzi ๋กœ๊ทธ ํ™•์ธ

kubectl logs deployment/strimzi-cluster-operator -n kafka -f
...
2025-07-20 07:08:56 INFO  StrimziPodSetController:525 - Waiting for informers to sync
2025-07-20 07:08:56 INFO  ClusterOperator:109 - Opened watch for Kafka operator
2025-07-20 07:08:56 INFO  ClusterOperator:109 - Opened watch for KafkaConnect operator

ํ”„๋กœ๋“€์„œ ์„ค์น˜

kubectl -n kafka run kafka-producer -ti --image=quay.io/strimzi/kafka:0.47.0-kafka-4.0.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic
If you don't see a command prompt, try pressing enter.
>my message

์ปจ์Šˆ๋จธ ์„ค์น˜

kubectl -n kafka run kafka-consumer -ti --image=quay.io/strimzi/kafka:0.47.0-kafka-4.0.0 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
If you don't see a command prompt, try pressing enter.

my message

5๏ธโƒฃ ์‚ญ์ œ

  • Cluster Role, Cluster Role Binding ์‚ญ์ œ
kubectl get clusterrole -o name | grep '^clusterrole.rbac.authorization.k8s.io/strimzi' | xargs kubectl delete
kubectl get clusterrolebinding -o name | grep '^clusterrolebinding.rbac.authorization.k8s.io/strimzi' | xargs kubectl delete
  • ํด๋Ÿฌ์Šคํ„ฐ ์‚ญ์ œ
kubectl -n kafka delete $(kubectl get strimzi -o name -n kafka)
  • PVC ์‚ญ์ œ
kubectl delete pvc -l strimzi.io/name=my-cluster-kafka -n kafka

์ฐธ๊ณ 

์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด

# helm ์‚ญ์ œ ํ›„ ์žฌ ์ƒ์„ฑ
helm delete my-kafka -n kafka
helm install my-kafka . -n kafka -f dev-strimzi-values.yaml --create-namespace

# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์šฐ  - Released ์ƒํƒœ์˜ pv Available๋กœ ๋ณ€๊ฒฝ 
rm -rf /tmp/dev-strimzi-pv1/*
kubectl patch pv mypv1 -p '{"spec":{"claimRef": null}}'

# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์šฐ - PV ์ƒ์„ฑ
k apply -f dev-strimzi-dev.yaml

# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์šฐ - pv ์ „์ฒด ์‚ญ์ œ
k delete -f dev-strimzi-dev.yaml

# PVC ์ „์ฒด ์‚ญ์ œ
k delete pvc -n my-dev data-my-strimzi-{0..3}

## ๊ธฐ๋ณธ storageclass ์ง€์ •
kubectl patch storageclass local-storage-del \
  -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class":"true"}}}'
 
## node hostPath ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
sudo mkdir /tmp/mypv{1..10}
sudo chown -R 1001:1001 /tmp/mypv{1..10}

## PV Released ํŒจ์น˜
kubectl patch pv mypv1 -p '{"spec":{"claimRef": null}}'

## ๋ฒ„์ „ ํ™•์ธ
kubectl -n kafka get deploy strimzi-cluster-operator -o=jsonpath='{.spec.template.spec.containers[0].image}'
quay.io/strimzi/operator:0.47.0

0๊ฐœ์˜ ๋Œ“๊ธ€