Fabric8 - ZooKeeper Docker Image ================================ A ZooKeeper Docker Image for use with Kubernetes. The image supports the following ZooKeeper modes: * Standalone * Clustered # Standalone Mode To start the image in standalone mode you can simply use: docker run fabric8/zookeeper # Clustered Mode To start the image in clustered mode you need to specify a couple of environment variables for the container. | Environment Variable | Description | | --------------------------------------------- | --------------------------------------| | SERVER_ID | The id of the server | | MAX_SERVERS | The number of servers in the ensemble | Each container started with both of the above variables will use the following env variable setup: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888 ... server.N=zookeeper-N:2888:3888 Ensuring that zookeeper-1, zookeeper-2 ... zookeeper-N can be resolved is beyond the scope of this image. You can use DNS, or Kubernetes services, etc depending on your environment (see below). ## Inside Kubernetes Inside Kubernetes you can use a pod setup that looks like: { "kind": "Pod", "apiVersion": "v1beta3", "metadata": { "name": "zookeeper-1", "labels": { "name": "zookeeper", "server-id": "1" } }, "spec": { "containers": [ { "name": "server", "image": "fabric8/zookeeper", "env":[ { "name": "SERVER_ID", "value": "1" }, { "name": "MAX_SERVERS", "value": "3" } ], "ports":[ { "containerPort": 2181 }, { "containerPort": 2888 }, { "containerPort": 3888 } ] } ] } In the example above we are creating a pod that creates a container using this image. The container is configured to use the environment variable required for a clustered setup. Last but not least pod is carefully named (as zookeeper-${SERVER_ID}) so that the other zookeeper servers can easily find it by hostname.