From 2b01d41c31abeda8309b18db8634117a9ee75715 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Oct 2016 11:38:41 +0200 Subject: Keeps a namespace file in zookeeper too, because bootstrapping starts there --- zookeeper/00namespace.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 zookeeper/00namespace.yml diff --git a/zookeeper/00namespace.yml b/zookeeper/00namespace.yml new file mode 100644 index 0000000..a6cf001 --- /dev/null +++ b/zookeeper/00namespace.yml @@ -0,0 +1,5 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: kafka -- cgit v1.2.3 From 8e7be7e60a2812c0ecf244016581fba6ee11bbfa Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Oct 2016 12:01:57 +0200 Subject: Without PetSet and 3.5+ dynamic config you definitely want to avoid scaling, so do https://github.com/Yolean/kubernetes-kafka/issues/4 now --- README.md | 7 +-- zookeeper/20zoo-service.yml | 34 +++++++++++++++ zookeeper/50zoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- zookeeper/52zoo.yml | 2 +- zookeeper/53zoo.yml | 38 +++++++++++++++++ zookeeper/54zoo.yml | 38 +++++++++++++++++ zookeeper/README.md | 85 ------------------------------------- zookeeper/bootstrap/pv-template.yml | 48 --------------------- zookeeper/bootstrap/pv.sh | 11 ----- zookeeper/bootstrap/pvc.yml | 48 --------------------- 11 files changed, 115 insertions(+), 200 deletions(-) create mode 100644 zookeeper/53zoo.yml create mode 100644 zookeeper/54zoo.yml delete mode 100644 zookeeper/README.md delete mode 100644 zookeeper/bootstrap/pv-template.yml delete mode 100755 zookeeper/bootstrap/pv.sh delete mode 100644 zookeeper/bootstrap/pvc.yml diff --git a/README.md b/README.md index c2b5427..d26d157 100644 --- a/README.md +++ b/README.md @@ -30,13 +30,10 @@ The volume size in the example is very small. The numbers don't really matter as ## Set up Zookeeper -This module contains a copy of `pets/zookeeper/` from https://github.com/kubernetes/contrib. +With [nopetset](https://github.com/Yolean/kubernetes-kafka/pull/9) we also discarded persistent storage, so there is no zookeeper bootstrap or [README](https://github.com/Yolean/kubernetes-kafka/blob/master/zookeeper/README.md). Just run: -See the `./zookeeper` folder and follow the README there. - -An additional service has been added here, create using: ``` -kubectl create -f ./zookeeper/service.yml +kubectl create -f ./zookeeper/ ``` ## Start Kafka diff --git a/zookeeper/20zoo-service.yml b/zookeeper/20zoo-service.yml index 820647e..5fa87f2 100644 --- a/zookeeper/20zoo-service.yml +++ b/zookeeper/20zoo-service.yml @@ -49,3 +49,37 @@ spec: name: peer - port: 3888 name: leader-election +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + name: zoo-3 + namespace: kafka +spec: + selector: + app: zookeeper + petindex: "3" + ports: + - port: 2888 + name: peer + - port: 3888 + name: leader-election +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + name: zoo-4 + namespace: kafka +spec: + selector: + app: zookeeper + petindex: "4" + ports: + - port: 2888 + name: peer + - port: 3888 + name: leader-election diff --git a/zookeeper/50zoo.yml b/zookeeper/50zoo.yml index d0f26e4..8c37d63 100644 --- a/zookeeper/50zoo.yml +++ b/zookeeper/50zoo.yml @@ -18,7 +18,7 @@ spec: - name: ZOO_MY_ID value: "1" - name: ZOO_SERVERS - value: server.1=0.0.0.0:2888:3888:participant server.2=zoo-1.kafka.svc.cluster.local:2888:3888:participant server.3=zoo-2.kafka.svc.cluster.local:2888:3888:participant + value: server.1=0.0.0.0:2888:3888:participant server.2=zoo-1.kafka.svc.cluster.local:2888:3888:participant server.3=zoo-2.kafka.svc.cluster.local:2888:3888:participant server.4=zoo-3.kafka.svc.cluster.local:2888:3888:participant server.5=zoo-4.kafka.svc.cluster.local:2888:3888:participant ports: - containerPort: 2181 name: client diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 3341e00..785f7d1 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -18,7 +18,7 @@ spec: - name: ZOO_MY_ID value: "2" - name: ZOO_SERVERS - value: server.1=zoo-0.kafka.svc.cluster.local:2888:3888:participant server.2=0.0.0.0:2888:3888:participant server.3=zoo-2.kafka.svc.cluster.local:2888:3888:participant + value: server.1=zoo-0.kafka.svc.cluster.local:2888:3888:participant server.2=0.0.0.0:2888:3888:participant server.3=zoo-2.kafka.svc.cluster.local:2888:3888:participant server.4=zoo-3.kafka.svc.cluster.local:2888:3888:participant server.5=zoo-4.kafka.svc.cluster.local:2888:3888:participant ports: - containerPort: 2181 name: client diff --git a/zookeeper/52zoo.yml b/zookeeper/52zoo.yml index 4676525..41902db 100644 --- a/zookeeper/52zoo.yml +++ b/zookeeper/52zoo.yml @@ -18,7 +18,7 @@ spec: - name: ZOO_MY_ID value: "3" - name: ZOO_SERVERS - value: server.1=zoo-0.kafka.svc.cluster.local:2888:3888:participant server.2=zoo-1.kafka.svc.cluster.local:2888:3888:participant server.3=0.0.0.0:2888:3888:participant + value: server.1=zoo-0.kafka.svc.cluster.local:2888:3888:participant server.2=zoo-1.kafka.svc.cluster.local:2888:3888:participant server.3=0.0.0.0:2888:3888:participant server.4=zoo-3.kafka.svc.cluster.local:2888:3888:participant server.5=zoo-4.kafka.svc.cluster.local:2888:3888:participant ports: - containerPort: 2181 name: client diff --git a/zookeeper/53zoo.yml b/zookeeper/53zoo.yml new file mode 100644 index 0000000..20a8959 --- /dev/null +++ b/zookeeper/53zoo.yml @@ -0,0 +1,38 @@ +apiVersion: extensions/v1beta1 +kind: ReplicaSet +metadata: + name: zoo-3 + namespace: kafka +spec: + replicas: 1 + template: + metadata: + labels: + app: zookeeper + petindex: "3" + spec: + containers: + - name: zookeeper + image: zookeeper@sha256:bb1a12a2168fc5e508ee019aea2d45bf846e99ea87d6bcaf2ede5c59fd439368 + env: + - name: ZOO_MY_ID + value: "4" + - name: ZOO_SERVERS + value: server.1=zoo-0.kafka.svc.cluster.local:2888:3888:participant server.2=zoo-1.kafka.svc.cluster.local:2888:3888:participant server.3=zoo-2.kafka.svc.cluster.local:2888:3888:participant server.4=0.0.0.0:2888:3888:participant server.5=zoo-4.kafka.svc.cluster.local:2888:3888:participant + ports: + - containerPort: 2181 + name: client + - containerPort: 2888 + name: peer + - containerPort: 3888 + name: leader-election + volumeMounts: + - name: datadir + mountPath: /tmp/zookeeper + - name: opt + mountPath: /opt/ + volumes: + - name: opt + emptyDir: {} + - name: datadir + emptyDir: {} diff --git a/zookeeper/54zoo.yml b/zookeeper/54zoo.yml new file mode 100644 index 0000000..017e9c2 --- /dev/null +++ b/zookeeper/54zoo.yml @@ -0,0 +1,38 @@ +apiVersion: extensions/v1beta1 +kind: ReplicaSet +metadata: + name: zoo-4 + namespace: kafka +spec: + replicas: 1 + template: + metadata: + labels: + app: zookeeper + petindex: "4" + spec: + containers: + - name: zookeeper + image: zookeeper@sha256:bb1a12a2168fc5e508ee019aea2d45bf846e99ea87d6bcaf2ede5c59fd439368 + env: + - name: ZOO_MY_ID + value: "5" + - name: ZOO_SERVERS + value: server.1=zoo-0.kafka.svc.cluster.local:2888:3888:participant server.2=zoo-1.kafka.svc.cluster.local:2888:3888:participant server.3=zoo-2.kafka.svc.cluster.local:2888:3888:participant server.4=zoo-3.kafka.svc.cluster.local:2888:3888:participant server.5=0.0.0.0:2888:3888:participant + ports: + - containerPort: 2181 + name: client + - containerPort: 2888 + name: peer + - containerPort: 3888 + name: leader-election + volumeMounts: + - name: datadir + mountPath: /tmp/zookeeper + - name: opt + mountPath: /opt/ + volumes: + - name: opt + emptyDir: {} + - name: datadir + emptyDir: {} diff --git a/zookeeper/README.md b/zookeeper/README.md deleted file mode 100644 index f485148..0000000 --- a/zookeeper/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Zookeeper - -This example runs zookeeper through a petset. - -## Bootstrap - -Create the petset in this directory -``` -$ kubetl create -f zookeeper.yaml -``` - -Once you have all 3 nodes in Running, you can run the "test.sh" script in this directory. - -## Failover - -You can test failover by killing the leader. Insert a key: -```console -$ kubectl -n kafka exec zoo-0 -- /opt/zookeeper/bin/zkCli.sh create /foo bar; -$ kubectl -n kafka exec zoo-2 -- /opt/zookeeper/bin/zkCli.sh get /foo; - -Watch existing members: -```console -$ kubectl -n kafka run --attach bbox --image=busybox --restart=Never -- sh -c 'while true; do for i in 0 1 2; do echo zoo-$i $(echo stats | nc zoo-$i.zk:2181 | grep Mode); sleep 1; done; done'; -zoo-2 Mode: follower -zoo-0 Mode: follower -zoo-1 Mode: leader -zoo-2 Mode: follower -``` - -Delete pets and wait for the petset controller to bring the back up: -```console -$ kubectl -n kafka delete po -l app=zk -$ kubectl -n kafka get po --watch-only -NAME READY STATUS RESTARTS AGE -zoo-0 0/1 Init:0/2 0 16s -zoo-0 0/1 Init:0/2 0 21s -zoo-0 0/1 PodInitializing 0 23s -zoo-0 1/1 Running 0 41s -zoo-1 0/1 Pending 0 0s -zoo-1 0/1 Init:0/2 0 0s -zoo-1 0/1 Init:0/2 0 14s -zoo-1 0/1 PodInitializing 0 17s -zoo-1 0/1 Running 0 18s -zoo-2 0/1 Pending 0 0s -zoo-2 0/1 Init:0/2 0 0s -zoo-2 0/1 Init:0/2 0 12s -zoo-2 0/1 Init:0/2 0 28s -zoo-2 0/1 PodInitializing 0 31s -zoo-2 0/1 Running 0 32s -... - -zoo-0 Mode: follower -zoo-1 Mode: leader -zoo-2 Mode: follower -``` - -Check the previously inserted key: -```console -$ kubectl -n kafka exec zoo-1 -- /opt/zookeeper/bin/zkCli.sh get /foo -ionid = 0x354887858e80035, negotiated timeout = 30000 - -WATCHER:: - -WatchedEvent state:SyncConnected type:None path:null -bar -``` - -## Scaling - -You can scale up by modifying the number of replicas on the PetSet. - -## Image Upgrade - -TODO: Add details - -## Maintenance - -TODO: Add details - -## Limitations -* Both petset and init containers are in alpha -* Look through the on-start and on-change scripts for TODOs -* Doesn't support the addition of observers through the petset -* Only supports storage options that have backends for persistent volume claims - diff --git a/zookeeper/bootstrap/pv-template.yml b/zookeeper/bootstrap/pv-template.yml deleted file mode 100644 index 61d84ee..0000000 --- a/zookeeper/bootstrap/pv-template.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -apiVersion: v1 -kind: PersistentVolume -metadata: - name: datadir-zoo-0 - namespace: kafka - labels: - app: zk - petindex: "0" -spec: - accessModes: - - ReadWriteOnce - capacity: - storage: 100Mi - hostPath: - path: /tmp/k8s-data/datadir-zoo-0 ---- -apiVersion: v1 -kind: PersistentVolume -metadata: - name: datadir-zoo-1 - namespace: kafka - labels: - app: zk - petindex: "1" -spec: - accessModes: - - ReadWriteOnce - capacity: - storage: 100Mi - hostPath: - path: /tmp/k8s-data/datadir-zoo-1 ---- -apiVersion: v1 -kind: PersistentVolume -metadata: - name: datadir-zoo-2 - namespace: kafka - labels: - app: zk - petindex: "2" -spec: - accessModes: - - ReadWriteOnce - capacity: - storage: 100Mi - hostPath: - path: /tmp/k8s-data/datadir-zoo-2 diff --git a/zookeeper/bootstrap/pv.sh b/zookeeper/bootstrap/pv.sh deleted file mode 100755 index ade25c5..0000000 --- a/zookeeper/bootstrap/pv.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -echo "Note that in for example GKE a PetSet will have PersistentVolume(s) and PersistentVolumeClaim(s) created for it automatically" - -dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" -path="$dir/data" -echo "Please enter a path where to store data during local testing: ($path)" -read newpath -[ -n "$newpath" ] && path=$newpath - -cat $dir/bootstrap/pv-template.yml | sed "s|/tmp/k8s-data|$path|" | kubectl create -f - diff --git a/zookeeper/bootstrap/pvc.yml b/zookeeper/bootstrap/pvc.yml deleted file mode 100644 index 84d0e46..0000000 --- a/zookeeper/bootstrap/pvc.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: datadir-zoo-0 - namespace: kafka -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi - selector: - matchLabels: - app: zk - petindex: "0" ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: datadir-zoo-1 - namespace: kafka -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi - selector: - matchLabels: - app: zk - petindex: "1" ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: datadir-zoo-2 - namespace: kafka -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi - selector: - matchLabels: - app: zk - petindex: "2" -- cgit v1.2.3