This guide outlines the steps to join new worker nodes to your K3s cluster.
Before you start
Make sure that:
Task 2 (Verification) has been successfully completed and the control plane is healthy.
The node token from Task 2 is retrieved and ready for use.
You are logged out of the control-plane node (k3smain) and are the terminal window of your computer.
How to add worker nodes
The designated Driver will execute commands, observers should watch the shared screen and verify the output of each command before proceeding to the next step.
Step 1: SSH into the AGX node
ssh <username>@<agx node ip>
Step 2: Switch to the k3s user
sudo su - k3s
Step 3: Start the shared terminal session
screen -x group_session
Step 4: Test Direct Internet Access
Ping Google's public DNS server to confirm the device can reach an external IP address. A successful result will show 0% packet loss. This is shown in the expected response.
ping -c 4 8.8.8.8
Expected response:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=110 time=21.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=110 time=21.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=110 time=21.5 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=110 time=21.4 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 21.318/21.441/21.516/0.077 ms
Step 5: Test DNS Name Resolution
Ping a domain name to confirm that the Domain Name System (DNS) is working correctly. This is a critical test to ensure the server can find other computers on the internet by their name.
ping -c 4 google.com
Expected response:
PING google.com (<ip address>) 56(84) bytes of data.
64 bytes from dfw28s26-in-f14.1e100.net (<ip address>): icmp_seq=1 ttl=110 time=21.6 ms
64 bytes from dfw28s26-in-f14.1e100.net (<ip address>): icmp_seq=2 ttl=110 time=21.8 ms
64 bytes from dfw28s26-in-f14.1e100.net (<ip address>): icmp_seq=3 ttl=110 time=21.5 ms
64 bytes from dfw28s26-in-f14.1e100.net (<ip address>): icmp_seq=4 ttl=110 time=21.7 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 21.500/21.650/21.800/0.120 ms
Step 5: Test control plane connectivity
Ping the control-plane node’s IP address to verify it’s reachable and that network connectivity is intact.
ping -c 4 <control plane ip>
Expected response:
PING 10.20.1.150 (<control plane ip>) 56(84) bytes of data.
64 bytes from <control plane ip>: icmp_seq=1 ttl=62 time=46.5 ms
64 bytes from <control plane ip>: icmp_seq=2 ttl=62 time=46.8 ms
64 bytes from <control plane ip>: icmp_seq=3 ttl=62 time=46.9 ms
64 bytes from <control plane ip>: icmp_seq=4 ttl=62 time=46.8 ms
--- <control plane ip> ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 46.500/46.772/46.936/0.163 ms
Step 6: Test Kubernetes port connectivity
Telnet to the control-plane node’s IP address on port 6443 to verify it’s reachable and that network connectivity is intact.
telnet <control plane ip> 6443
Expected response:
Trying <control plane ip>...
Connected to <control plane ip>.
Escape character is '^]'.
To exit Telnet:
telnet 10.20.1.150 6443
Trying 10.20.1.150...
Connected to 10.20.1.150.
Escape character is '^]'.
^] <-- You press Ctrl + ] here
telnet> quit <-- You type quit and press Enter
Connection closed.
[INFO] Using v1.30.6+k3s1 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.30.6+k3s1/sha256sum-arm64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.30.6+k3s1/k3s-arm64
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Skipping installation of SELinux RPM
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
Accomplishments
Connectivity Verified: A comprehensive set of checks was performed on the worker node to confirm its network health. This included verifying direct internet access, DNS resolution, and, most importantly, connectivity to the control plane's IP address and the specific Kubernetes API port (6443).
K3s Agent Installed: Using the credentials from the previous task, the K3s agent software (version v1.30.6+k3s1) was downloaded and installed on the worker node.
Service Started: The installation script created and enabled a systemd service for the k3s-agent, which is now running and actively communicating with the control plane.
With all these steps, the installation is completed.
Reflection
Please take a moment to write down any questions, issues, or doubts you encountered during this milestone. This will help guide the subsequent discussion and ensure everyone is on the same page before moving forward.
Next Steps
Remain in the screen session of the same node.
Rejoin the common Discord lobby to await further instructions or support your peers.