코드를 작성하다보면 반복되는 작업이 있기 마련이다.
본 글에서는 이전에 포스트했던 Kafka 설정 파일에서 zookeeper와 kafka 개수에 대한 pvc, pv 생성 yaml파일을 자동 작성되도록 shell을 작성하였다.
코드 순서
- pv.yaml 파일 제거
- storage class 생성 코드 작성
- 반복문 이용해 zookeeper에 대한 pv, pvc 코드 작성
- 반복문 이용해 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개수>