Skip to content

Commit 09e733b

Browse files
authored
Merge pull request #41 from Yolean/multizone-rack-awareness
Multizone rack awareness
2 parents 57c343b + ff972b9 commit 09e733b

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

10broker-config.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@ data:
1111
export KAFKA_BROKER_ID=${HOSTNAME##*-}
1212
sed -i "s/\${KAFKA_BROKER_ID}/$KAFKA_BROKER_ID/" /etc/kafka/server.properties
1313
14+
hash kubectl 2>/dev/null || {
15+
sed -i "s/#init#broker.rack=#init#/#init#broker.rack=# kubectl not found in path/" /etc/kafka/server.properties
16+
} && {
17+
ZONE=$(kubectl get node "$NODE_NAME" -o=go-template='{{index .metadata.labels "failure-domain.beta.kubernetes.io/zone"}}')
18+
if [ $? -ne 0 ]; then
19+
sed -i "s/#init#broker.rack=#init#/#init#broker.rack=# zone lookup failed, see -c init-config logs/" /etc/kafka/server.properties
20+
elif [ "x$ZONE" == "x<no value>" ]; then
21+
sed -i "s/#init#broker.rack=#init#/#init#broker.rack=# zone label not found for node $NODE_NAME/" /etc/kafka/server.properties
22+
else
23+
sed -i "s/#init#broker.rack=#init#/broker.rack=$ZONE/" /etc/kafka/server.properties
24+
fi
25+
}
26+
1427
server.properties: |-
1528
# Licensed to the Apache Software Foundation (ASF) under one or more
1629
# contributor license agreements. See the NOTICE file distributed with
@@ -34,6 +47,8 @@ data:
3447
# The id of the broker. This must be set to a unique integer for each broker.
3548
broker.id=${KAFKA_BROKER_ID}
3649
50+
#init#broker.rack=#init#
51+
3752
# Switch to enable topic deletion or not, default value is false
3853
delete.topic.enable=true
3954

50kafka.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ spec:
1515
terminationGracePeriodSeconds: 30
1616
initContainers:
1717
- name: init-config
18-
image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce
18+
image: solsson/kafka-initutils@sha256:c275d681019a0d8f01295dbd4a5bae3cfa945c8d0f7f685ae1f00f2579f08c7d
19+
env:
20+
- name: NODE_NAME
21+
valueFrom:
22+
fieldRef:
23+
fieldPath: spec.nodeName
1924
command: ['/bin/bash', '/etc/kafka/init.sh']
2025
volumeMounts:
2126
- name: config
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# To see if init containers need RBAC:
2+
#
3+
# $ kubectl exec kafka-0 -- cat /etc/kafka/server.properties | grep broker.rack
4+
# #init#broker.rack=# zone lookup failed, see -c init-config logs
5+
# $ kubectl logs -c init-config kafka-0
6+
# ++ kubectl get node some-node '-o=go-template={{index .metadata.labels "failure-domain.beta.kubernetes.io/zone"}}'
7+
# Error from server (Forbidden): User "system:serviceaccount:kafka:default" cannot get nodes at the cluster scope.: "Unknown user \"system:serviceaccount:kafka:default\""
8+
#
9+
---
10+
kind: ClusterRole
11+
apiVersion: rbac.authorization.k8s.io/v1beta1
12+
metadata:
13+
name: node-reader
14+
labels:
15+
origin: github.com_Yolean_kubernetes-kafka
16+
rules:
17+
- apiGroups:
18+
- ""
19+
resources:
20+
- nodes
21+
verbs:
22+
- get
23+
---
24+
kind: ClusterRoleBinding
25+
apiVersion: rbac.authorization.k8s.io/v1beta1
26+
metadata:
27+
name: kafka-node-reader
28+
labels:
29+
origin: github.com_Yolean_kubernetes-kafka
30+
roleRef:
31+
apiGroup: rbac.authorization.k8s.io
32+
kind: ClusterRole
33+
name: node-reader
34+
subjects:
35+
- kind: ServiceAccount
36+
name: default
37+
namespace: kafka

0 commit comments

Comments
 (0)