blob: 52e1561f3e95140f05b15aadaff228a50f03a9b1 (
plain) (
tree)
|
|
# 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 exec zoo-0 -- /opt/zookeeper/bin/zkCli.sh create /foo bar;
$ kubectl exec zoo-2 -- /opt/zookeeper/bin/zkCli.sh get /foo;
Watch existing members:
```console
$ kubectl 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 delete po -l app=zk
$ kubectl 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 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
|