Skip to content

Playbook: 3-Node K3s High Availability Cluster Setup

This playbook describes how to deploy a production-ready, highly available K3s cluster with three control-plane nodes.

Overview

A 3-node HA setup uses an embedded etcd database for the control plane, providing resilience against the failure of any single node.

Prerequisites

  • 3 Linux nodes (e.g., Ubuntu 24.04 or Talos OS).
  • Static IP addresses for all nodes.
  • SSH access between nodes (or console access).

Step 1: Initialize the First Node

On the first node (node-01), run:

curl -sfL https://get.k3s.io | sh -s - server \
  --cluster-init \
  --tls-san <cluster-vip-or-fqdn>

Step 2: Join the Second and Third Nodes

Retrieve the node token from node-01:

cat /var/lib/rancher/k3s/server/node-token

On node-02 and node-03, run:

curl -sfL https://get.k3s.io | sh -s - server \
  --server https://<node-01-ip>:6443 \
  --token <node-token>

Step 3: Verify the Cluster

Check the status of the nodes:

kubectl get nodes
Ensure all 3 nodes show Ready and have the control-plane,master roles.

Step 4: Configuration Details

  • Storage: By default, K3s uses local storage. For HA, it is recommended to use Longhorn or NFS CSI.
  • Networking: MetalLB should be configured for LoadBalancer services.

Sources / References

Contribution Metadata

  • Last reviewed: 2026-04-24
  • Confidence: high