⎈ k8s knowledge compiler

Running ZooKeeper, A Distributed System Coordinator [page]deterministic

tutorials

This tutorial demonstrates running [Apache Zookeeper](https://zookeeper.apache.org) on Kubernetes using [StatefulSets](/docs/concepts/workloads/controllers/statefulset/), [PodDisruptionBudgets](/docs/concepts/workloads/pods/disruptions/#pod-disruption-budget), and [PodAntiAffinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity).

##

Before starting this tutorial, you should be familiar with the following Kubernetes concepts:

  • [Pods](/docs/concepts/workloads/pods/)
  • [Cluster DNS](/docs/concepts/services-networking/dns-pod-service/)
  • [Headless Services](/docs/concepts/services-networking/service/#headless-services)
  • [PersistentVolumes](/docs/concepts/storage/persistent-volumes/)
  • [StatefulSets](/docs/concepts/workloads/controllers/statefulset/)
  • [PodDisruptionBudgets](/docs/concepts/workloads/pods/disruptions/#pod-disruption-budget)
  • [PodAntiAffinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
  • [kubectl CLI](/docs/reference/kubectl/kubectl/)

You must have a cluster with at least four nodes, and each node requires at least 2 CPUs and 4 GiB of memory. In this tutorial you will cordon and drain the cluster's nodes. This means that the cluster will terminate and evict all Pods on its nodes, and the nodes will temporarily become unschedulable. You should use a dedicated cluster for this tutorial, or you should ensure that the disruption you cause will not interfere with other tenants.

This tutorial assumes that you have configured your cluster to dynamically provision PersistentVolumes. If your cluster is not configured to do so, you will have to manually provision three 20 GiB volumes before starting this tutorial.

##

After this tutorial, you will know the following.

  • How to deploy a ZooKeeper ensemble using StatefulSet.
  • How to consistently configure the ensemble.
  • How to spread the deployment of ZooKeeper servers in the ensemble.
  • How to use PodDisruptionBudgets to ensure service availability during planned maintenance.

### ZooKeeper

[Apache ZooKeeper](https://zookeeper.apache.org/doc/current/) is a distributed, open-source coordination service for distributed applications. ZooKeeper allows you to read, write, and observe updates to data. Data are organized in a file system like hierarchy and replicated to all ZooKeeper servers in the ensemble (a set of ZooKeeper servers). All operations on data are atomic and sequentially consistent. ZooKeeper ensures this by using the [Zab](https://pdfs.semanticscholar.org/b02c/6b00bd5dbdbd951fddb00b906c82fa80f0b3.pdf) consensus protocol to replicate a state machine across all servers in the ensemble.

The ensemble uses the Zab protocol to elect a leader, and the ensemble cannot write data until that election is complete. Once complete, the ensemble uses Zab to ensure that it replicates all writes to a quorum before it acknowledges and makes them visible to clients. Without respect to weighted quorums, a quorum is a majority component of the ensemble containing the current leader. For instance, if the ensemble has three servers, a component that contains the leader and one other server constitutes a quorum. If the ensemble can not achieve a quorum, the ensemble cannot write data.

ZooKeeper servers keep their entire state machine in memory, and write every mutation to a durable WAL (Write Ahead Log) on storage media. When a server crashes, it can recover its previous state by replaying the WAL. To prevent the WAL from growing without bound, ZooKeeper servers will periodically snapshot them in memory state to storage media. These snapshots can be loaded directly into memory, and all WAL entries that preceded the snapshot may be discarded.

## Creating a ZooKeeper ensemble

The manifest below contains a [Headless Service](/docs/concepts/services-networking/service/#headless-services), a [Service](/docs/concepts/services-networking/service/), a [PodDisruptionBudget](/docs/concepts/workloads/pods/dis …(trimmed)

Sources

tutorials/stateful-application/zookeeper.md · docRunning ZooKeeper, A Distributed System Coordinator

Related (19)

part_of {{% heading "prerequisites" %}}describes conf=1
part_of {{% heading "objectives" %}}describes conf=1
part_of Creating a ZooKeeper ensembledescribes conf=1
part_of Ensuring consistent configurationdescribes conf=1
part_of Managing the ZooKeeper processdescribes conf=1
part_of Tolerating Node failuredescribes conf=1
part_of Surviving maintenancedescribes conf=1
part_of {{% heading "cleanup" %}}describes conf=1
part_of ZooKeeperdescribes conf=1
part_of Facilitating leader electiondescribes conf=1
part_of Achieving consensusdescribes conf=1
part_of Sanity testing the ensembledescribes conf=1
part_of Providing durable storagedescribes conf=1
part_of Configuring loggingdescribes conf=1
part_of Configuring a non-privileged userdescribes conf=1
part_of Updating the ensembledescribes conf=1
part_of Handling process failuredescribes conf=1
part_of Testing for livenessdescribes conf=1
part_of Testing for readinessdescribes conf=1

← all Docs