Skip to content

Commit fb67f02

Browse files
authored
Merge pull request #253 from Yolean/kustomize
Introduce a Kustomization concept
2 parents 494bbca + 83b88ad commit fb67f02

File tree

11 files changed

+149
-1
lines changed

11 files changed

+149
-1
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,22 @@ That'll give you client "bootstrap" `bootstrap.kafka.svc.cluster.local:9092`.
2525
Our only dependency is `kubectl`. Not because we dislike Helm or Operators, but because we think plain manifests make it easier to collaborate.
2626
If you begin to rely on this kafka setup we recommend you fork, for example to edit [broker config](https://github.com/Yolean/kubernetes-kafka/blob/master/kafka/10broker-config.yml#L47).
2727

28+
## Kustomize
29+
30+
With the introduction of [app customization](https://kubectl.docs.kubernetes.io/pages/app_customization/introduction.html) in `kubectl` 1.14 there's an alternative to forks. We as a community can maintain a set of overlays.
31+
32+
See the [variants](./variants) folder for different overlays. For example to scale to 1 kafka broker try `kubectl apply -k variants/scale-1/`.
33+
34+
Currently `apply -k` replaces `apply -f ./zookeeper; apply -f ./kafka`.
35+
The original commands now result in `error: unable to decode "zookeeper/kustomization.yaml": Object 'Kind' is missing in ...`
36+
and though they still seem to work you can get around that with a v1.14+ kubectl using: `kubectl apply -k variants/as-is/`.
37+
38+
### Maintaining your own kustomization
39+
40+
`kubectl apply -k` takes a siungle overlay, meaning that you can't compose different overlays from this repo.
41+
You'll probably want to maintain your own variant.
42+
One option is to keep kubernets-kafka as a git submodule and edit the relative path from an example variant.
43+
2844
## Version history
2945

3046
| tag | k8s ≥ | highlights |

kafka/kustomization.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
resources:
2+
- 10broker-config.yml
3+
- 20dns.yml
4+
- 30bootstrap-service.yml
5+
- 50kafka.yml

variants/as-is/kustomization.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
bases:
2+
- ../../kafka
3+
- ../../zookeeper

variants/scale-1/kafka.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: kafka
5+
namespace: kafka
6+
spec:
7+
replicas: 1
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
bases:
2+
- ../../kafka
3+
- ../../zookeeper
4+
patchesStrategicMerge:
5+
- kafka.yaml
6+
- zookeeper.yaml

variants/scale-1/zookeeper.yaml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: pzoo
6+
namespace: kafka
7+
---
8+
apiVersion: apps/v1
9+
kind: StatefulSet
10+
metadata:
11+
name: pzoo
12+
namespace: kafka
13+
spec:
14+
replicas: 1
15+
template:
16+
spec:
17+
initContainers:
18+
- name: init-config
19+
env:
20+
- name: PZOO_REPLICAS
21+
value: '1'
22+
- name: ZOO_REPLICAS
23+
value: '0'
24+
---
25+
apiVersion: apps/v1
26+
kind: StatefulSet
27+
metadata:
28+
name: zoo
29+
namespace: kafka
30+
spec:
31+
replicas: 0
32+
template:
33+
spec:
34+
initContainers:
35+
- name: init-config
36+
env:
37+
# There's no validation on these numbers adding up to a coherent zk config, so watch out
38+
- name: PZOO_REPLICAS
39+
value: '1'
40+
- name: ZOO_REPLICAS
41+
value: '0'
42+
- name: ID_OFFSET
43+
value: '2'

variants/scale-2/kafka.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: kafka
5+
namespace: kafka
6+
spec:
7+
replicas: 2
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
bases:
2+
- ../../kafka
3+
- ../../zookeeper
4+
patchesStrategicMerge:
5+
- kafka.yaml
6+
- zookeeper.yaml

variants/scale-2/zookeeper.yaml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: pzoo
6+
namespace: kafka
7+
---
8+
apiVersion: apps/v1
9+
kind: StatefulSet
10+
metadata:
11+
name: pzoo
12+
namespace: kafka
13+
spec:
14+
replicas: 2
15+
template:
16+
spec:
17+
initContainers:
18+
- name: init-config
19+
env:
20+
- name: PZOO_REPLICAS
21+
value: '2'
22+
- name: ZOO_REPLICAS
23+
value: '1'
24+
---
25+
apiVersion: apps/v1
26+
kind: StatefulSet
27+
metadata:
28+
name: zoo
29+
namespace: kafka
30+
spec:
31+
replicas: 1
32+
template:
33+
spec:
34+
initContainers:
35+
- name: init-config
36+
env:
37+
# There's no validation on these numbers adding up to a coherent zk config, so watch out
38+
- name: PZOO_REPLICAS
39+
value: '2'
40+
- name: ZOO_REPLICAS
41+
value: '1'
42+
- name: ID_OFFSET
43+
value: '3'

zookeeper/10zookeeper-config.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@ data:
1414
export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $ID_OFFSET))
1515
echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid
1616
cp -Lur /etc/kafka-configmap/* /etc/kafka/
17+
[ ! -z "$PZOO_REPLICAS" ] && [ ! -z "$ZOO_REPLICAS" ] && {
18+
sed -i "s/^server\\./#server./" /etc/kafka/zookeeper.properties
19+
for N in $(seq $PZOO_REPLICAS); do echo "server.$N=pzoo-$(( $N - 1 )).pzoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done
20+
for N in $(seq $ZOO_REPLICAS); do echo "server.$(( $PZOO_REPLICAS + $N ))=zoo-$(( $N - 1 )).zoo:2888:3888:participant" >> /etc/kafka/zookeeper.properties; done
21+
}
1722
sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties
1823
19-
zookeeper.properties: |-
24+
zookeeper.properties: |
2025
tickTime=2000
2126
dataDir=/var/lib/zookeeper/data
2227
dataLogDir=/var/lib/zookeeper/log

0 commit comments

Comments
 (0)