From c12ecf83a09c7178348f65b5dbff10814058d622 Mon Sep 17 00:00:00 2001 From: Said Sef Date: Sat, 7 Dec 2024 13:23:34 +0000 Subject: [PATCH 1/4] feat: add zookeeper cluster mode This will deploy zookeeper in cluster mode: - 3x Apache Zookeeper (accessible within the cluster only) - 2 Services (1 cluster communication, 1 client connection) - **Must have minimum of 4 nodes in K8s cluster** --- .../zookeeper-cluster/kustomization.yml | 16 ++++ deployment/zookeeper-cluster/pdb.yml | 9 ++ .../zookeeper-cluster/service-client.yml | 13 +++ .../zookeeper-cluster/service-server.yml | 16 ++++ deployment/zookeeper-cluster/zookeeper.yml | 90 +++++++++++++++++++ 5 files changed, 144 insertions(+) create mode 100644 deployment/zookeeper-cluster/kustomization.yml create mode 100644 deployment/zookeeper-cluster/pdb.yml create mode 100644 deployment/zookeeper-cluster/service-client.yml create mode 100644 deployment/zookeeper-cluster/service-server.yml create mode 100644 deployment/zookeeper-cluster/zookeeper.yml diff --git a/deployment/zookeeper-cluster/kustomization.yml b/deployment/zookeeper-cluster/kustomization.yml new file mode 100644 index 0000000..2293ab9 --- /dev/null +++ b/deployment/zookeeper-cluster/kustomization.yml @@ -0,0 +1,16 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +commonAnnotations: + app.kubernetes.io/managed-by: kustomization + +resources: +- service-client.yml +- service-server.yml +- zookeeper.yml + +# images: +# - name: zookeeper +# newName: docker.io/zookeeper +# newTag: "3.8" diff --git a/deployment/zookeeper-cluster/pdb.yml b/deployment/zookeeper-cluster/pdb.yml new file mode 100644 index 0000000..99ddb39 --- /dev/null +++ b/deployment/zookeeper-cluster/pdb.yml @@ -0,0 +1,9 @@ +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: zk-pdb +spec: + selector: + matchLabels: + app.kubernetes.io/name: zookeeper + maxUnavailable: 1 diff --git a/deployment/zookeeper-cluster/service-client.yml b/deployment/zookeeper-cluster/service-client.yml new file mode 100644 index 0000000..66b6029 --- /dev/null +++ b/deployment/zookeeper-cluster/service-client.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: zookeeper-client + labels: + app.kubernetes.io/name: zookeeper + app.kubernetes.io/part-of: nifi +spec: + ports: + - port: 2181 + name: client + selector: + app.kubernetes.io/name: zookeeper \ No newline at end of file diff --git a/deployment/zookeeper-cluster/service-server.yml b/deployment/zookeeper-cluster/service-server.yml new file mode 100644 index 0000000..548e687 --- /dev/null +++ b/deployment/zookeeper-cluster/service-server.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: zookeeper-server + labels: + app.kubernetes.io/name: zookeeper + app.kubernetes.io/part-of: nifi +spec: + ports: + - port: 2888 + name: server + - port: 3888 + name: leader-election + clusterIP: None + selector: + app.kubernetes.io/name: zookeeper diff --git a/deployment/zookeeper-cluster/zookeeper.yml b/deployment/zookeeper-cluster/zookeeper.yml new file mode 100644 index 0000000..81f44ab --- /dev/null +++ b/deployment/zookeeper-cluster/zookeeper.yml @@ -0,0 +1,90 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: zookeeper +spec: + selector: + matchLabels: + app.kubernetes.io/name: zookeeper + serviceName: zookeeper-server + replicas: 3 + updateStrategy: + type: RollingUpdate + podManagementPolicy: OrderedReady + template: + metadata: + labels: + app.kubernetes.io/name: zookeeper + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: "app.kubernetes.io/name" + operator: In + values: + - zookeeper + topologyKey: "kubernetes.io/hostname" + containers: + - name: zookeeper + imagePullPolicy: Always + image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10" + resources: + requests: + memory: "1Gi" + cpu: "0.5" + ports: + - containerPort: 2181 + name: client + - containerPort: 2888 + name: server + - containerPort: 3888 + name: leader-election + command: + - sh + - -c + - "start-zookeeper \ + --servers=3 \ + --data_dir=/var/lib/zookeeper/data \ + --data_log_dir=/var/lib/zookeeper/data/log \ + --conf_dir=/opt/zookeeper/conf \ + --client_port=2181 \ + --election_port=3888 \ + --server_port=2888 \ + --tick_time=2000 \ + --init_limit=10 \ + --sync_limit=5 \ + --heap=512M \ + --max_client_cnxns=60 \ + --snap_retain_count=3 \ + --purge_interval=12 \ + --max_session_timeout=40000 \ + --min_session_timeout=4000 \ + --log_level=INFO" + readinessProbe: + exec: + command: + - sh + - -c + - "zookeeper-ready 2181" + initialDelaySeconds: 10 + timeoutSeconds: 5 + livenessProbe: + exec: + command: + - sh + - -c + - "zookeeper-ready 2181" + initialDelaySeconds: 10 + timeoutSeconds: 5 + volumeMounts: + - name: data + mountPath: /var/lib/zookeeper + securityContext: + runAsUser: 1000 + fsGroup: 1000 + volumes: + - name: data + emptyDir: + sizeLimit: 2Gi From bda0786a422c6d89fe9c7250ec494ba7b4086f7b Mon Sep 17 00:00:00 2001 From: Said Sef Date: Sat, 7 Dec 2024 13:32:27 +0000 Subject: [PATCH 2/4] feat: add PodDisruptionBudget to Zookeper cluster --- deployment/zookeeper-cluster/kustomization.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/deployment/zookeeper-cluster/kustomization.yml b/deployment/zookeeper-cluster/kustomization.yml index 2293ab9..47728d5 100644 --- a/deployment/zookeeper-cluster/kustomization.yml +++ b/deployment/zookeeper-cluster/kustomization.yml @@ -9,8 +9,4 @@ resources: - service-client.yml - service-server.yml - zookeeper.yml - -# images: -# - name: zookeeper -# newName: docker.io/zookeeper -# newTag: "3.8" +- pdb.yml From e5e0e365cf5274d349d557310e1d4a9fc9a2ac8e Mon Sep 17 00:00:00 2001 From: Said Sef Date: Sat, 7 Dec 2024 13:59:05 +0000 Subject: [PATCH 3/4] feat: add resources spec to Zookeeper cluster --- deployment/zookeeper-cluster/zookeeper.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/deployment/zookeeper-cluster/zookeeper.yml b/deployment/zookeeper-cluster/zookeeper.yml index 81f44ab..b12ef6d 100644 --- a/deployment/zookeeper-cluster/zookeeper.yml +++ b/deployment/zookeeper-cluster/zookeeper.yml @@ -30,10 +30,6 @@ spec: - name: zookeeper imagePullPolicy: Always image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10" - resources: - requests: - memory: "1Gi" - cpu: "0.5" ports: - containerPort: 2181 name: client @@ -78,6 +74,20 @@ spec: - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 + resources: + requests: + cpu: 200m + memory: 500Mi + limits: + cpu: 200m + memory: 500Mi + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: true + capabilities: + drop: + - ALL volumeMounts: - name: data mountPath: /var/lib/zookeeper From 44c111780fe0db535874d2de73d1314e6eefabf0 Mon Sep 17 00:00:00 2001 From: Said Sef Date: Sat, 7 Dec 2024 14:15:26 +0000 Subject: [PATCH 4/4] fix: zookeeper cluster conf dir --- deployment/zookeeper-cluster/zookeeper.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deployment/zookeeper-cluster/zookeeper.yml b/deployment/zookeeper-cluster/zookeeper.yml index b12ef6d..e2a0572 100644 --- a/deployment/zookeeper-cluster/zookeeper.yml +++ b/deployment/zookeeper-cluster/zookeeper.yml @@ -91,6 +91,10 @@ spec: volumeMounts: - name: data mountPath: /var/lib/zookeeper + subPath: zookeeper + - name: data + mountPath: /opt/zookeeper/conf + subPath: conf securityContext: runAsUser: 1000 fsGroup: 1000