From 5bb49e3d40150ff79f57a043a353eb66182c8beb Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:24:55 +0200 Subject: With explicit log4j path we can change config mount ... to not mix with sample config. See https://github.com/solsson/dockerfiles/pull/10. --- 50kafka.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index 8536b1c..3ec2bb5 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -31,7 +31,7 @@ spec: image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS - value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties + value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties - name: JMX_PORT value: "5555" ports: @@ -41,7 +41,7 @@ spec: - -c - > ./bin/kafka-server-start.sh - ./config/server.properties + /etc/kafka/server.properties --override zookeeper.connect=zookeeper:2181 --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics @@ -59,7 +59,7 @@ spec: - 'echo "" | nc -w 1 127.0.0.1 9092' volumeMounts: - name: config - mountPath: /opt/kafka/config + mountPath: /etc/kafka - name: data mountPath: /var/lib/kafka/data volumes: -- cgit v1.2.3 From a2d324d509d7041642123f22b589ad4925ea1199 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:39:53 +0200 Subject: Default shell on Debian shows the same symptom ... of not forwarding signals as Alpine did. Kafka logs say nothing, and after 30s the container is terminated. With /bin/bash instead the log indicates shutdown behavior. This reverts commit c188f43cb8a252cd685a4944d35577ebc17a3668. --- 50kafka.yml | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index 3ec2bb5..051349e 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -37,7 +37,7 @@ spec: ports: - containerPort: 9092 command: - - /bin/sh + - /bin/bash - -c - > ./bin/kafka-server-start.sh diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index ef12291..ef77c5c 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -44,7 +44,7 @@ spec: - name: JMX_PORT value: "5555" command: - - /bin/sh + - /bin/bash - -euc - > export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1)); diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 0f5972c..6eb81d4 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -44,7 +44,7 @@ spec: - name: JMX_PORT value: "5555" command: - - /bin/sh + - /bin/bash - -euc - > export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 4)); -- cgit v1.2.3 From be5a82037682d9b1ebd907a367e839ecd71aa1fa Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:38:47 +0200 Subject: Demonstrates how an init script can be used to ... modify config prior to kafka start. My aim with this is to get rid of the /bin/sh startup scripts and use bin + args directly. --- 10broker-config.yml | 4 ++++ 50kafka.yml | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/10broker-config.yml b/10broker-config.yml index b86a057..b6ecf1c 100644 --- a/10broker-config.yml +++ b/10broker-config.yml @@ -4,6 +4,10 @@ metadata: namespace: kafka apiVersion: v1 data: + init.sh: |- + echo "I guess I'm running in the init container" + sed -i 's/%p %m/%p -INIT-WAS-HERE- %m/' /etc/kafka/log4j.properties + server.properties: |- # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with diff --git a/50kafka.yml b/50kafka.yml index 051349e..930dcda 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -15,6 +15,13 @@ spec: prometheus.io/port: "5556" spec: terminationGracePeriodSeconds: 30 + initContainers: + - name: init-config + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce + command: ['/bin/sh', '-ec', '. /etc/kafka/init.sh'] + volumeMounts: + - name: config + mountPath: /etc/kafka containers: - name: metrics image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d -- cgit v1.2.3 From 0d534e8ad6f0766cb29293b148ffc9ee6bdec35f Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 16:48:14 +0200 Subject: Moves broker.id config into init script --- 10broker-config.yml | 9 ++++++--- 50kafka.yml | 3 +-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/10broker-config.yml b/10broker-config.yml index b6ecf1c..af0f037 100644 --- a/10broker-config.yml +++ b/10broker-config.yml @@ -5,8 +5,11 @@ metadata: apiVersion: v1 data: init.sh: |- - echo "I guess I'm running in the init container" - sed -i 's/%p %m/%p -INIT-WAS-HERE- %m/' /etc/kafka/log4j.properties + #!/bin/bash + set -x + + export KAFKA_BROKER_ID=${HOSTNAME##*-} + sed -i "s/\${KAFKA_BROKER_ID}/$KAFKA_BROKER_ID/" /etc/kafka/server.properties server.properties: |- # Licensed to the Apache Software Foundation (ASF) under one or more @@ -29,7 +32,7 @@ data: ############################# Server Basics ############################# # The id of the broker. This must be set to a unique integer for each broker. - broker.id=0 + broker.id=${KAFKA_BROKER_ID} # Switch to enable topic deletion or not, default value is false #delete.topic.enable=true diff --git a/50kafka.yml b/50kafka.yml index 930dcda..c55edc5 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -18,7 +18,7 @@ spec: initContainers: - name: init-config image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce - command: ['/bin/sh', '-ec', '. /etc/kafka/init.sh'] + command: ['/bin/bash', '/etc/kafka/init.sh'] volumeMounts: - name: config mountPath: /etc/kafka @@ -52,7 +52,6 @@ spec: --override zookeeper.connect=zookeeper:2181 --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics - --override broker.id=${HOSTNAME##*-} --override auto.create.topics.enable=false resources: requests: -- cgit v1.2.3 From bfe7e31511e96d53b558708ffa7bcb1cc2336c42 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 16:51:16 +0200 Subject: With no bash tricks in command we can use the actual bin ... avoiding a layer of indirection and the associated gotchas with signals. --- 50kafka.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index c55edc5..9b8bde2 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -44,15 +44,16 @@ spec: ports: - containerPort: 9092 command: - - /bin/bash - - -c - - > - ./bin/kafka-server-start.sh - /etc/kafka/server.properties - --override zookeeper.connect=zookeeper:2181 - --override log.retention.hours=-1 - --override log.dirs=/var/lib/kafka/data/topics - --override auto.create.topics.enable=false + - ./bin/kafka-server-start.sh + - /etc/kafka/server.properties + - --override + - zookeeper.connect=zookeeper:2181 + - --override + - log.retention.hours=-1 + - --override + - log.dirs=/var/lib/kafka/data/topics + - --override + - auto.create.topics.enable=false resources: requests: cpu: 100m -- cgit v1.2.3 From fda7bdb6b91c5abfb044efc6630447c86d8544ba Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 21:45:48 +0200 Subject: Employs the init script concept for zookeeper too, reducing duplcation --- zookeeper/10zookeeper-config.yml | 14 +++++++++++++- zookeeper/50pzoo.yml | 23 +++++++++++++---------- zookeeper/51zoo.yml | 23 +++++++++++++---------- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 58d8b6a..58e5c56 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -4,6 +4,18 @@ metadata: namespace: kafka apiVersion: v1 data: + init.sh: |- + #!/bin/bash + set -x + + OFFSET=1 + case $HOSTNAME in zoo-*) + OFFSET=4 + esac + export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $OFFSET)) + echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid + sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties + zookeeper.properties: |- tickTime=2000 dataDir=/var/lib/zookeeper/data @@ -16,7 +28,7 @@ data: server.3=pzoo-2.pzoo:2888:3888:participant server.4=zoo-0.zoo:2888:3888:participant server.5=zoo-1.zoo:2888:3888:participant - + log4j.properties: |- log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index ef77c5c..9989662 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -16,6 +16,15 @@ spec: prometheus.io/port: "5556" spec: terminationGracePeriodSeconds: 10 + initContainers: + - name: init-config + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce + command: ['/bin/bash', '/etc/kafka/init.sh'] + volumeMounts: + - name: config + mountPath: /etc/kafka + - name: data + mountPath: /var/lib/zookeeper/data containers: - name: metrics image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d @@ -40,18 +49,12 @@ spec: image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS - value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties + value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties - name: JMX_PORT value: "5555" command: - - /bin/bash - - -euc - - > - export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1)); - echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid; - sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" config/zookeeper.properties; - cat config/zookeeper.properties; - ./bin/zookeeper-server-start.sh config/zookeeper.properties + - ./bin/zookeeper-server-start.sh + - /etc/kafka/zookeeper.properties ports: - containerPort: 2181 name: client @@ -77,7 +80,7 @@ spec: - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config - mountPath: /opt/kafka/config + mountPath: /etc/kafka - name: data mountPath: /var/lib/zookeeper/data volumes: diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 6eb81d4..90dae02 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -16,6 +16,15 @@ spec: prometheus.io/port: "5556" spec: terminationGracePeriodSeconds: 10 + initContainers: + - name: init-config + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce + command: ['/bin/bash', '/etc/kafka/init.sh'] + volumeMounts: + - name: config + mountPath: /etc/kafka + - name: data + mountPath: /var/lib/zookeeper/data containers: - name: metrics image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d @@ -40,18 +49,12 @@ spec: image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS - value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties + value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties - name: JMX_PORT value: "5555" command: - - /bin/bash - - -euc - - > - export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 4)); - echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid; - sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" config/zookeeper.properties; - cat config/zookeeper.properties; - ./bin/zookeeper-server-start.sh config/zookeeper.properties + - ./bin/zookeeper-server-start.sh + - /etc/kafka/zookeeper.properties ports: - containerPort: 2181 name: client @@ -77,7 +80,7 @@ spec: - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config - mountPath: /opt/kafka/config + mountPath: /etc/kafka - name: data mountPath: /var/lib/zookeeper/data volumes: -- cgit v1.2.3 From 082f57aa7f32bb17aca73849a910fa1318220098 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 04:54:06 +0200 Subject: Places the myid magic number where replicas are --- zookeeper/10zookeeper-config.yml | 7 ++----- zookeeper/51zoo.yml | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 58e5c56..20f7823 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -8,11 +8,8 @@ data: #!/bin/bash set -x - OFFSET=1 - case $HOSTNAME in zoo-*) - OFFSET=4 - esac - export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $OFFSET)) + [ -z "$ID_OFFSET" ] && ID_OFFSET=1 + export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $ID_OFFSET)) echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 90dae02..7e39cac 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -20,6 +20,9 @@ spec: - name: init-config image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: ['/bin/bash', '/etc/kafka/init.sh'] + env: + - name: ID_OFFSET + value: "4" volumeMounts: - name: config mountPath: /etc/kafka -- cgit v1.2.3 From b848f85f37c50ca232be1ef7e462568b0f680453 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 05:00:58 +0200 Subject: Stops logs from growing when zookeeper is idle --- zookeeper/10zookeeper-config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 20f7823..e796b4b 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -31,3 +31,7 @@ data: log4j.appender.stdout=org.apache.log4j.ConsoleAppender 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 + log4j.logger.org.apache.zookeeper.server.NIOServerCnxn=WARN -- cgit v1.2.3