From docs/DECISIONS.md in the QuantyKube repository.
Every choice in QuantyKube that might be regretted is written down as a
short record: what was decided, what it costs, and what was rejected.
Each has its own page here, from docs/DECISIONS.md. When a later
record changes an earlier one, the earlier one says so at its top, and
its status below names the record that changed it. All others are in
force.
The rule the file keeps:
Short ADRs. Newest at the bottom. If a decision gets reversed, strike it through and add a new entry, never silently edit history.
- ADR-001 Kubernetes first: the etcd subset the API server uses
- ADR-002 Honesty rule for public claims
- ADR-003 No third-party crates, the engine comes from QuantyDB
- ADR-004 Plaintext over a Unix socket until QuantyCore has TLS Partly superseded
- ADR-005 Sandbox means the node runtime behind CRI
- ADR-006 One storage interface, QuantyDB behind it first
- ADR-007 Apache 2.0, and money from what surrounds the code
- ADR-008 Raft comes later, and starts with a simulator Partly superseded
- ADR-009 kubectl apply installs an operator that swaps and undoes Partly superseded
- ADR-010 A revision is a commit, and the change log keeps both sides Partly superseded
- ADR-011 History is kept by time, whatever the API server compacts Amended
- ADR-012 A commit holds a range of revisions, so writes share fsyncs
- ADR-013 The runtime's syscalls sit behind one unsafe crate
- ADR-014 History lives in the change log, snapshots only briefly
- ADR-015 Two malloc arenas for the server
- ADR-016 Layers are unpacked with every path resolved inside the root
- ADR-017 A pod is three bind mounted namespaces, and runtime state is not kept
- ADR-018 The runtime refuses what it cannot honour Partly superseded
- ADR-019 Volumes are attached after the pivot
- ADR-020 cgroups follow the cgroupfs driver
- ADR-021 Exec joins the container through a second fork
- ADR-022 Pod networks come from CNI plugins
- ADR-023 Users resolve inside the image, and non-root means no capabilities
- ADR-024 The seccomp filter is Docker's allowlist
- ADR-025 Pulls go through the import
- ADR-026 Without a device filter there is no MKNOD
- ADR-027 Raft before 17 November, with a cut off
- ADR-028 History is served through the Kubernetes API
- ADR-029 The demonstration and the installer target kubeadm
- ADR-030 A failed commit stops the store
- ADR-031 Over a network the store speaks TLS and wants a client certificate
- ADR-032 Raft is a state machine without I/O, tested by a simulator that finds planted bugs
- ADR-033 Store nodes talk over TLS in frames, not gRPC, with certificates from a peer CA
- ADR-034 The store on Raft: every write a command in the log, the log in a file of its own
- ADR-035 A cluster moves from etcd with its revisions, while the API server is stopped
- ADR-036 The runtime runs what a kubeadm node needs: host namespaces, added capabilities, privileged
- ADR-037 CI publishes a public image of every commit on main
- ADR-038 A node moves onto the runtime with its kubelet stopped and its old pods cleared
- ADR-039 kubectl apply reaches a node through a privileged pod that starts a systemd unit
- ADR-040 One kubectl apply: an operator that records every step in an Installation