ADR-029, from docs/DECISIONS.md in the QuantyKube repository.
Status In force
The cluster on stage is upstream Kubernetes set up with kubeadm, on three servers with Ubuntu 26.04. k3s was the first target because it is one binary and starts in seconds, and it stays in CI for that reason, but it is a distribution, and the question a k3s demonstration invites is whether it works with real Kubernetes. Nothing in the store or the runtime depends on the distribution: they serve the etcd v3 API and the CRI.
The installer (ADR-009) does depend on it, since every distribution
keeps the API server's flags and the kubelet's configuration somewhere
else. kubeadm is the reference for clusters people run themselves, and
it makes the change clean: the API server is a static pod whose
manifest the kubelet watches, so pointing --etcd-servers at
QuantyKube restarts it. kubeadm is the first installer target and the
only one for 17 November; k3s follows.
The cost: kubeadm needs more memory and more steps than k3s, and CI gets a kubeadm cluster as an additional job.
Added on 21 October: the CI job (scripts/kubeadm.sh) runs
kubeadm init with QuantyKube as an external etcd, on the certificates
kubeadm makes for a local one. kubeadm asks an external etcd for
/version over HTTP/1.1 before it uses it, as monitoring asks for
/health, so the store's TLS port answers both besides gRPC (ADR-031).