Before Kubernetes release 1.22, swap space must be disabled on host node in order to provide full disk resource for cluster and pods running on it.
With new release, swap space can remain on host node. For new deployments, this seems pretty straightforward but what if you have kubernetes cluster already deployed, running without swap memory and you want to restart using swap on host node. This may not be a common use case but certain architects may design compute servers to use swap memory as mandatory requirement.
In this blog, I will solve this same scenario on a kubernetes cluster running on v.1.23.3 without swap memory on host node.
ububuntu@ubmaster:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION ubmaster Ready control-plane,master 3d22h v1.23.3 ubworker Ready <none> 3d21h v1.23.3
Firstly, make sure you don’t have any running application pod on worker nodes since we will be resetting whole cluster. I uninstall one release of nginx before proceeding to drain worker node.
ubuntu@ubmaster:~$ helm uninstall my-release ubuntu@ubmaster:~$ kubectl drain ubworker --ignore-daemonsets node/ubworker cordoned
Proceed to reset of kubernetes cluster using kubeadm utility. Repeat this step for both Master and all Worker nodes.
root@ubmaster:/home/ubuntu# kubeadm reset
Repeat this step for both Master and all Worker nodes.
root@ubworker:/home/ubuntu# kubeadm reset
Add “–fail-swap-on=false” as extra argument in kubeadm conf file so this parameter is taken when we run kubeadm init and join on nodes.
root@ubmaster:/home/ubuntu# echo 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"' >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Additionally, we enabled swap memory by uncommenting swap disk in /etc/fstab file.
Restart daemon and kubelet services.
root@ubmaster:/home/ubuntu# systemctl daemon-reload root@ubmaster:/home/ubuntu# systemctl restart kubelet
Initialize kubernetes cluster specifying same pod-network cidr as existing.
ubuntu@ubmaster:~$ sudo kubeadm init --ignore-preflight-errors Swap --pod-network-cidr=xx.xx.xx.xx/24
Join worker node with kubeadm utility as we did in our last setup.
ubuntu@ubmaster:~$sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>