Installing and configuring a K3s edge cluster
Introduction
This content provides a summary of how to install k3s (rancher), a lightweight and small Kubernetes cluster, on a recent Ubuntu LTS distribution. For more information, see the k3s documentation .
Pre-requisites
- Architecture must be either x86_64 (amd64) or arm64
- Operating system must be modern Linux variant with 64-bit and systemd support
Note: If installed, uninstall kubectl before completing the following steps.
Installing
-
Either login as root or elevate to root with
sudo -i
-
Confirm that the full hostname of your machine contains at least two dots:
hostname
If the full hostname of your machine contains fewer than two dots, change the hostname:
hostnamectl set-hostname <your-new-hostname-with-2-dots>
For more information, see github issue .
-
Install k3s:
curl -sfL https://get.k3s.io | sh -
- Create the image registry service:
-
Create the persistent volume claim:
kubectl apply -f https://raw.githubusercontent.com/open-horizon/open-horizon.github.io/master/docs/installing/k3s-persistent-claim.yaml
-
Verify that the persistent volume claim was created and is in โPendingโ status
kubectl get pvc
-
Create the registry deployment and service:
kubectl apply -f https://raw.githubusercontent.com/open-horizon/open-horizon.github.io/master/docs/installing/k3s-registry-deployment.yaml
-
Verify that the service was created:
kubectl get deployment kubectl get service
Which will issue a response similar to:
NAME READY UP-TO-DATE AVAILABLE AGE docker-registry 1/1 1 1 21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 3h46m docker-registry-service NodePort 10.43.46.175 <none> 5000:31466/TCP 67s
-
Define the registry endpoint:
export REGISTRY_ENDPOINT=$(kubectl get service docker-registry-service | grep docker-registry-service | awk '{print $3;}'):5000
To verify that it was set properly:
echo $REGISTRY_ENDPOINT
Which will respond with something similar to:
10.43.46.175:5000
-
Add it to K3s configuration:
cat << EOF >> /etc/rancher/k3s/registries.yaml mirrors: "$REGISTRY_ENDPOINT": endpoint: - "http://$REGISTRY_ENDPOINT" EOF
To verify that it wrote the file properly:
cat /etc/rancher/k3s/registries.yaml
Which will respond with something similar to:
mirrors: "10.43.46.175:5000": endpoint: - "http://10.43.46.175:5000"
-
Restart k3s to pick up the change to the K3s configuration:
systemctl restart k3s
-
-
Define this registry in Docker as an insecure registry:
-
Install Docker (if not already installed):
NOTE: If
docker --version
responds with a version number, then it is installed.curl -fsSL get.docker.com | sh
-
Create or add to /etc/docker/daemon.json (replacing
<registry-endpoint>
with the value of the$REGISTRY_ENDPOINT
environment variable you obtained in a previous step).{ "insecure-registries": [ "<registry-endpoint>" ] }
-
Restart Docker to pick up the change:
systemctl restart docker
-