I set up a few Kubernetes clusters preparing for the CKA exam and discovered that upon reboot, my control plane node didn’t work. Running any kubectl command I get:
The connection to the server 192.168.1.57:6443 was refused - did you specify the right host or port?
This is a common error message that can result from numerous issues but I started troubleshooting by seeing if the kubelet process was running with
ps aux | grep kube. Nothing…no kubelet service running. Then I looked at /var/log/syslog and I found the problem — swap was back on!
Oct 15 06:23:13 master-02 kubelet: F1015 06:23:13.446790 4657 server.go:265] failed to run Kubelet: running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false. /proc/swaps contained: [Filename#011#011#011#011Type#011#011Size#011Used#011Priority /dev/dm-1 partition#0112097148#0110#011-2]
It turns out even though I turned the swap off with
swapoff -a, that’s only a temporary solution for disabling the swap. Upon reboot, it will be enabled due to it being referenced in /etc/fstab:
/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
To disable permanently, you can run the following command:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
This command will insert a comment on the line referencing swap in /etc/fstab but will not take effect immediately so a reboot will be necessary. If you want to avoid a reboot, you can also run
sudo swapoff -a again and wait for the kubelet process to retry again or force the service to restart with
sudo systemctl restart kubelet.
The topic of Kubernetes not supporting linux memory management techniques like paging to disk has puzzled many people and there’s a good discussion about it in a GitHub issue that was raised: Kubelet/Kubernetes should work with Swap Enabled. Suffice to say, swap support isn’t changing anytime soon.