Kubernetes(K8S) Kafka – Shell 이용해 자동 yaml파일 생성

코드를 작성하다보면 반복되는 작업이 있기 마련이다.
본 글에서는 이전에 포스트했던 Kafka 설정 파일에서 zookeeper와 kafka 개수에 대한 pvc, pv 생성 yaml파일을 자동 작성되도록 shell을 작성하였다.

코드 순서

  1. pv.yaml 파일 제거
  2. storage class 생성 코드 작성
  3. 반복문 이용해 zookeeper에 대한 pv, pvc 코드 작성
  4. 반복문 이용해 kafka에 대한 pv, pvc 코드 작성
#!/bin/sh
rm -rf pv.yaml;

cat >pv.yaml <<EOL
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: kafka-storage
reclaimPolicy: Delete
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - debug
volumeBindingMode: Immediate
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: zoo-storage
reclaimPolicy: Delete
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - debug
volumeBindingMode: Immediate
EOL

zoo_num=$1;

for ((i=0;i<zoo_num;i++));
do

cat  << EOL >> pv.yaml
---
apiVersion: v1
# Kind for volume chain
kind: PersistentVolume
metadata:
  # Name the persistent chain
  name: data-my-cluster-zookeeper-pv-$i
spec:
  storageClassName: zoo-storage
  capacity:
    # PV Storage capacity
    storage: 5Gi
  # A db can write and read from volumes to multiple pods
  accessModes:
    - ReadWriteOnce
  # Specify the path to persistent the volumes  
  hostPath:
    path: "/var/lib/zookeeper"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-my-cluster-zookeeper-$i
spec:
  storageClassName: zoo-storage
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
EOL
done

kafka_num=$2;
for ((i=0;i<$kafka_num;i++));
do
cat  << EOL >> pv.yaml
---
apiVersion: v1
# Kind for volume chain
kind: PersistentVolume
metadata:
  # Name the persistent chain
  name: data-0-my-cluster-kafka-pv-$i
spec:
  storageClassName: kafka-storage
  capacity:
    # PV Storage capacity
    storage: 5Gi
  # A db can write and read from volumes to multiple pods
  accessModes:
    - ReadWriteOnce
  # Specify the path to persistent the volumes  
  hostPath:
    path: "/var/lib/kafka"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-0-my-cluster-kafka-$i
spec:
  storageClassName: kafka-storage
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
EOL
done

사용법

. generator.sh <zookeeper개수> <kafka개수>

Leave a Comment