blob: f4851489729de3f0dc78bc8b4b4b026316f0cee9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# 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
|