I wanted to try out Standalone Kubelet Tutorial of Kelsey Hightower by myself but I could not follow it as it is, because it was firstly on GCE and secondly it uses CoreOS, but since I am very familiar to Fedora I thought of following that tutorial on it. To get a quick setup of a fresh Fedora machine use Vagrant. I have used Vagrantfile available here.

This blog is only replacement of section Install the Standalone Kubelet in tutorial.

Installing packages

Since the tutorial uses CoreOS VM it already has a Kubelet binary available, on Fedora you can get one using dnf. In tutorial Kelsey has put in his custom systemd service file, we will also make some changes to the default kubelet’s service file packaged in Fedora.

sudo dnf -y install kubernetes-node
sudo systemctl enable docker --now
sudo systemctl enable kubelet --now

Since docker is a dependency of kubelet it is also installed, all we need to do is start Docker manually alongwith Kubelet.

Verify if kubelet and docker are running

sudo systemctl status docker kubelet

Editing kubelet systemd service file

Apply following changes to /etc/kubernetes/config

diff --git a/config b/config
index 8c0a284..cfccbee 100644
--- a/config
+++ b/config
@@ -16,7 +16,7 @@ KUBE_LOGTOSTDERR="--logtostderr=true"
 KUBE_LOG_LEVEL="--v=0"
 
 # Should this cluster be allowed to run privileged docker containers
-KUBE_ALLOW_PRIV="--allow-privileged=false"
+KUBE_ALLOW_PRIV="--allow-privileged=true"
 
 # How the controller-manager, scheduler, and proxy find the apiserver
 KUBE_MASTER="--master=http://127.0.0.1:8080"

By default in Fedora the Kubelet service won’t be running privileged pods. Setting flag --allow-privileged to true will allow you to do that. In Kelsey’s tutorial you can find it here.

Apply following changes to /etc/kubernetes/kubelet

diff --git a/kubelet b/kubelet
index cfd5686..07c11ab 100644
--- a/kubelet
+++ b/kubelet
@@ -14,4 +14,4 @@ KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
 KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
 
 # Add your own!
-KUBELET_ARGS="--cgroup-driver=systemd"
+KUBELET_ARGS="--cgroup-driver=systemd --pod-manifest-path=/etc/kubernetes/manifests"

To Kubelet we have added one more flag called --pod-manifest-path which is explained in docs as:

Path to the directory containing pod manifest files to run, or the path to a single pod manifest file.

Above line can be found in tutorial in here.

Make directory for pod manifests

sudo mkdir /etc/kubernetes/manifests

Restart kubelet service

sudo systemctl restart kubelet

Now you can follow the rest of the tutorial as it is from section Static Pods.

References: