A ZooKeeper Docker Image for use with Kubernetes.
The image supports the following ZooKeeper modes:
- Standalone
- Clustered
To start the image in standalone mode you can simply use:
docker run fabric8/zookeeper
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 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.