Installing Kubernetes on an Nvidia Jetson Cluster
We now have a beautiful cluster assembled and running, but no software running on it yet. So let's get started and provision Kubernetes on top of it so we can manage our nodes easier!
Introducing K3s
For our Kubernetes setup we want a lightweight Kubernetes installation seeing the required Edge computation. For this, we can utilize K3S which is a distribution built specifically to run on IoT & Edge devices.
Personally, the installation feels similar to how we installed and configured Docker Swarm before. Install it everywhere and join nodes to the master - quick and easy!
Installing K3s
Installing K3S is super trivial! There is however an easier way if you want to automate all of it, by utilizing the CLI and adding just 1 parameter.
Master Node Setup
To configure our Master Node, we execute the following command that will pass the secret we define:
curl -sfL https://get.k3s.io | sh -s server --cluster-init --token "XAVIER_HIS_SECRET_TOKEN" --write-kubeconfig-mode 644 --docker
💡 As you may have noticed, we are utilizing --write-kubeconfig-mode 644
to allow our cluster to be imported in rancher later.
💡 --docker
will enable us to use our host's Docker registry and use local images
Worker Node Setup
Finally, we can add our Worker (or Agent) nodes by running the following line on each of the nodes:
curl -sfL https://get.k3s.io | sh -s agent --server https://MASTER_NODE_IP_ADDRESS:6443 --token "XAVIER_HIS_SECRET_TOKEN"
Verification
When we now execute sudo k3s kubectl get nodes -w
on our master node, we will see our nodes appearing.
Installing and Configuring Kubectl
⚠ Execute this on your local machine! (WSL in this case)
Installing Kubectl
Since we now have a Kubernetes cluster running, it is time to configure it to run on our local system. For that I am utilizing the WSL
or Windows Subsystem for Linux
system as explained in a previous article.
To install WSL we execute the following:
# Download Kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# Install it
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Verify
kubectl version --client
Configuring Kubectl
Now this is installed, we can configure it towards our remote cluster:
# Copy over the Kubeconfig file to our local machine
scp xavier@xavier-nvidia-node-1.local:/etc/rancher/k3s/k3s.yaml nvidia-node-1-config.yaml
# Replace localhost with the location of the master node
sed -ie s/127.0.0.1/xavier-nvidia-node-1.local/g nvidia-node-1-config.yaml
# Verify that it works
kubectl --kubeconfig nvidia-node-1-config.yaml get pods -A
# Then copy it over to kubectl directory and activate it
# we can now run kubectl get pods -A
cp nvidia-node-1-config.yaml ~/.kube/config
Troubleshooting
Agent does not want to join
Sometimes an agent does not want to join, in that case try utilizing the IP address directly.
Removing K3S
⚠ In case something happened, you can uninstall K3S with the following commands:
# Uninstall Server Node
/usr/local/bin/k3s-uninstall.sh
# Uninstall Agent Node
/usr/local/bin/k3s-agent-uninstall.sh
Conclusion
We have now set-up our Nvidia Jetson nodes and are running a Kubernetes cluster on it! To keep this article light, I have decided to move the demonstration to a new article where you will learn to run Dapr as your distributed application runtime as well as Grafana to monitor your nodes