zookeeper 설정
2025. 2. 28. 14:25ㆍk8s/Kafka
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: zookeeper-config
namespace: kafka
data:
ZOOKEEPER_CLIENT_PORT: "2181"
ZOOKEEPER_TICK_TIME: "2000"
ZOOKEEPER_INIT_LIMIT: "5"
ZOOKEEPER_SYNC_LIMIT: "2"
ZOOKEEPER_SERVERS: |
# ZOOKEEPER_SERVER_ID는 1부터 시작함
# pod의 hostname은 0부터 시작함
server.1=zookeeper-0.zookeeper-headless:2888:3888
server.2=zookeeper-1.zookeeper-headless:2888:3888
server.3=zookeeper-2.zookeeper-headless:2888:3888
StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: zookeeper
namespace: kafka
spec:
serviceName: zookeeper-headless
replicas: 3
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
spec:
terminationGracePeriodSeconds: 30
containers:
- name: zookeeper
image: confluentinc/cp-zookeeper:{tag}
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: peer
- containerPort: 3888
name: leader-election
envFrom:
- configMapRef:
name: zookeeper-config
command:
- "/bin/bash"
- "-c"
- |
export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1))
echo "Starting Zookeeper with Server ID: $ZOOKEEPER_SERVER_ID"
echo $ZOOKEEPER_SERVER_ID > /var/lib/zookeeper/myid
exec /etc/confluent/docker/run
volumeMounts:
- name: data
mountPath: /var/lib/zookeeper
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
storageClassName: zookeeper-storage
resources:
requests:
storage: 5Gi
StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: zookeeper-storage
provisioner: nfs.csi.k8s.io # Use the correct NFS CSI driver
reclaimPolicy: Retain
volumeBindingMode: Immediate
PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: zookeeper-pv-0
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
storageClassName: zookeeper-storage # Changed from nfs-storage to zookeeper-storage
persistentVolumeReclaimPolicy: Retain
claimRef:
namespace: kafka
name: data-zookeeper-0 # Ensures only this PVC binds to this PV
nfs:
path: /mnt/nfs/zookeeper-0
server: <NFS_SERVER_IP>
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: zookeeper-pv-1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
storageClassName: zookeeper-storage
persistentVolumeReclaimPolicy: Retain
claimRef:
namespace: kafka
name: data-zookeeper-1
nfs:
path: /mnt/nfs/zookeeper-1
server: <NFS_SERVER_IP>
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: zookeeper-pv-2
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
storageClassName: zookeeper-storage
persistentVolumeReclaimPolicy: Retain
claimRef:
namespace: kafka
name: data-zookeeper-2
nfs:
path: /mnt/nfs/zookeeper-2
server: <NFS_SERVER_IP>
Service
apiVersion: v1
kind: Service
metadata:
name: zookeeper-headless
namespace: kafka
labels:
app: zookeeper
spec:
ports:
- port: 2181
name: client
- port: 2888
name: peer
- port: 3888
name: leader-election
selector:
app: zookeeper
clusterIP: None # Headless service for StatefulSet