From 48a961cfa2f604a3d83bf8bc1a2e04c43644bd64 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Mon, 3 Dec 2018 18:37:46 +0200 Subject: [PATCH] kubeadm: properly umount dirs in /var/lib/kubelet 'kubeadm reset' uses incorrect way of unmounting /var/lib/kubelet directories. It queries /proc/mounts for /var/lib/kubelet mount point. If /var/lib/kubelet directory is also mounted it makes 'kubelet reset' to unmount it too, which is incorrect. It also makes it fail as it can't unmount /var/lib/kubelet before unmounting mounts inside it. Fixed by querying /var/lib/kubelet/ instead of /var/lib/kubelet. This should exclude /var/lib/kubelet from the query results even if it's mounted. Fixes: kubernetes/kubeadm#1294 --- cmd/kubeadm/app/cmd/reset.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/cmd/reset.go b/cmd/kubeadm/app/cmd/reset.go index 4f2261f54c..f181011ead 100644 --- a/cmd/kubeadm/app/cmd/reset.go +++ b/cmd/kubeadm/app/cmd/reset.go @@ -156,7 +156,7 @@ func (r *Reset) Run(out io.Writer, client clientset.Interface) error { // Try to unmount mounted directories under kubeadmconstants.KubeletRunDirectory in order to be able to remove the kubeadmconstants.KubeletRunDirectory directory later fmt.Printf("[reset] unmounting mounted directories in %q\n", kubeadmconstants.KubeletRunDirectory) - umountDirsCmd := fmt.Sprintf("awk '$2 ~ path {print $2}' path=%s /proc/mounts | xargs -r umount", kubeadmconstants.KubeletRunDirectory) + umountDirsCmd := fmt.Sprintf("awk '$2 ~ path {print $2}' path=%s/ /proc/mounts | xargs -r umount", kubeadmconstants.KubeletRunDirectory) klog.V(1).Infof("[reset] executing command %q", umountDirsCmd) umountOutputBytes, err := exec.Command("sh", "-c", umountDirsCmd).Output()