본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Kafka_Confluent

Confluent for Kubernetes 삽질 기록

by iamlucia 2023. 10. 20.

Kubernetes 클러스터도 구축했고 CFK 도 쉽게 설치했는데

Storage 프로비저닝 설정에서 계속 막히는 중..

나중에 다 알고나면 이런 삽질을 왜 했을까 하는 시간을 갖기 위해서 삽질 기록 시작! 

 

먼저 나는 local path provisioner 를 통해 동적 볼륨 프로비저닝을 테스트해보고자 한다.

(https://github.com/rancher/local-path-provisioner)

 

이를 위한 Storage Class 를 배포하기 위해 프로비저닝 yaml 파일을 다운받았다.  (stable 버전) 

curl -O https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml

 

그리고 해당 yaml 에서 아래 부분과 같이

1) StorageClass.reclaimPolicy 부분을 Retain 으로 수정 (default: Delete 이었음)  했다. 

2) nodePathMap.paths 부분을 수정했다.

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-path
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: local-path-config
  namespace: local-path-storage
data:
  config.json: |-
    {
            "nodePathMap":[
            {
                    "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
                    "paths":["/mnt/local-path-provisioner"]
            }
            ]
    }

그리고 kubectl apply -f 를 통해 스토리지 클래스를 생성했다.

 

1차 시도: 

 

---
apiVersion: platform.confluent.io/v1beta1
kind: Zookeeper
metadata:
  name: zookeeper
  namespace: confluent
spec:
  replicas: 1
  image:
    application: confluentinc/cp-zookeeper:7.5.1
    init: confluentinc/confluent-init-container:2.7.1
  volumes:
  - name: zvol
    persistentVolumeClaim:
      claimName: local-volume-pvc
---
apiVersion: platform.confluent.io/v1beta1
kind: Kafka
metadata:
  name: kafka
  namespace: confluent
spec:
  replicas: 1
  image:
    application: confluentinc/cp-server:7.5.1
    init: confluentinc/confluent-init-container:2.7.1
  metricReporter:
    enabled: true
  dependencies:
    zookeeper:
      endpoint: zookeeper.confluent.svc.cluster.local:2181
  volumes:
  - name: kvol
    persistentVolumeClaim:
      claimName: local-volume-pvc

> 위와 같은 방법으로 kubectl apply -f 진행시 아래와 같이 해당 apiVersion 에서는 spec.volumes 지원하지 않는다는 에러 발생 

[confluent@tester105 kubernetes]$ kubectl apply -f confluent-zk-br.yml
Error from server (BadRequest): error when creating "confluent-zk-br.yml": Zookeeper in version "v1beta1" cannot be handled as a Zookeeper: strict decoding error: unknown field "spec.volumes"
Error from server (BadRequest): error when creating "confluent-zk-br.yml": Kafka in version "v1beta1" cannot be handled as a Kafka: strict decoding error: unknown field "spec.volumes"

 

2차 시도: 

---
apiVersion: platform.confluent.io/v1beta1
kind: Zookeeper
metadata:
  name: zookeeper
  namespace: confluent
spec:
  replicas: 1
  logVolumeCapacity: 2Gi
  dataVolumeCapacity: 2Gi
  image:
    application: confluentinc/cp-zookeeper:7.5.1
    init: confluentinc/confluent-init-container:2.7.1
  storageClass:
    name: local-path
---
apiVersion: platform.confluent.io/v1beta1
kind: Kafka
metadata:
  name: kafka
  namespace: confluent
spec:
  replicas: 1
  dataVolumeCapacity: 2Gi
  image:
    application: confluentinc/cp-server:7.5.1
    init: confluentinc/confluent-init-container:2.7.1
  metricReporter:
    enabled: true
  dependencies:
    zookeeper:
      endpoint: zookeeper.confluent.svc.cluster.local:2181
  storageClass:
    name: local-path

> 위와 같은 방법으로 kubectl apply -f 진행 시 zookeeper kafka pod 정상적으로 생성되며 각 파드가 떠있는 노드의 path (/mnt ) 아래에 볼륨이 생성되어있음 확인!

 

 

kubectl delete -f 로 해당 파드를 내려보니 그 파드에 붙어있던 pv들은 아래와 같이 released 상태가 되었다. 

 

kubectl delete -f 로 파드를 내린 다음, 다시 kubectl apply -f 로 파드를 올렸는데 Released 상태였던 pv 를 가져다가 쓰는게 아니라 다시 볼륨을 생성하는 것으로 확인! 

분명 statefulset 도 생겼고 pvc도 기존 꺼를 쓴 것 같은데 왜 다른 데이터를 쓰는 것으로 보이지? 

마운트된 디렉토리를 이어서 쓰는게 아닌가??

좀 더 분석이 필요 !