c2sr bootcamp docs Help

Task 3: Adding worker nodes

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.

Step 7: Install K3s on the worker node

curl -sfL https://get.k3s.io | \ INSTALL_K3S_VERSION="v1.30.6+k3s1" \ K3S_URL="https://<control plane ip>:6443" \ K3S_TOKEN="<node token from previous step>" \ K3S_NODE_NAME="<node name>" \ INSTALL_K3S_EXEC=" --node-ip=<worker node ip> \ --docker" sh -

Expected Output:

[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.

Last modified: 23 June 2025