Cluster Node Management
QuickStack runs on a k3s Kubernetes cluster that can be expanded by adding worker nodes. This guide covers how to add nodes to your cluster, monitor node health, and manage node scheduling.
Overview
A QuickStack cluster consists of:
- Master Node: The initial server where QuickStack is installed. Runs the control plane and can also run workloads.
- Worker Nodes: Additional servers that join the cluster to provide more compute capacity.
Viewing Cluster Nodes
- Navigate to QuickStack Settings.
- Click on the Cluster tab.
- View all nodes and their status.
Node Information
For each node, you can see:
- Node Name: The hostname or identifier of the node
- Status Indicators:
- 🟢 CPU: Green if CPU pressure is normal
- 🟢 RAM: Green if memory pressure is normal
- 🟢 Disk: Green if disk pressure is normal
- Schedulable: Whether new workloads can be scheduled on this node
Adding a Worker Node
Prerequisites
Before adding a worker node, ensure:
- The new server is running a supported Linux distribution (Ubuntu, Debian, etc.)
- The server has network connectivity to the master node
- Port 6443 (Kubernetes API) is accessible from the new server
- You have SSH access to the new server
Step 1: Get the Join Command
- Navigate to QuickStack Settings → Cluster.
- Click the Add Cluster Node button.
- Copy the displayed command.
The command looks like this:
curl -sfL https://get.quickstack.dev/setup-worker.sh | K3S_URL=https://MASTER_IP:6443 JOIN_TOKEN=K10... sh -
Step 2: Configure the Command
Replace MASTER_IP with:
- The internal IP of your master node (for nodes in the same network)
- The public IP of your master node (for nodes across the internet)
Step 3: Run on the New Server
- SSH into your new server.
- Run the modified command as root or with sudo.
- Wait for the installation to complete.
ssh root@new-worker-server
curl -sfL https://get.quickstack.dev/setup-worker.sh | K3S_URL=https://192.168.1.100:6443 JOIN_TOKEN=K10... sh -
Step 4: Verify the Node
- Return to QuickStack Settings → Cluster.
- The new node should appear in the list within a few minutes.
- Verify all status indicators are green.
If the join token shown in the dialog is empty or invalid, you can retrieve it manually from your master node:
sudo cat /var/lib/rancher/k3s/server/node-token
Managing Node Scheduling
You can control whether workloads are scheduled on specific nodes.
Deactivating a Node
To prevent new workloads from being scheduled on a node (cordon):
- Find the node in the cluster overview.
- Click the node to view options.
- Click Deactivate Node or similar option.
- Confirm the action.
When deactivated:
- Existing workloads continue running
- No new pods will be scheduled on this node
- The node shows Schedulable: No
Reactivating a Node
To allow scheduling on a previously deactivated node (uncordon):
- Find the deactivated node.
- Click the node to view options.
- Click Activate Node.
- Confirm the action.
Deactivating a node does not automatically move existing workloads. To move workloads off a node, you need to:
- Deactivate the node (cordon)
- Drain the node or redeploy applications
Node Health Monitoring
Understanding Status Indicators
| Indicator | Green | Red |
|---|---|---|
| CPU | Normal CPU pressure | High CPU pressure / PID exhaustion |
| RAM | Normal memory pressure | Memory pressure detected |
| Disk | Sufficient disk space | Disk pressure detected |
Troubleshooting Node Issues
Red CPU Indicator:
- Too many processes running
- Consider adding more nodes or optimizing workloads
Red RAM Indicator:
- Memory pressure detected
- Review container memory limits
- Consider adding more memory or nodes
Red Disk Indicator:
- Disk space running low
- Clean up unused images and containers (see Maintenance docs)
- Consider expanding disk or adding nodes
Removing a Worker Node
To remove a worker node from the cluster:
Step 1: Drain the Node
First, move all workloads off the node:
# On the master node
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
Step 2: Delete the Node
# On the master node
kubectl delete node <node-name>
Step 3: Uninstall k3s (on the worker)
# On the worker node
/usr/local/bin/k3s-agent-uninstall.sh
Best Practices
- Odd number of master nodes: For high availability, use 1, 3, or 5 master nodes
- Consistent hardware: Similar node specifications make resource planning easier
- Network proximity: Nodes in the same datacenter/region reduce latency
- Resource headroom: Keep 20-30% capacity free for failover scenarios
- Storage: Use distributed storage (Longhorn) for volumes across nodes
- Networking: Ensure all nodes can communicate on required ports
- Firewalls: Configure firewall rules for k3s communication