Two ways to run Kubernetes on apple/container — Talos (embedded etcd) and k3s (external-etcd HA) #1865
BinHsu
started this conversation in
Show and tell
Replies: 1 comment 2 replies
Surely having one VM per node is the standard deployment? Like how minikube did it, before kind. It was Kata containers and now Apple container that went back to the one VM per container model... I thought it would be an interesting concept of having one VM per pod, as a compromise between the two. |
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Apple's
containerruns each container as its own micro-VM with its own vmnet IP. That's an unusual base for Kubernetes — one real VM per node, no shared kernel, no Docker socket. I wanted to know what it can actually host, so I built two small provisioners on it and ran them on hardware. Sharing what the substrate allows, and the landmines.k3ac) — external etcd quorum + haproxy HA: https://github.com/BinHsu/aegis-apple-container-provisioner-k3sBoth boot one micro-VM per node and form a real multi-node cluster with per-node IPs. They are proven spikes, not maintained tooling — the code is the receipts (each repo carries an ADR trail and a first-person hardware verification log). Credit where due: @saiyam1814's
kiacalready explored the kubeadm path; these are the Talos and k3s data points alongside it.Where the two diverge — HA, and it's the interesting part:
--cluster-initforms the cluster after boot, and embedded etcd's peer membership is IP-bound — cold-restart the VMs, vmnet hands out new DHCP IPs, the members look for peers at the old addresses, and quorum never reforms. So k3ac uses k3s's pluggable external datastore: a 3-node etcd quorum (mutual TLS) addressed by FQDN, fronted by an haproxy L4 load balancer. The cluster reconnects by name after any DHCP shift, and it adds day-2 ops (snapshot/restore, rolling upgrade/rollback, cert/token rotation), all behind a-forcedry-run gate.Substrate gotchas (all verified on hardware), shared by both lanes:
container cpfaults the vsock during k3s/Talos cold-boot image extraction → deliver the kubeconfig by host bind-mount instead.The Talos one I pitched upstream; it was declined on principled grounds (siderolabs/talos#13587), so it stays as a dev/CI substrate.
Write-ups — the DHCP traces, the ADRs, the maintainer's reasoning:
Curious whether a first-party Kubernetes story (discussion #1673) lands on k3s or something else.
All reactions