As of v1.0.0, K3s is previewing support for running a highly available control plane without the need for an external database. This means there is no need to manage an external etcd or SQL datastore in order to run a reliable production-grade setup.

This architecture is achieved by embedding a dqlite database within the K3s server process. DQLite is short for “distributed SQLite.” According to, it is “a fast, embedded, persistent SQL database with Raft consensus that is perfect for fault-tolerant IoT and Edge devices.” This makes it a natural fit for K3s.

To run K3s in this mode, you must have an odd number of server nodes. We recommend starting with three nodes.

To get started, first launch a server node with the cluster-init flag to enable clustering and a token that will be used as a shared secret to join additional servers to the cluster.

K3S_TOKEN=SECRET k3s server --cluster-init

After launching the first server, join the second and third servers to the cluster using the shared secret:

K3S_TOKEN=SECRET k3s server --server https://<ip or hostname of server1>:6443

Now you have a highly available control plane. Joining additional worker nodes to the cluster follows the same procedure as a single server cluster.