From 066477a8de89ef55ecaf6bd899a4f6c00dc5c953 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Fri, 6 Mar 2020 13:39:49 +0100 Subject: [PATCH 01/37] Makes static (pre-generated) configuration files possible Experimental, based on the assumption that things like broker.rack and listener addresses can be set using --overide flags with ev expansion. If we had the statefulset por-ordinal label we could set those things too, but now we need to rely on the pod name (+ for zookeeper ID_OFFSET). --- kafka/10broker-config.yml | 1 + kafka/50kafka.yml | 6 +++++- zookeeper/10zookeeper-config.yml | 1 + zookeeper/50pzoo.yml | 11 ++++++++++- zookeeper/51zoo.yml | 10 +++++++++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/kafka/10broker-config.yml b/kafka/10broker-config.yml index 857e1f13..e5e8f0ea 100644 --- a/kafka/10broker-config.yml +++ b/kafka/10broker-config.yml @@ -41,6 +41,7 @@ data: } printf '%s\n' "${SEDS[@]}" | sed -f - /etc/kafka-configmap/server.properties > /etc/kafka/server.properties.tmp [ $? -eq 0 ] && mv /etc/kafka/server.properties.tmp /etc/kafka/server.properties + ln -s /etc/kafka/server.properties /etc/kafka/server.properties.$POD_NAME server.properties: |- ############################# Log Basics ############################# diff --git a/kafka/50kafka.yml b/kafka/50kafka.yml index e0b52999..75c9afd5 100644 --- a/kafka/50kafka.yml +++ b/kafka/50kafka.yml @@ -47,6 +47,10 @@ spec: - name: broker image: solsson/kafka:2.4.0@sha256:201a1c7fd378405b6b1bfd801127c8a530ed7a971282bfcee4ec731bc0c50ad2 env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name - name: CLASSPATH value: /opt/kafka/libs/extensions/* - name: KAFKA_LOG4J_OPTS @@ -62,7 +66,7 @@ spec: containerPort: 5555 command: - ./bin/kafka-server-start.sh - - /etc/kafka/server.properties + - /etc/kafka/server.properties.$(POD_NAME) lifecycle: preStop: exec: diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index e2bf8cba..25676d79 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -20,6 +20,7 @@ data: for N in $(seq $ZOO_REPLICAS); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done } sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties + ln -s /etc/kafka/zookeeper.properties /etc/kafka/zookeeper.properties.$POD_NAME zookeeper.properties: | 4lw.commands.whitelist=ruok diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index c5f6d1f6..92b03983 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -25,6 +25,11 @@ spec: - name: init-config image: solsson/kafka-initutils@sha256:f6d9850c6c3ad5ecc35e717308fddb47daffbde18eb93e98e031128fe8b899ef command: ['/bin/bash', '/etc/kafka-configmap/init.sh'] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name volumeMounts: - name: configmap mountPath: /etc/kafka-configmap @@ -36,11 +41,15 @@ spec: - name: zookeeper image: solsson/kafka:2.4.0@sha256:201a1c7fd378405b6b1bfd801127c8a530ed7a971282bfcee4ec731bc0c50ad2 env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name - name: KAFKA_LOG4J_OPTS value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties command: - ./bin/zookeeper-server-start.sh - - /etc/kafka/zookeeper.properties + - /etc/kafka/zookeeper.properties.$(POD_NAME) lifecycle: preStop: exec: diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 5aa8ec5e..adcc6e24 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -26,6 +26,10 @@ spec: image: solsson/kafka-initutils@sha256:f6d9850c6c3ad5ecc35e717308fddb47daffbde18eb93e98e031128fe8b899ef command: ['/bin/bash', '/etc/kafka-configmap/init.sh'] env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name - name: ID_OFFSET value: "4" volumeMounts: @@ -39,11 +43,15 @@ spec: - name: zookeeper image: solsson/kafka:2.4.0@sha256:201a1c7fd378405b6b1bfd801127c8a530ed7a971282bfcee4ec731bc0c50ad2 env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name - name: KAFKA_LOG4J_OPTS value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties command: - ./bin/zookeeper-server-start.sh - - /etc/kafka/zookeeper.properties + - /etc/kafka/zookeeper.properties.$(POD_NAME) lifecycle: preStop: exec: From 56cf85ab066944c81df783316db640dc5f04672c Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 8 Mar 2020 17:21:10 +0100 Subject: [PATCH 02/37] Use generated entrypoints, no shell script around the java process See https://github.com/solsson/dockerfiles/blob/master/hooks/build --- nonroot/entrypoint-from-image.yaml | 2 ++ nonroot/kustomization.yaml | 19 ++++++++++++++++++- nonroot/nonroot-image-kafka.yaml | 4 +++- nonroot/nonroot-image-zookeeper.yaml | 8 ++++++-- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 nonroot/entrypoint-from-image.yaml diff --git a/nonroot/entrypoint-from-image.yaml b/nonroot/entrypoint-from-image.yaml new file mode 100644 index 00000000..fe110c35 --- /dev/null +++ b/nonroot/entrypoint-from-image.yaml @@ -0,0 +1,2 @@ +- op: remove + path: /spec/template/spec/containers/0/command diff --git a/nonroot/kustomization.yaml b/nonroot/kustomization.yaml index d23bcfa1..1e9bc3d2 100644 --- a/nonroot/kustomization.yaml +++ b/nonroot/kustomization.yaml @@ -21,7 +21,24 @@ patchesJson6902: kind: StatefulSet name: zoo path: fsgroup-65534.yaml -# https://github.com/kubernetes-sigs/kustomize/issues/915#issuecomment-477808963 +- target: + group: apps + version: v1 + kind: StatefulSet + name: kafka + path: entrypoint-from-image.yaml +- target: + group: apps + version: v1 + kind: StatefulSet + name: pzoo + path: entrypoint-from-image.yaml +- target: + group: apps + version: v1 + kind: StatefulSet + name: zoo + path: entrypoint-from-image.yaml patchesStrategicMerge: - nonroot-image-kafka.yaml - nonroot-image-zookeeper.yaml diff --git a/nonroot/nonroot-image-kafka.yaml b/nonroot/nonroot-image-kafka.yaml index 91aee00c..8ac6641f 100644 --- a/nonroot/nonroot-image-kafka.yaml +++ b/nonroot/nonroot-image-kafka.yaml @@ -7,4 +7,6 @@ spec: spec: containers: - name: broker - image: solsson/kafka:nonroot-2.4.0@sha256:b7dbda9f1941711239fbc3095ea49ba74715a9b2e2e8ce9185106c2e878c06aa + image: solsson/kafka:kafka-server-start-2.4.0@sha256:48a80cb0a5600ef5621a4c2c42ceab2c210e52619100a7bfe62f8bd871c38f2a + args: + - /etc/kafka/server.properties.$(POD_NAME) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index dbd5d30a..59ee547c 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -7,7 +7,9 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:nonroot-2.4.0@sha256:b7dbda9f1941711239fbc3095ea49ba74715a9b2e2e8ce9185106c2e878c06aa + image: solsson/kafka:zookeeper-server-start-2.4.0@sha256:6037e1b5c103a638ef3e8fdd4c052527afb5cebbf13b005f5309a71fb2354c4e + args: + - /etc/kafka/zookeeper.properties.$(POD_NAME) --- apiVersion: apps/v1 kind: StatefulSet @@ -18,4 +20,6 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:nonroot-2.4.0@sha256:b7dbda9f1941711239fbc3095ea49ba74715a9b2e2e8ce9185106c2e878c06aa + image: solsson/kafka:zookeeper-server-start-2.4.0@sha256:6037e1b5c103a638ef3e8fdd4c052527afb5cebbf13b005f5309a71fb2354c4e + args: + - /etc/kafka/zookeeper.properties.$(POD_NAME) From 86b2990b427e144891fa8e9b05a9f202166f25c0 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 8 Mar 2020 17:21:23 +0100 Subject: [PATCH 03/37] Append to args, not to command, now that we use images' entrypoints --- variants/dev-small/listener-localhost.json | 4 ++-- variants/dev-small/num-partitions-1.json | 4 ++-- .../kafka-scale1-overrides.json | 16 ++++++++-------- variants/scale-1/kafka-scale1-overrides.json | 16 ++++++++-------- variants/scale-2/kafka-scale2-overrides.json | 16 ++++++++-------- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/variants/dev-small/listener-localhost.json b/variants/dev-small/listener-localhost.json index 7b9e683f..c79cefcd 100644 --- a/variants/dev-small/listener-localhost.json +++ b/variants/dev-small/listener-localhost.json @@ -1,4 +1,4 @@ [ - {"op": "add", "path": "/spec/template/spec/containers/0/command/2", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/3", "value": "advertised.listeners=PLAINTEXT://:9092,OUTSIDE://localhost:9094"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/2", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/3", "value": "advertised.listeners=PLAINTEXT://:9092,OUTSIDE://localhost:9094"} ] diff --git a/variants/dev-small/num-partitions-1.json b/variants/dev-small/num-partitions-1.json index 3cfa8e0c..b8211f7f 100644 --- a/variants/dev-small/num-partitions-1.json +++ b/variants/dev-small/num-partitions-1.json @@ -1,4 +1,4 @@ [ - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "num.partitions=1"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "num.partitions=1"} ] diff --git a/variants/scale-1-ephemeral/kafka-scale1-overrides.json b/variants/scale-1-ephemeral/kafka-scale1-overrides.json index d9d03749..c9c425fc 100644 --- a/variants/scale-1-ephemeral/kafka-scale1-overrides.json +++ b/variants/scale-1-ephemeral/kafka-scale1-overrides.json @@ -1,10 +1,10 @@ [ - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "default.replication.factor=1"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "min.insync.replicas=1"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "offsets.topic.replication.factor=1"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "offsets.topic.num.partitions=1"} + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "default.replication.factor=1"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "min.insync.replicas=1"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "offsets.topic.replication.factor=1"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "offsets.topic.num.partitions=1"} ] \ No newline at end of file diff --git a/variants/scale-1/kafka-scale1-overrides.json b/variants/scale-1/kafka-scale1-overrides.json index d9d03749..13187671 100644 --- a/variants/scale-1/kafka-scale1-overrides.json +++ b/variants/scale-1/kafka-scale1-overrides.json @@ -1,10 +1,10 @@ [ - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "default.replication.factor=1"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "min.insync.replicas=1"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "offsets.topic.replication.factor=1"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "offsets.topic.num.partitions=1"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "default.replication.factor=1"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "min.insync.replicas=1"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "offsets.topic.replication.factor=1"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "offsets.topic.num.partitions=1"} ] \ No newline at end of file diff --git a/variants/scale-2/kafka-scale2-overrides.json b/variants/scale-2/kafka-scale2-overrides.json index 72d2c344..a18753cb 100644 --- a/variants/scale-2/kafka-scale2-overrides.json +++ b/variants/scale-2/kafka-scale2-overrides.json @@ -1,10 +1,10 @@ [ - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "default.replication.factor=2"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "min.insync.replicas=2"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "offsets.topic.replication.factor=2"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "offsets.topic.num.partitions=2"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "default.replication.factor=2"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "min.insync.replicas=2"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "offsets.topic.replication.factor=2"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "offsets.topic.num.partitions=2"} ] From cc4e968532c565f8fad44cab21da00e70f0f936e Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 10 Mar 2020 06:32:10 +0100 Subject: [PATCH 04/37] Nonroot zookeeper had to be restarted once after create --- zookeeper/10zookeeper-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 25676d79..198ac12c 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -9,7 +9,7 @@ data: set -e set -x - [ -d /var/lib/zookeeper/data ] || mkdir /var/lib/zookeeper/data + [ ! -d /var/lib/zookeeper/data ] && mkdir -m 770 /var/lib/zookeeper/data && chgrp $(stat -c '%g' /var/lib/zookeeper) /var/lib/zookeeper/data [ -z "$ID_OFFSET" ] && ID_OFFSET=1 export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $ID_OFFSET)) echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid From 98663a27b6416b2d5e8bb6e4a89490eb85a3f385 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 15 Mar 2020 22:35:41 +0100 Subject: [PATCH 05/37] Kafka 2.4.1 --- nonroot/nonroot-image-kafka.yaml | 2 +- nonroot/nonroot-image-zookeeper.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nonroot/nonroot-image-kafka.yaml b/nonroot/nonroot-image-kafka.yaml index 8ac6641f..c951b0bf 100644 --- a/nonroot/nonroot-image-kafka.yaml +++ b/nonroot/nonroot-image-kafka.yaml @@ -7,6 +7,6 @@ spec: spec: containers: - name: broker - image: solsson/kafka:kafka-server-start-2.4.0@sha256:48a80cb0a5600ef5621a4c2c42ceab2c210e52619100a7bfe62f8bd871c38f2a + image: solsson/kafka:kafka-server-start-2.4.1@sha256:d7fb916c23fb6a7ad3f9cb9036eb8092a7667e31ce47cee216536566ca35c607 args: - /etc/kafka/server.properties.$(POD_NAME) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index 59ee547c..caa8c203 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -7,7 +7,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:zookeeper-server-start-2.4.0@sha256:6037e1b5c103a638ef3e8fdd4c052527afb5cebbf13b005f5309a71fb2354c4e + image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb args: - /etc/kafka/zookeeper.properties.$(POD_NAME) --- @@ -20,6 +20,6 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:zookeeper-server-start-2.4.0@sha256:6037e1b5c103a638ef3e8fdd4c052527afb5cebbf13b005f5309a71fb2354c4e + image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb args: - /etc/kafka/zookeeper.properties.$(POD_NAME) From 76eee477f97e32668d39eb48d659b52067ad5396 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Mon, 9 Mar 2020 07:51:59 +0100 Subject: [PATCH 06/37] kafka-minion ec29ba8c30cb4cdf9bbd04dc55a854b686f85a97 --- consumers-prometheus/kafka-minion.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consumers-prometheus/kafka-minion.yaml b/consumers-prometheus/kafka-minion.yaml index 2e26cc62..78117b2b 100644 --- a/consumers-prometheus/kafka-minion.yaml +++ b/consumers-prometheus/kafka-minion.yaml @@ -20,7 +20,7 @@ spec: spec: containers: - name: kafka-minion - image: solsson/kafka-consumers-prometheus@sha256:039d0bc0c1bdfa8b2e515e4c05ab8490492c65b43830579ce76d36278f33d447 + image: solsson/kafka-consumers-prometheus@sha256:b5f5b8672397f94379a5a3e8b4bf41cf12b64ff1c4fc7f84684edca4beb37c16 env: - name: TELEMETRY_HOST value: 0.0.0.0 From bc2896a348fe6d2d0b23a7cb33435d7d0679dd20 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 21 Apr 2020 06:57:46 +0200 Subject: [PATCH 07/37] Unlike broker config zookeeper's needs to know the replica count --- zookeeper/10zookeeper-config.yml | 3 ++- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 25676d79..3c795c19 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -14,13 +14,14 @@ data: export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $ID_OFFSET)) echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid cp -Lur /etc/kafka-configmap/* /etc/kafka/ + REPLICAS=$(( PZOO_REPLICAS + ZOO_REPLICAS )) [ ! -z "$PZOO_REPLICAS" ] && [ ! -z "$ZOO_REPLICAS" ] && { sed -i "s/^server\\./#server./" /etc/kafka/zookeeper.properties for N in $(seq $PZOO_REPLICAS); do echo "server.$N=pzoo-$(( $N - 1 )).pzoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done for N in $(seq $ZOO_REPLICAS); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done } sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties - ln -s /etc/kafka/zookeeper.properties /etc/kafka/zookeeper.properties.$POD_NAME + ln -s /etc/kafka/zookeeper.properties /etc/kafka/zookeeper.properties.scale-$REPLICAS.$POD_NAME zookeeper.properties: | 4lw.commands.whitelist=ruok diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index 92b03983..c03ff12b 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -49,7 +49,7 @@ spec: value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties command: - ./bin/zookeeper-server-start.sh - - /etc/kafka/zookeeper.properties.$(POD_NAME) + - /etc/kafka/zookeeper.properties.scale-5.$(POD_NAME) lifecycle: preStop: exec: diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index adcc6e24..2d07e7b0 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -51,7 +51,7 @@ spec: value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties command: - ./bin/zookeeper-server-start.sh - - /etc/kafka/zookeeper.properties.$(POD_NAME) + - /etc/kafka/zookeeper.properties.scale-5.$(POD_NAME) lifecycle: preStop: exec: From d91a92a9ddfa6c802c104aa6090865e7021dcc86 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 22 Apr 2020 06:26:07 +0200 Subject: [PATCH 08/37] Here we need to know the number of replicas, not as two envs --- nonroot/nonroot-image-zookeeper.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index caa8c203..6930a96c 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -9,7 +9,7 @@ spec: - name: zookeeper image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb args: - - /etc/kafka/zookeeper.properties.$(POD_NAME) + - /etc/kafka/zookeeper.properties.scale-5.$(POD_NAME) --- apiVersion: apps/v1 kind: StatefulSet @@ -22,4 +22,4 @@ spec: - name: zookeeper image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb args: - - /etc/kafka/zookeeper.properties.$(POD_NAME) + - /etc/kafka/zookeeper.properties.scale-5.$(POD_NAME) From 50e28a64ca3e3af3623af9e81abc48db7b7ee8ba Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 22 Apr 2020 06:43:41 +0200 Subject: [PATCH 09/37] Transition to a single REPLICAS env (phasing out pzoo) --- nonroot/nonroot-image-zookeeper.yaml | 4 ++-- variants/scale-1/zookeeper.yaml | 13 +++++++++---- variants/scale-2/zookeeper.yaml | 7 ++++++- variants/scale-3-5-nopzoo/only-zoo-5.yaml | 7 ++++++- zookeeper/10zookeeper-config.yml | 5 ++--- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index 6930a96c..068d8522 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -9,7 +9,7 @@ spec: - name: zookeeper image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb args: - - /etc/kafka/zookeeper.properties.scale-5.$(POD_NAME) + - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) --- apiVersion: apps/v1 kind: StatefulSet @@ -22,4 +22,4 @@ spec: - name: zookeeper image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb args: - - /etc/kafka/zookeeper.properties.scale-5.$(POD_NAME) + - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) diff --git a/variants/scale-1/zookeeper.yaml b/variants/scale-1/zookeeper.yaml index 8779b468..b70d0697 100644 --- a/variants/scale-1/zookeeper.yaml +++ b/variants/scale-1/zookeeper.yaml @@ -19,8 +19,8 @@ spec: env: - name: PZOO_REPLICAS value: '1' - - name: ZOO_REPLICAS - value: '0' + - name: REPLICAS + value: '1' --- apiVersion: apps/v1 kind: StatefulSet @@ -37,7 +37,12 @@ spec: # There's no validation on these numbers adding up to a coherent zk config, so watch out - name: PZOO_REPLICAS value: '1' - - name: ZOO_REPLICAS - value: '0' + - name: REPLICAS + value: '1' - name: ID_OFFSET value: '2' + containers: + - name: zookeeper + env: + - name: REPLICAS + value: '1' diff --git a/variants/scale-2/zookeeper.yaml b/variants/scale-2/zookeeper.yaml index fa62b228..96c8b189 100644 --- a/variants/scale-2/zookeeper.yaml +++ b/variants/scale-2/zookeeper.yaml @@ -22,7 +22,12 @@ spec: # There's no validation on these numbers adding up to a coherent zk config, so watch out - name: PZOO_REPLICAS value: '0' - - name: ZOO_REPLICAS + - name: REPLICAS value: '2' - name: ID_OFFSET value: '1' + containers: + - name: zookeeper + env: + - name: REPLICAS + value: '2' diff --git a/variants/scale-3-5-nopzoo/only-zoo-5.yaml b/variants/scale-3-5-nopzoo/only-zoo-5.yaml index 6d096373..ed59e8de 100644 --- a/variants/scale-3-5-nopzoo/only-zoo-5.yaml +++ b/variants/scale-3-5-nopzoo/only-zoo-5.yaml @@ -22,7 +22,12 @@ spec: # There's no validation on these numbers adding up to a coherent zk config, so watch out - name: PZOO_REPLICAS value: '0' - - name: ZOO_REPLICAS + - name: REPLICAS value: '5' - name: ID_OFFSET value: '1' + containers: + - name: zookeeper + env: + - name: REPLICAS + value: '5' diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index a949104a..3772cc60 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -14,11 +14,10 @@ data: export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $ID_OFFSET)) echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid cp -Lur /etc/kafka-configmap/* /etc/kafka/ - REPLICAS=$(( PZOO_REPLICAS + ZOO_REPLICAS )) - [ ! -z "$PZOO_REPLICAS" ] && [ ! -z "$ZOO_REPLICAS" ] && { + [ ! -z "$PZOO_REPLICAS" ] && [ ! -z "$REPLICAS" ] && { sed -i "s/^server\\./#server./" /etc/kafka/zookeeper.properties for N in $(seq $PZOO_REPLICAS); do echo "server.$N=pzoo-$(( $N - 1 )).pzoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done - for N in $(seq $ZOO_REPLICAS); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done + for N in $(seq $(( $REPLICAS - $PZOO_REPLICAS ))); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done } sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties ln -s /etc/kafka/zookeeper.properties /etc/kafka/zookeeper.properties.scale-$REPLICAS.$POD_NAME From 6d86264a09609251f5daf4f0fea766a0dc70a0c7 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 22 Apr 2020 14:30:43 +0200 Subject: [PATCH 10/37] Crazy fast zookeeper start, crazy cheap so we can scale up --- native/kustomization.yaml | 4 +++ native/native-image-zookeeper.yaml | 21 ++++++++++++ variants/scale-6-9/kafka-6.yaml | 6 ++++ variants/scale-6-9/kustomization.yaml | 20 +++++++++++ variants/scale-6-9/lifecycle-remove.json | 4 +++ variants/scale-6-9/zoo-9.yaml | 33 +++++++++++++++++++ .../zoo-readiness-without-shell.yaml | 5 +++ 7 files changed, 93 insertions(+) create mode 100644 native/kustomization.yaml create mode 100644 native/native-image-zookeeper.yaml create mode 100644 variants/scale-6-9/kafka-6.yaml create mode 100644 variants/scale-6-9/kustomization.yaml create mode 100644 variants/scale-6-9/lifecycle-remove.json create mode 100644 variants/scale-6-9/zoo-9.yaml create mode 100644 variants/scale-6-9/zoo-readiness-without-shell.yaml diff --git a/native/kustomization.yaml b/native/kustomization.yaml new file mode 100644 index 00000000..e7eb21d9 --- /dev/null +++ b/native/kustomization.yaml @@ -0,0 +1,4 @@ +bases: +- ../nonroot +patchesStrategicMerge: +- native-image-zookeeper.yaml diff --git a/native/native-image-zookeeper.yaml b/native/native-image-zookeeper.yaml new file mode 100644 index 00000000..8918d590 --- /dev/null +++ b/native/native-image-zookeeper.yaml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: pzoo +spec: + template: + spec: + containers: + - name: zookeeper + image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: zoo +spec: + template: + spec: + containers: + - name: zookeeper + image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 diff --git a/variants/scale-6-9/kafka-6.yaml b/variants/scale-6-9/kafka-6.yaml new file mode 100644 index 00000000..12b9a2e1 --- /dev/null +++ b/variants/scale-6-9/kafka-6.yaml @@ -0,0 +1,6 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: kafka +spec: + replicas: 3 diff --git a/variants/scale-6-9/kustomization.yaml b/variants/scale-6-9/kustomization.yaml new file mode 100644 index 00000000..c883c21c --- /dev/null +++ b/variants/scale-6-9/kustomization.yaml @@ -0,0 +1,20 @@ +bases: +- ../../native +patchesStrategicMerge: +- zoo-9.yaml +- kafka-6.yaml +patchesJson6902: +# The nonroot image is distroless and doesn't support a shell that the prestop hook needs +- target: + group: apps + version: v1 + kind: StatefulSet + name: zoo + path: lifecycle-remove.json +# The nonroot image is distroless and has neither shell nor the nc command +- target: + group: apps + version: v1 + kind: StatefulSet + name: zoo + path: zoo-readiness-without-shell.yaml diff --git a/variants/scale-6-9/lifecycle-remove.json b/variants/scale-6-9/lifecycle-remove.json new file mode 100644 index 00000000..d6ed5370 --- /dev/null +++ b/variants/scale-6-9/lifecycle-remove.json @@ -0,0 +1,4 @@ +[ + {"op": "remove", "path": "/spec/template/spec/containers/0/lifecycle"} +] + \ No newline at end of file diff --git a/variants/scale-6-9/zoo-9.yaml b/variants/scale-6-9/zoo-9.yaml new file mode 100644 index 00000000..e2babff0 --- /dev/null +++ b/variants/scale-6-9/zoo-9.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: pzoo + namespace: kafka +spec: + replicas: 0 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: zoo + namespace: kafka +spec: + replicas: 9 + template: + spec: + initContainers: + - name: init-config + env: + # There's no validation on these numbers adding up to a coherent zk config, so watch out + - name: PZOO_REPLICAS + value: '0' + - name: REPLICAS + value: '9' + - name: ID_OFFSET + value: '1' + containers: + - name: zookeeper + env: + - name: REPLICAS + value: '9' diff --git a/variants/scale-6-9/zoo-readiness-without-shell.yaml b/variants/scale-6-9/zoo-readiness-without-shell.yaml new file mode 100644 index 00000000..7486a7d2 --- /dev/null +++ b/variants/scale-6-9/zoo-readiness-without-shell.yaml @@ -0,0 +1,5 @@ +- op: replace + path: /spec/template/spec/containers/0/readinessProbe + value: + tcpSocket: + port: 2181 From bec515c19d6c65fe68fa971c9cf464f7fa28f5f9 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 22 Apr 2020 15:34:50 +0200 Subject: [PATCH 11/37] Kafka scales up nicely with no need to restart existing pods --- variants/scale-6-9/kafka-6.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/scale-6-9/kafka-6.yaml b/variants/scale-6-9/kafka-6.yaml index 12b9a2e1..a7e319a7 100644 --- a/variants/scale-6-9/kafka-6.yaml +++ b/variants/scale-6-9/kafka-6.yaml @@ -3,4 +3,4 @@ kind: StatefulSet metadata: name: kafka spec: - replicas: 3 + replicas: 6 From f2a302e5aeff93707b78f0145480062fb5160f56 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 23 Apr 2020 06:57:19 +0200 Subject: [PATCH 12/37] Connect by name resolution to individual zookeeper pods instead of through the service. This helps troubleshoot issues like #310 by pointing out (by podIP) which actual zookeeper connection that failed. Also I like the simplification. --- .../kafka-zookeeper-connect-only-zoo.json | 4 ++++ variants/scale-3-5-nopzoo/kustomization.yaml | 8 ++++++++ variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json | 4 ++++ variants/scale-6-9/kustomization.yaml | 6 ++++++ 4 files changed, 22 insertions(+) create mode 100644 variants/scale-3-5-nopzoo/kafka-zookeeper-connect-only-zoo.json create mode 100644 variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json diff --git a/variants/scale-3-5-nopzoo/kafka-zookeeper-connect-only-zoo.json b/variants/scale-3-5-nopzoo/kafka-zookeeper-connect-only-zoo.json new file mode 100644 index 00000000..37c9f1fc --- /dev/null +++ b/variants/scale-3-5-nopzoo/kafka-zookeeper-connect-only-zoo.json @@ -0,0 +1,4 @@ +[ + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "zookeeper.connect=zoo:2181"} +] \ No newline at end of file diff --git a/variants/scale-3-5-nopzoo/kustomization.yaml b/variants/scale-3-5-nopzoo/kustomization.yaml index 4254a479..5c7ec29d 100644 --- a/variants/scale-3-5-nopzoo/kustomization.yaml +++ b/variants/scale-3-5-nopzoo/kustomization.yaml @@ -2,3 +2,11 @@ bases: - ../scale-3-5 patchesStrategicMerge: - ./only-zoo-5.yaml +patchesJson6902: +- target: + group: apps + version: v1 + kind: StatefulSet + name: kafka + namespace: kafka + path: kafka-zookeeper-connect-only-zoo.json diff --git a/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json b/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json new file mode 100644 index 00000000..37c9f1fc --- /dev/null +++ b/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json @@ -0,0 +1,4 @@ +[ + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "zookeeper.connect=zoo:2181"} +] \ No newline at end of file diff --git a/variants/scale-6-9/kustomization.yaml b/variants/scale-6-9/kustomization.yaml index c883c21c..bd1afdd4 100644 --- a/variants/scale-6-9/kustomization.yaml +++ b/variants/scale-6-9/kustomization.yaml @@ -4,6 +4,12 @@ patchesStrategicMerge: - zoo-9.yaml - kafka-6.yaml patchesJson6902: +- target: + group: apps + version: v1 + kind: StatefulSet + name: kafka + path: kafka-zookeeper-connect-only-zoo.json # The nonroot image is distroless and doesn't support a shell that the prestop hook needs - target: group: apps From a2802e7d5863cefbabf81222471c8c4529ee477c Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 23 Apr 2020 07:45:22 +0200 Subject: [PATCH 13/37] Guaranteed, with limits that will only work given quite even load --- native/native-image-zookeeper.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/native/native-image-zookeeper.yaml b/native/native-image-zookeeper.yaml index 8918d590..f8c2cff7 100644 --- a/native/native-image-zookeeper.yaml +++ b/native/native-image-zookeeper.yaml @@ -8,6 +8,13 @@ spec: containers: - name: zookeeper image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 + resources: + requests: + cpu: 15m + memory: 25Mi + limits: + cpu: 15m + memory: 25Mi --- apiVersion: apps/v1 kind: StatefulSet @@ -19,3 +26,10 @@ spec: containers: - name: zookeeper image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 + resources: + requests: + cpu: 15m + memory: 25Mi + limits: + cpu: 15m + memory: 25Mi From f42afde1e32232a6db975d97a530536785f851fd Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 23 Apr 2020 07:55:10 +0200 Subject: [PATCH 14/37] AdoptOpenJDK 11.0.7 and a smaller nonroot user layer --- nonroot/nonroot-image-kafka.yaml | 2 +- nonroot/nonroot-image-zookeeper.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nonroot/nonroot-image-kafka.yaml b/nonroot/nonroot-image-kafka.yaml index c951b0bf..55cadde8 100644 --- a/nonroot/nonroot-image-kafka.yaml +++ b/nonroot/nonroot-image-kafka.yaml @@ -7,6 +7,6 @@ spec: spec: containers: - name: broker - image: solsson/kafka:kafka-server-start-2.4.1@sha256:d7fb916c23fb6a7ad3f9cb9036eb8092a7667e31ce47cee216536566ca35c607 + image: solsson/kafka:2.4.1-kafka-server-start@sha256:efeb80cbe35d7a39fd5d20fe93f201d3562f9914ac67afe594fe9720d21e58fa args: - /etc/kafka/server.properties.$(POD_NAME) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index 068d8522..e6917f50 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -7,7 +7,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb + image: solsson/kafka:2.4.1-zookeeper-server-start@sha256:b348f5cc2660a0ad885f24eaa28c1d6186cca86f1e30d33983e46712a3fab2f9 args: - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) --- @@ -20,6 +20,6 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:zookeeper-server-start-2.4.1@sha256:ad92d8e93b369a4c6a9df7b8a198081dfcdcda52e218b1e707b39d63e1897cfb + image: solsson/kafka:2.4.1-zookeeper-server-start@sha256:b348f5cc2660a0ad885f24eaa28c1d6186cca86f1e30d33983e46712a3fab2f9 args: - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) From 377a0c39ca7d5fe7c0fdb3e698c2eabf6cdf4a26 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Fri, 24 Apr 2020 06:01:54 +0200 Subject: [PATCH 15/37] Kafka 2.5.0 with the default (no extra envs) entrypoint --- nonroot/nonroot-image-kafka.yaml | 2 +- nonroot/nonroot-image-zookeeper.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nonroot/nonroot-image-kafka.yaml b/nonroot/nonroot-image-kafka.yaml index 55cadde8..df393f07 100644 --- a/nonroot/nonroot-image-kafka.yaml +++ b/nonroot/nonroot-image-kafka.yaml @@ -7,6 +7,6 @@ spec: spec: containers: - name: broker - image: solsson/kafka:2.4.1-kafka-server-start@sha256:efeb80cbe35d7a39fd5d20fe93f201d3562f9914ac67afe594fe9720d21e58fa + image: solsson/kafka:2.5.0-kafka-server-start@sha256:c6d43d1240c358d9ab8bb60de61a0b9578f04fd727ee4016f7706800998e5351 args: - /etc/kafka/server.properties.$(POD_NAME) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index e6917f50..a4b41ae0 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -7,7 +7,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:2.4.1-zookeeper-server-start@sha256:b348f5cc2660a0ad885f24eaa28c1d6186cca86f1e30d33983e46712a3fab2f9 + image: solsson/kafka:2.5.0-zookeeper-server-start@sha256:4f9c68ff762c1419270dd72d38450f58cf130aa0c66f8359441075b4fe04de85 args: - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) --- @@ -20,6 +20,6 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:2.4.1-zookeeper-server-start@sha256:b348f5cc2660a0ad885f24eaa28c1d6186cca86f1e30d33983e46712a3fab2f9 + image: solsson/kafka:2.5.0-zookeeper-server-start@sha256:4f9c68ff762c1419270dd72d38450f58cf130aa0c66f8359441075b4fe04de85 args: - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) From ebc504201b6c3218283b5bb8978263a1ef5d0adf Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sat, 25 Apr 2020 11:35:27 +0200 Subject: [PATCH 16/37] Breaking: renames the statefulset's headless service so the pod name or statefulset.kubernetes.io/pod-name can be used via the downward api in args to do things like --override listeners=PLAINTEXT://$(POD_NAME).kafka:9092 Once again it's unfortunate that the statefulset label is pod name, not pod index. Also makes sure that DNS entries are published prior to readiness so clusters don't get into loops of not being able to find each other. --- kafka/20dns.yml | 5 ++++- kafka/50kafka.yml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kafka/20dns.yml b/kafka/20dns.yml index 4088c311..3a74b708 100644 --- a/kafka/20dns.yml +++ b/kafka/20dns.yml @@ -3,9 +3,12 @@ apiVersion: v1 kind: Service metadata: - name: broker + name: kafka namespace: kafka + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: + publishNotReadyAddresses: true ports: - port: 9092 # [podname].broker.kafka.svc.cluster.local diff --git a/kafka/50kafka.yml b/kafka/50kafka.yml index 75c9afd5..990ebcf1 100644 --- a/kafka/50kafka.yml +++ b/kafka/50kafka.yml @@ -7,7 +7,7 @@ spec: selector: matchLabels: app: kafka - serviceName: "broker" + serviceName: "kafka" replicas: 3 updateStrategy: type: RollingUpdate From df954ae9f5e1ac1ee4b4ef0ba7f463d8095cffe1 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sat, 25 Apr 2020 19:52:38 +0200 Subject: [PATCH 17/37] This probe caused log entries "Unable to read additional data from client sessionid 0x0, likely client has closed socket" --- variants/scale-6-9/zoo-readiness-without-shell.yaml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/variants/scale-6-9/zoo-readiness-without-shell.yaml b/variants/scale-6-9/zoo-readiness-without-shell.yaml index 7486a7d2..72fe2284 100644 --- a/variants/scale-6-9/zoo-readiness-without-shell.yaml +++ b/variants/scale-6-9/zoo-readiness-without-shell.yaml @@ -1,5 +1,6 @@ -- op: replace - path: /spec/template/spec/containers/0/readinessProbe - value: - tcpSocket: - port: 2181 +- path: /spec/template/spec/containers/0/readinessProbe + # op: replace + # value: + # tcpSocket: + # port: 2181 + op: remove From a29a19df1f4b8fb39be66f5321d13ca617acbd91 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sat, 25 Apr 2020 21:26:25 +0200 Subject: [PATCH 18/37] New variant suitable for a 3-node 3-zone cluster --- .../kafka-zookeeper-connect-only-zoo.json | 4 +++ variants/scale-3-3/kustomization.yaml | 12 +++++++ variants/scale-3-3/only-zoo-3.yaml | 33 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json create mode 100644 variants/scale-3-3/kustomization.yaml create mode 100644 variants/scale-3-3/only-zoo-3.yaml diff --git a/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json b/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json new file mode 100644 index 00000000..37c9f1fc --- /dev/null +++ b/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json @@ -0,0 +1,4 @@ +[ + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "zookeeper.connect=zoo:2181"} +] \ No newline at end of file diff --git a/variants/scale-3-3/kustomization.yaml b/variants/scale-3-3/kustomization.yaml new file mode 100644 index 00000000..11b82724 --- /dev/null +++ b/variants/scale-3-3/kustomization.yaml @@ -0,0 +1,12 @@ +bases: +- ../scale-3-5 +patchesStrategicMerge: +- ./only-zoo-3.yaml +patchesJson6902: +- target: + group: apps + version: v1 + kind: StatefulSet + name: kafka + namespace: kafka + path: kafka-zookeeper-connect-only-zoo.json diff --git a/variants/scale-3-3/only-zoo-3.yaml b/variants/scale-3-3/only-zoo-3.yaml new file mode 100644 index 00000000..bced2320 --- /dev/null +++ b/variants/scale-3-3/only-zoo-3.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: pzoo + namespace: kafka +spec: + replicas: 0 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: zoo + namespace: kafka +spec: + replicas: 3 + template: + spec: + initContainers: + - name: init-config + env: + # There's no validation on these numbers adding up to a coherent zk config, so watch out + - name: PZOO_REPLICAS + value: '0' + - name: REPLICAS + value: '3' + - name: ID_OFFSET + value: '1' + containers: + - name: zookeeper + env: + - name: REPLICAS + value: '3' From b1199faff6fa4271541abe5eec2adda623302d2b Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sat, 25 Apr 2020 21:27:44 +0200 Subject: [PATCH 19/37] Current zookeeper doesn't log anything from factory on ruok --- zookeeper/10zookeeper-config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 3772cc60..06ee8553 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -43,6 +43,5 @@ data: log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n - # Suppress connection log messages, three lines per livenessProbe execution - log4j.logger.org.apache.zookeeper.server.NIOServerCnxnFactory=WARN + # Suppress connection log messages, one line per readiness probe log4j.logger.org.apache.zookeeper.server.NIOServerCnxn=WARN From 6d0e41bab9344c7d2645ab3c946f967d993b2ec2 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sat, 25 Apr 2020 21:28:10 +0200 Subject: [PATCH 20/37] Zookeeper docs say: In container environment, especially in Kubernetes, this value should be increased or set to 0(infinite retry) to overcome issues related to DNS name resolving. But I'm not sure if "Java system property only" means that this conf entry has no effect. --- zookeeper/10zookeeper-config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 06ee8553..39fc9804 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -31,6 +31,8 @@ data: maxClientCnxns=2 initLimit=5 syncLimit=2 + tcpKeepAlive=true + electionPortBindRetry=0 server.1=pzoo-0.pzoo:2888:3888:participant server.2=pzoo-1.pzoo:2888:3888:participant server.3=pzoo-2.pzoo:2888:3888:participant From 132064145df342a4fe5e4f2ee719f33aa920e330 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Mon, 18 May 2020 14:30:51 +0200 Subject: [PATCH 21/37] Fixes scale-1 (and thus dev-small) with the env change from 50e28a6 --- variants/scale-1/zookeeper.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/variants/scale-1/zookeeper.yaml b/variants/scale-1/zookeeper.yaml index b70d0697..bc23fc67 100644 --- a/variants/scale-1/zookeeper.yaml +++ b/variants/scale-1/zookeeper.yaml @@ -21,6 +21,11 @@ spec: value: '1' - name: REPLICAS value: '1' + containers: + - name: zookeeper + env: + - name: REPLICAS + value: '1' --- apiVersion: apps/v1 kind: StatefulSet From 83af767be42d4b813ddf93ae7dd62fccabc803bb Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Mon, 18 May 2020 14:11:29 +0200 Subject: [PATCH 22/37] Native-image zookeeper for scale-1 and dev-small environments, because in a resource strapped dev environment kafka will often crashloop several times while waiting for zookeeper, and JVM starts are heavy. --- variants/scale-1/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/scale-1/kustomization.yaml b/variants/scale-1/kustomization.yaml index 6cd41f97..ab741e0b 100644 --- a/variants/scale-1/kustomization.yaml +++ b/variants/scale-1/kustomization.yaml @@ -1,5 +1,5 @@ bases: -- ../../nonroot +- ../../native patchesStrategicMerge: - kafka.yaml - zookeeper.yaml From 728acffa249808f614d3b95c4c7609059c53ff95 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Mon, 18 May 2020 18:31:51 +0200 Subject: [PATCH 23/37] Nonroot init-containers, seems to fix #318 on minikube and k3s while GKE had no such issues, probably because of fsGroup --- nonroot/nonroot-image-kafka.yaml | 3 +++ nonroot/nonroot-image-zookeeper.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/nonroot/nonroot-image-kafka.yaml b/nonroot/nonroot-image-kafka.yaml index df393f07..9bfb41f3 100644 --- a/nonroot/nonroot-image-kafka.yaml +++ b/nonroot/nonroot-image-kafka.yaml @@ -5,6 +5,9 @@ metadata: spec: template: spec: + initContainers: + - name: init-config + image: solsson/kafka:initutils-nonroot@sha256:87f6bb39fd47a6f382018a2dc55a484d1b71eee48a58019c7e65a9bc53e8dca2 containers: - name: broker image: solsson/kafka:2.5.0-kafka-server-start@sha256:c6d43d1240c358d9ab8bb60de61a0b9578f04fd727ee4016f7706800998e5351 diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index a4b41ae0..be9e0ad2 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -5,6 +5,9 @@ metadata: spec: template: spec: + initContainers: + - name: init-config + image: solsson/kafka:initutils-nonroot@sha256:87f6bb39fd47a6f382018a2dc55a484d1b71eee48a58019c7e65a9bc53e8dca2 containers: - name: zookeeper image: solsson/kafka:2.5.0-zookeeper-server-start@sha256:4f9c68ff762c1419270dd72d38450f58cf130aa0c66f8359441075b4fe04de85 @@ -18,6 +21,9 @@ metadata: spec: template: spec: + initContainers: + - name: init-config + image: solsson/kafka:initutils-nonroot@sha256:87f6bb39fd47a6f382018a2dc55a484d1b71eee48a58019c7e65a9bc53e8dca2 containers: - name: zookeeper image: solsson/kafka:2.5.0-zookeeper-server-start@sha256:4f9c68ff762c1419270dd72d38450f58cf130aa0c66f8359441075b4fe04de85 From 4ab73a01e9a248b22aa132e5dee8d3979c7ef3b0 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Mon, 18 May 2020 18:48:23 +0200 Subject: [PATCH 24/37] Adapts to the new entrypoint strategy, and distroless native zookeper --- native/distroless.yaml | 9 +++++++++ native/kustomization.yaml | 13 +++++++++++++ nonroot/kustomization.yaml | 6 +++--- variants/dev-small/listener-localhost.json | 4 ++-- 4 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 native/distroless.yaml diff --git a/native/distroless.yaml b/native/distroless.yaml new file mode 100644 index 00000000..e00b5205 --- /dev/null +++ b/native/distroless.yaml @@ -0,0 +1,9 @@ +# The more specific removes are to make sure that there was a shell that we're removing +- op: remove + path: /spec/template/spec/containers/0/readinessProbe/exec +- op: remove + path: /spec/template/spec/containers/0/readinessProbe +- op: remove + path: /spec/template/spec/containers/0/lifecycle/preStop/exec +- op: remove + path: /spec/template/spec/containers/0/lifecycle/preStop diff --git a/native/kustomization.yaml b/native/kustomization.yaml index e7eb21d9..6a489db7 100644 --- a/native/kustomization.yaml +++ b/native/kustomization.yaml @@ -2,3 +2,16 @@ bases: - ../nonroot patchesStrategicMerge: - native-image-zookeeper.yaml +patchesJson6902: +- target: + group: apps + version: v1 + kind: StatefulSet + name: pzoo + path: distroless.yaml +- target: + group: apps + version: v1 + kind: StatefulSet + name: zoo + path: distroless.yaml \ No newline at end of file diff --git a/nonroot/kustomization.yaml b/nonroot/kustomization.yaml index 1e9bc3d2..a3526dfb 100644 --- a/nonroot/kustomization.yaml +++ b/nonroot/kustomization.yaml @@ -2,6 +2,9 @@ bases: - ../rbac-namespace-default - ../kafka - ../zookeeper +patchesStrategicMerge: +- nonroot-image-kafka.yaml +- nonroot-image-zookeeper.yaml patchesJson6902: - target: group: apps @@ -39,6 +42,3 @@ patchesJson6902: kind: StatefulSet name: zoo path: entrypoint-from-image.yaml -patchesStrategicMerge: -- nonroot-image-kafka.yaml -- nonroot-image-zookeeper.yaml diff --git a/variants/dev-small/listener-localhost.json b/variants/dev-small/listener-localhost.json index c79cefcd..496b1664 100644 --- a/variants/dev-small/listener-localhost.json +++ b/variants/dev-small/listener-localhost.json @@ -1,4 +1,4 @@ [ - {"op": "add", "path": "/spec/template/spec/containers/0/args/2", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/args/3", "value": "advertised.listeners=PLAINTEXT://:9092,OUTSIDE://localhost:9094"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/1", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/2", "value": "advertised.listeners=PLAINTEXT://:9092,OUTSIDE://localhost:9094"} ] From 502d4832ab4684df85bb3815d597adf5a0594173 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Mon, 18 May 2020 20:22:24 +0200 Subject: [PATCH 25/37] Speeds up kafka-configs.sh and kafka-topics.sh with --zookeeper --- native/native-image-zookeeper.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/native/native-image-zookeeper.yaml b/native/native-image-zookeeper.yaml index f8c2cff7..1c309fcd 100644 --- a/native/native-image-zookeeper.yaml +++ b/native/native-image-zookeeper.yaml @@ -10,10 +10,10 @@ spec: image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 resources: requests: - cpu: 15m + cpu: 50m memory: 25Mi limits: - cpu: 15m + cpu: 50m memory: 25Mi --- apiVersion: apps/v1 @@ -28,8 +28,8 @@ spec: image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 resources: requests: - cpu: 15m + cpu: 50m memory: 25Mi limits: - cpu: 15m + cpu: 50m memory: 25Mi From 9e63e93625ff25975275b4ec6f0bbaa510ddf01e Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 17 Jun 2020 12:31:24 +0200 Subject: [PATCH 26/37] Current zookeeper build, with graalvm 20.1 and --install-exit-handlers, interesting now that hooks are removed --- native/native-image-zookeeper.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/native/native-image-zookeeper.yaml b/native/native-image-zookeeper.yaml index 1c309fcd..3e68ae8c 100644 --- a/native/native-image-zookeeper.yaml +++ b/native/native-image-zookeeper.yaml @@ -7,7 +7,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 + image: solsson/kafka:native-zookeeper-server-start@sha256:0047f1ab4c7b79062c44e9bd2ad02aaf1124d8a0ed3309229e627cdd11a37c2a resources: requests: cpu: 50m @@ -25,7 +25,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:native-zookeeper-server-start@sha256:fb7b0ea81e3490f088de1491afcdde8f7531477f125781c726dfbbffb2695a01 + image: solsson/kafka:native-zookeeper-server-start@sha256:0047f1ab4c7b79062c44e9bd2ad02aaf1124d8a0ed3309229e627cdd11a37c2a resources: requests: cpu: 50m From 7e0f4567e8aa3a72adbb95bcc91b2b7b4c12035f Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 04:49:37 +0200 Subject: [PATCH 27/37] Fixes mistake in the change from commmand to args override --- .../kafka-scale1-overrides.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/variants/scale-1-ephemeral/kafka-scale1-overrides.json b/variants/scale-1-ephemeral/kafka-scale1-overrides.json index c9c425fc..13187671 100644 --- a/variants/scale-1-ephemeral/kafka-scale1-overrides.json +++ b/variants/scale-1-ephemeral/kafka-scale1-overrides.json @@ -1,10 +1,10 @@ [ - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "default.replication.factor=1"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "min.insync.replicas=1"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "offsets.topic.replication.factor=1"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/args/0/command/-", "value": "offsets.topic.num.partitions=1"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "default.replication.factor=1"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "min.insync.replicas=1"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "offsets.topic.replication.factor=1"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "offsets.topic.num.partitions=1"} ] \ No newline at end of file From 372497f29ed67238bd97551bc8515ffbbe2e16fa Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 04:57:10 +0200 Subject: [PATCH 28/37] We've never had limits on zookeeper cpu, and we've requested 10 --- native/native-image-zookeeper.yaml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/native/native-image-zookeeper.yaml b/native/native-image-zookeeper.yaml index 3e68ae8c..e68a5f0d 100644 --- a/native/native-image-zookeeper.yaml +++ b/native/native-image-zookeeper.yaml @@ -10,10 +10,7 @@ spec: image: solsson/kafka:native-zookeeper-server-start@sha256:0047f1ab4c7b79062c44e9bd2ad02aaf1124d8a0ed3309229e627cdd11a37c2a resources: requests: - cpu: 50m - memory: 25Mi - limits: - cpu: 50m + cpu: 10m memory: 25Mi --- apiVersion: apps/v1 @@ -28,8 +25,5 @@ spec: image: solsson/kafka:native-zookeeper-server-start@sha256:0047f1ab4c7b79062c44e9bd2ad02aaf1124d8a0ed3309229e627cdd11a37c2a resources: requests: - cpu: 50m - memory: 25Mi - limits: - cpu: 50m + cpu: 10m memory: 25Mi From d5f12ab98f6dae5476bb89e9636086ce0418f412 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 3 May 2020 20:23:24 +0200 Subject: [PATCH 29/37] Increases max connections per client from 2 to 3 after I had brokers failing to become ready while zoo pods (two out of three) logged WARN Message:Error accepting new connection: Too many connections from [IP] --- zookeeper/10zookeeper-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 39fc9804..95ba52dc 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -28,7 +28,7 @@ data: dataDir=/var/lib/zookeeper/data dataLogDir=/var/lib/zookeeper/log clientPort=2181 - maxClientCnxns=2 + maxClientCnxns=3 initLimit=5 syncLimit=2 tcpKeepAlive=true From 8c5b3fcd585f8aef30724b134f24f9d52247f757 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 5 May 2020 08:38:28 +0200 Subject: [PATCH 30/37] cwiki.apache.org/confluence/display/KAFKA/KIP-537 --- kafka/10broker-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kafka/10broker-config.yml b/kafka/10broker-config.yml index e5e8f0ea..49fc74c4 100644 --- a/kafka/10broker-config.yml +++ b/kafka/10broker-config.yml @@ -167,7 +167,7 @@ data: zookeeper.connect=zookeeper:2181 # Timeout in ms for connecting to zookeeper - #zookeeper.connection.timeout.ms=6000 + #zookeeper.connection.timeout.ms=18000 ############################# Group Coordinator Settings ############################# From 7790ee0252ba65e4645b53cf678ad8f8506a8246 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 12 May 2020 14:37:09 +0200 Subject: [PATCH 31/37] Theory: if the name matches the logged "Server environment:host.name" we don't need to sed the pod's own entry to 0.0.0.0 --- zookeeper/10zookeeper-config.yml | 5 ++--- zookeeper/50pzoo.yml | 4 ++++ zookeeper/51zoo.yml | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 95ba52dc..a4684c86 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -16,10 +16,9 @@ data: cp -Lur /etc/kafka-configmap/* /etc/kafka/ [ ! -z "$PZOO_REPLICAS" ] && [ ! -z "$REPLICAS" ] && { sed -i "s/^server\\./#server./" /etc/kafka/zookeeper.properties - for N in $(seq $PZOO_REPLICAS); do echo "server.$N=pzoo-$(( $N - 1 )).pzoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done - for N in $(seq $(( $REPLICAS - $PZOO_REPLICAS ))); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done + for N in $(seq $PZOO_REPLICAS); do echo "server.$N=pzoo-$(( $N - 1 )).pzoo.$POD_NAMESPACE.svc.cluster.local:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done + for N in $(seq $(( $REPLICAS - $PZOO_REPLICAS ))); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).$POD_NAMESPACE.svc.cluster.local:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done } - sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties ln -s /etc/kafka/zookeeper.properties /etc/kafka/zookeeper.properties.scale-$REPLICAS.$POD_NAME zookeeper.properties: | diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index 6cac0577..c4dfdcc7 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -30,6 +30,10 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace volumeMounts: - name: configmap mountPath: /etc/kafka-configmap diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index e8974e66..8abe8b40 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -30,6 +30,10 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace - name: ID_OFFSET value: "4" volumeMounts: From 2d834088d95a85f957cba1f4db4de94d16a59fe6 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 07:15:54 +0200 Subject: [PATCH 32/37] Zookeeper 3.5.8 --- nonroot/nonroot-image-zookeeper.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nonroot/nonroot-image-zookeeper.yaml b/nonroot/nonroot-image-zookeeper.yaml index be9e0ad2..8db695a9 100644 --- a/nonroot/nonroot-image-zookeeper.yaml +++ b/nonroot/nonroot-image-zookeeper.yaml @@ -10,7 +10,7 @@ spec: image: solsson/kafka:initutils-nonroot@sha256:87f6bb39fd47a6f382018a2dc55a484d1b71eee48a58019c7e65a9bc53e8dca2 containers: - name: zookeeper - image: solsson/kafka:2.5.0-zookeeper-server-start@sha256:4f9c68ff762c1419270dd72d38450f58cf130aa0c66f8359441075b4fe04de85 + image: solsson/kafka:zookeeper-server-start@sha256:c34a9928fcc5ac15b2243ee2994cf09f5a3608b6090de378f39f89ad12320276 args: - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) --- @@ -26,6 +26,6 @@ spec: image: solsson/kafka:initutils-nonroot@sha256:87f6bb39fd47a6f382018a2dc55a484d1b71eee48a58019c7e65a9bc53e8dca2 containers: - name: zookeeper - image: solsson/kafka:2.5.0-zookeeper-server-start@sha256:4f9c68ff762c1419270dd72d38450f58cf130aa0c66f8359441075b4fe04de85 + image: solsson/kafka:zookeeper-server-start@sha256:c34a9928fcc5ac15b2243ee2994cf09f5a3608b6090de378f39f89ad12320276 args: - /etc/kafka/zookeeper.properties.scale-$(REPLICAS).$(POD_NAME) From 2c05b72bda7b71a3056dad5041a836d9c9aae81a Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 07:44:28 +0200 Subject: [PATCH 33/37] Fixes the zoo service names. Only pzoo was correct. --- zookeeper/10zookeeper-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index a4684c86..57728474 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -17,7 +17,7 @@ data: [ ! -z "$PZOO_REPLICAS" ] && [ ! -z "$REPLICAS" ] && { sed -i "s/^server\\./#server./" /etc/kafka/zookeeper.properties for N in $(seq $PZOO_REPLICAS); do echo "server.$N=pzoo-$(( $N - 1 )).pzoo.$POD_NAMESPACE.svc.cluster.local:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done - for N in $(seq $(( $REPLICAS - $PZOO_REPLICAS ))); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).$POD_NAMESPACE.svc.cluster.local:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done + for N in $(seq $(( $REPLICAS - $PZOO_REPLICAS ))); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo.$POD_NAMESPACE.svc.cluster.local:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done } ln -s /etc/kafka/zookeeper.properties /etc/kafka/zookeeper.properties.scale-$REPLICAS.$POD_NAME From 959723ff0c807b5ddae35b9a83a9b5c9298a2456 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 08:34:50 +0200 Subject: [PATCH 34/37] Documents the upcoming merge --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 552d8fa5..8d58432e 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,8 @@ Then pick and chose from patches our [example variants](https://github.com/Yolea ## Version history | tag | k8s ≥ | highlights | -| ------ | ----- | ----------- | -| TBD | 1.13+ | Kafka [2.4.0](https://github.com/Yolean/kubernetes-kafka/pull/297) + [standard storage class](https://github.com/Yolean/kubernetes-kafka/pull/294) | +| v7.0.0 | 1.15+ | [Breaking](https://github.com/Yolean/kubernetes-kafka/pull/311#issuecomment-657181714) with [nonroot](./nonroot/) and [native](./native/) bases | +| v6.0.x | 1.13+ | Kafka [2.4.0](https://github.com/Yolean/kubernetes-kafka/pull/297) + [standard storage class](https://github.com/Yolean/kubernetes-kafka/pull/294) | | v6.0.0 | 1.11+ | Kafka 2.2.0 + `apply -k` (kubectl 1.14+) + [#270](https://github.com/Yolean/kubernetes-kafka/pull/270) | | v5.1.0 | 1.11+ | Kafka 2.1.1 | | v5.0.3 | 1.11+ | Zookeeper fix [#227](https://github.com/Yolean/kubernetes-kafka/pull/227) + [maxClientCnxns=1](https://github.com/Yolean/kubernetes-kafka/pull/230#issuecomment-445953857) | From e409686378b9eefd99308e5e0f01902b4a1b1b6f Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 08:42:14 +0200 Subject: [PATCH 35/37] Uses actual zookeeper hostnames (see 7790ee0 + 2c05b72), to simplify troubleshooting in cases like #310 with ephemeral pods Because of the relation between replica count and container args we're only doing this on fixed scale variants, not on bases. --- kafka/50kafka.yml | 4 ++++ variants/scale-1/kafka-scale1-overrides.json | 2 ++ variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json | 4 +++- variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json | 4 +++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/kafka/50kafka.yml b/kafka/50kafka.yml index 449c7255..452509f8 100644 --- a/kafka/50kafka.yml +++ b/kafka/50kafka.yml @@ -51,6 +51,10 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace - name: CLASSPATH value: /opt/kafka/libs/extensions/* - name: KAFKA_LOG4J_OPTS diff --git a/variants/scale-1/kafka-scale1-overrides.json b/variants/scale-1/kafka-scale1-overrides.json index 13187671..b4dcceca 100644 --- a/variants/scale-1/kafka-scale1-overrides.json +++ b/variants/scale-1/kafka-scale1-overrides.json @@ -1,4 +1,6 @@ [ + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "zookeeper.connect=zoo-0.zoo.$(POD_NAMESPACE).svc.cluster.local:2181" }, {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "default.replication.factor=1"}, {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, diff --git a/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json b/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json index 37c9f1fc..605bf743 100644 --- a/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json +++ b/variants/scale-3-3/kafka-zookeeper-connect-only-zoo.json @@ -1,4 +1,6 @@ [ {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "zookeeper.connect=zoo:2181"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": + "zookeeper.connect=zoo-0.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-1.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-2.zoo.$(POD_NAMESPACE).svc.cluster.local:2181" + } ] \ No newline at end of file diff --git a/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json b/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json index 37c9f1fc..06d3bb1a 100644 --- a/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json +++ b/variants/scale-6-9/kafka-zookeeper-connect-only-zoo.json @@ -1,4 +1,6 @@ [ {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--override"}, - {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "zookeeper.connect=zoo:2181"} + {"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": + "zookeeper.connect=zoo-0.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-1.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-2.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-3.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-4.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-5.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-6.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-7.zoo.$(POD_NAMESPACE).svc.cluster.local:2181,zoo-8.zoo.$(POD_NAMESPACE).svc.cluster.local:2181" + } ] \ No newline at end of file From d1715d4f773f2981ca7c5b9d0612efc586639cdc Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 08:54:53 +0200 Subject: [PATCH 36/37] Fix changelog markdown --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8d58432e..9079cf46 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Then pick and chose from patches our [example variants](https://github.com/Yolea ## Version history | tag | k8s ≥ | highlights | +| ------ | ----- | ----------- | | v7.0.0 | 1.15+ | [Breaking](https://github.com/Yolean/kubernetes-kafka/pull/311#issuecomment-657181714) with [nonroot](./nonroot/) and [native](./native/) bases | | v6.0.x | 1.13+ | Kafka [2.4.0](https://github.com/Yolean/kubernetes-kafka/pull/297) + [standard storage class](https://github.com/Yolean/kubernetes-kafka/pull/294) | | v6.0.0 | 1.11+ | Kafka 2.2.0 + `apply -k` (kubectl 1.14+) + [#270](https://github.com/Yolean/kubernetes-kafka/pull/270) | From cee52788eb20a5eaf62ddb193f6c9341e3c9269b Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 12 Jul 2020 10:31:33 +0200 Subject: [PATCH 37/37] Uses the last builds from solsson/dockerfiles#29 --- cruise-control/topic-create.yml | 2 +- events-kube/topic-create.yaml | 2 +- kafka/test/kafkacat.yml | 2 +- kafka/test/produce-consume.yml | 2 +- native/native-image-zookeeper.yaml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cruise-control/topic-create.yml b/cruise-control/topic-create.yml index 49eef860..c8730c15 100644 --- a/cruise-control/topic-create.yml +++ b/cruise-control/topic-create.yml @@ -8,7 +8,7 @@ spec: spec: containers: - name: topic-create - image: solsson/kafka:native-cli@sha256:7a4cc4ef875aea50b8d4dbb525cbac0ef3a5c6e611fcafc2c415ca432ebe5601 + image: solsson/kafka:native-cli@sha256:fbf29c59182fb87921c5199783d2d5796856ecbfe34a9c03eca658b3cf50f3c4 command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/events-kube/topic-create.yaml b/events-kube/topic-create.yaml index 5021a394..2cf4f062 100644 --- a/events-kube/topic-create.yaml +++ b/events-kube/topic-create.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: topic-create - image: solsson/kafka:native-cli@sha256:7a4cc4ef875aea50b8d4dbb525cbac0ef3a5c6e611fcafc2c415ca432ebe5601 + image: solsson/kafka:native-cli@sha256:fbf29c59182fb87921c5199783d2d5796856ecbfe34a9c03eca658b3cf50f3c4 command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/kafka/test/kafkacat.yml b/kafka/test/kafkacat.yml index 45bf923e..b0f169ea 100644 --- a/kafka/test/kafkacat.yml +++ b/kafka/test/kafkacat.yml @@ -72,7 +72,7 @@ spec: spec: containers: - name: topic-create - image: solsson/kafka:native-cli@sha256:7a4cc4ef875aea50b8d4dbb525cbac0ef3a5c6e611fcafc2c415ca432ebe5601 + image: solsson/kafka:native-cli@sha256:fbf29c59182fb87921c5199783d2d5796856ecbfe34a9c03eca658b3cf50f3c4 command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/kafka/test/produce-consume.yml b/kafka/test/produce-consume.yml index fa23c771..02cbad0e 100644 --- a/kafka/test/produce-consume.yml +++ b/kafka/test/produce-consume.yml @@ -55,7 +55,7 @@ spec: spec: containers: - name: topic-create - image: solsson/kafka:native-cli@sha256:7a4cc4ef875aea50b8d4dbb525cbac0ef3a5c6e611fcafc2c415ca432ebe5601 + image: solsson/kafka:native-cli@sha256:fbf29c59182fb87921c5199783d2d5796856ecbfe34a9c03eca658b3cf50f3c4 command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/native/native-image-zookeeper.yaml b/native/native-image-zookeeper.yaml index e68a5f0d..5d38e65d 100644 --- a/native/native-image-zookeeper.yaml +++ b/native/native-image-zookeeper.yaml @@ -7,7 +7,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:native-zookeeper-server-start@sha256:0047f1ab4c7b79062c44e9bd2ad02aaf1124d8a0ed3309229e627cdd11a37c2a + image: solsson/kafka:native-zookeeper-server-start@sha256:ba3a0632240b8906a3b5bb6441e98ad9d9de73cb716b156ca68f1b435c819e8b resources: requests: cpu: 10m @@ -22,7 +22,7 @@ spec: spec: containers: - name: zookeeper - image: solsson/kafka:native-zookeeper-server-start@sha256:0047f1ab4c7b79062c44e9bd2ad02aaf1124d8a0ed3309229e627cdd11a37c2a + image: solsson/kafka:native-zookeeper-server-start@sha256:ba3a0632240b8906a3b5bb6441e98ad9d9de73cb716b156ca68f1b435c819e8b resources: requests: cpu: 10m