k3sm licensed apache-2.0 (DCO)

FAQ


Is k3sm a Certified Kubernetes Distribution?#

No. k3sm cannot pass the CNCF [Conformance] suite, which assumes Linux containers, cgroups, CNI, and network namespaces. k3sm has none of them. See Limitations.

Does k3sm Use a Container Engine or a VM?#

No. By default Pods run as native Darwin processes, so there is no Linux, no containers and no VM. An optional vm RuntimeClass runs linux/arm64 Pods in a per-Pod micro-VM to isolate untrusted workloads. See Limitations.

Can I Run My Existing OCI Linux Images?#

No, on the default path. Those images carry a Linux userland, and a k3sm Pod there is a Darwin process. An unmodified linux/arm64 image (or a multi-arch image that includes it) runs instead under the vm RuntimeClass, single-node. Outside that path a Linux image is refused at pull, naming the platforms it offers and the one this node needs; linux/amd64 is refused on both paths today.

You can still use images, and the usual toolchain around them: build a darwin/arm64 binary, package it with k3sm build, then k3sm image load it or k3sm image push it to a registry the node pulls from. Tags, digests, imagePullPolicy and imagePullSecrets all behave normally. The short version is What runs; the reference is Images; see also Limitations.

Why Did My Container Exit and Not Restart?#

On the default runtime it should have. restartPolicy is honored, with an upstream-shaped CrashLoopBackOff. Two cases break that. A plain (non-sidecar) init container is not re-run in place, and a node started with --runtime hostprocess, the rootless-dev opt-out, reaps an exited container without respawning it. See Limitations.

Does Cluster DNS Work Inside a Pod?#

On the default runtime, yes. Cluster Service names, headless Services, StatefulSet per-Pod names, SRV and PTR all resolve from inside a Pod. Two caveats apply. The resolver is k3sm’s own, not CoreDNS (IPv4/A only, no AAAA), and the getaddrinfo shim that redirects a Pod’s lookups cannot load into a restricted binary. Host shells (/bin/sh, bash, zsh, dash, env), tar and the common file utilities run as re-signed copies that keep the shim; any other restricted main process (the system python3, for example) gets a ShimInactive Event and still resolves fully qualified and <svc>.<ns>.svc names through the node resolver. In-pod cluster DNS is not wired on --runtime hostprocess; on the vm RuntimeClass it works. See Limitations.

Do UDP Services Work?#

Only cluster DNS on :53. General UDP Services (ClusterIP and NodePort) are deferred. See Limitations.

Are Pods Isolated From Each Other?#

Not by uid. Same-node Pods share one _k3sm trust domain. Untrusted workloads belong on the vm RuntimeClass; see Limitations for what it supports today.

Is Multi-Node / HA Production-Ready?#

No. Multi-node ships EXPERIMENTAL; see Multi-node. A multi-server (HA) control plane is not available in v0.1.6: a cluster runs one server, and a second server cannot join yet. See HA.

Which Kubernetes Version Does k3sm Track?#

See Versions, and read the live pin from k3sm version.

How Do I Upgrade?#

Re-run the install script, curl -fsSL https://k3sm.io/install.sh | sh, which installs the latest release and restarts the daemons. Homebrew (brew upgrade) is the second install generation and is planned; the k3sm-io/tap is not published yet. A multi-node cluster rolls node-by-node. See Upgrade.

Do I Need sudo Every Time?#

No, only the one-time sudo k3sm install. See Install.