⎈ 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 · doc — “Running 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 ensemble — describes conf=1
part_of Ensuring consistent configuration — describes conf=1
part_of Managing the ZooKeeper process — describes conf=1
part_of Tolerating Node failure — describes conf=1
part_of Surviving maintenance — describes conf=1
part_of {{% heading "cleanup" %}} — describes conf=1
part_of ZooKeeper — describes conf=1
part_of Facilitating leader election — describes conf=1
part_of Achieving consensus — describes conf=1
part_of Sanity testing the ensemble — describes conf=1
part_of Providing durable storage — describes conf=1
part_of Configuring logging — describes conf=1
part_of Configuring a non-privileged user — describes conf=1
part_of Updating the ensemble — describes conf=1
part_of Handling process failure — describes conf=1
part_of Testing for liveness — describes conf=1
part_of Testing for readiness — describes conf=1

← all Docs