kafka

using helm deploy kafka on kubernetes

PSAwesome 2022. 12. 25. 02:19
반응형

 

1. PersistentVolume

kafka, zookeeper PersistentVolume 정의 및 생성

(본문 내에 claimRef는 중복이니 편하신 방법으로 생성하시면 됩니다.)

1-1 kafka data persistent volume

# vim kafka-persistent-volume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  namespace: kafka
  name: kafka-pv
  labels:
    name: kafka
spec:
  storageClassName: kafka-data
  capacity:
    storage: 2Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  claimRef:
    namespace: kafka
    name: kafka-data-pvc
  persistentVolumeReclaimPolicy: Delete
  hostPath:
    path: /data/kafka/data
    type: DirectoryOrCreate


---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kafka-data-pvc
  namespace: kafka
spec:
  storageClassName: kafka-data
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

 

1-2 zookeeper data persistent volume

# vim zoo-persistent-volume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  namespace: kafka
  name: kafka-zoo-pv
  labels:
    name: kafka
spec:
  storageClassName: kafka-zoo
  capacity:
    storage: 2Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  claimRef:
    namespace: kafka
    name: kafka-zoo-pvc
  persistentVolumeReclaimPolicy: Delete
  hostPath:
    path: /data/kafka/zoo
    type: DirectoryOrCreate


---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kafka-zoo-pvc
  namespace: kafka
spec:
  storageClassName: kafka-zoo
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

 

2. values.yaml - for helm

helm을 생성할 때 설정 값을 변경합니다.

persistence:
  enabled: true
  existingClaim: kafka-data-pvc

zookeeper:
  persistence:
    existingClaim: kafka-zoo-pvc

externalAccess:
  enabled: true
  service:
    type: NodePort
    nodePorts:
      - 30909
    domain: '192.168.1.1'
  serviceAccount:
    create: true
  rbac:
    create: true

podSecurityContext:
  enabled: true
  fsGroup: 1001    #makesfilesystem as root user
  runAsUser: 1001
  • podSecurityContext
    • 디렉터리 생성 시 root 권한으로 생성
    • 이 값은 `mkdir: cannot create directory ‘/bitnami/kafka’: Permission denied’` 오류로 추가했습니다.
sudo chwown -R 1001:1001 /data/kafka
  • 추가로, /data/kafka 디렉터리 소유주도 변경했습니다.

 

지금까지 정의한 PersistentVolume 및 Claim을 생성합니다.

kubectl apply -f .
  • 현재 디렉터리 안에 위 yaml 파일이 정의되어 있다고 가정했습니다.

 

3. helm install

helm install kafka -f values.yaml bitnami/kafka -n kafka

 

4. testing

이후는 생성 후 표시되는 가이드를 따릅니다.

호스트의 정보는 각자 환경마다 다를 수 있습니다.

 

client 실행 후 접속

kubectl run ps-xyz-kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.3.1-debian-11-r22 --namespace kafka --command -- sleep infinity

kubectl exec --tty -i ps-xyz-kafka-client --namespace kafka -- bash

 

메시지 전송

kafka-console-producer.sh  --broker-list kafka-0.kafka-headless.kafka.svc.cluster.local:9092  --topic test

>hello world

 

메시지 수신 (새로운 terminal 접속)

kafka-console-consumer.sh --bootstrap-server kafka.kafka.svc.cluster.local:9092    --topic test    --from-beginning

테스트

 

 

접속 가능한 포트 확인

$(kubectl get svc --namespace kafka -l "app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/component=kafka,pod" -o jsonpath='{.items[*].spec.ports[0].nodePort}' | tr ' ' '\n')"
  • 명령어 입력 시 port 번호를 출력해줍니다.

 

 

 

 

 

 

 

 

 

issue

 

pvc가 연결된 상태에서 persistent volume은 지워지지 않음.

 

kubectl get pvc -n kafka

kubectl delete --all -n kafka

 

 

참고

- https://techoverflow.net/2020/01/28/how-to-fix-bitnami-mariadb-mkdir-cannot-create-directory-bitnami-mariadb-permission-denied/ 

- https://kubernetes.io/docs/tasks/run-application/scale-stateful-set/

- https://gajy.tistory.com/50

 

반응형