Change:
// NOTE: Adding suffix 'i' as result should be comparable with a medium size. // pagesize mount option is specified without a suffix, // e.g. pagesize=2M or pagesize=1024M for x86 CPUs <del> pageSize, err := resource.ParseQuantity(strings.TrimPrefix(opt, prefix) + "i") </del> <ins> trimmedOpt := strings.TrimPrefix(opt, prefix) if !strings.HasSuffix(trimmedOpt, "i") { trimmedOpt = trimmedOpt + "i" } pageSize, err := resource.ParseQuantity(trimmedOpt) </ins> if err != nil { return nil, fmt.Errorf("error getting page size from '%s' mount option: %v", opt, err) }

Discussion:
What happened: Pods get stuck in terminating state, as kubelet failed to unmount volume: nodev on /var/lib/kubelet/pods/-120c-45c4-aeac- type hugetlbfs (rw,relatime,pagesize=2Mi) What you expected to happen: Pod to get deleted and volumes to be cleaned up. How to reproduce it (as minimally and precisely as possible): kvm based virtual machines on ubuntu 16.04. create a pod with hugepage volumes () Delete the pod. Anything else we need to know?: Changes are related to mentioned commit id: In this file : , line no 72 : pageSize, err := resource.ParseQuantity(strings.TrimPrefix(opt, prefix) + "i") The mount already has a pagesize 2Mi in my case as shown here : (rw,relatime,pagesize=2Mi) But the code here suffix/appends "i" assuming pagesize can be only of type 2M or 1024M resulting in failure to clean up this volume. Documentation from code: / NOTE: Adding suffix 'i' as result should be comparable with a medium size. // pagesize mount option is specified without a suffix, // e.g. pagesize=2M or pagesize=1024M for x86 CPUs pageSize, err := resource.ParseQuantity(strings.TrimPrefix(opt, prefix) + "i") if err != nil { return nil, fmt.Errorf("error getting page size from '%s' mount option: %v", opt, err) } when the pod is deployed, kubelet creates the mount and we can see from logs that it already has pagesize=2Mi for my environment.

Environment: Kubernetes version: kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"", GitTreeState:"clean", BuildDate:"2020-04-16T11:48:36Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"} Cloud provider or hardware configuration: Kvm hypervisor based virual machine setupOS (e.g: ): NAME="Ubuntu" VERSION="16.04.6 LTS (Xenial Xerus)" ID=ubuntu IDLIKE=debian PRETTYNAME="Ubuntu 16.04.6 LTS" VERSIONID="16.04" HOMEURL="" SUPPORTURL="" BUGREPORTURL="" VERSIONCODENAME=xenial UBUNTUCODENAME=xenial Kernel (e.g. ): Linux master 4.4.0-169-generic -Ubuntu SMP Tue Nov 12 10:38:00 UTC 2019 x8664 x8664 x8664 GNU/LinuxInstall tools: Network plugin and version (if this is a network-related bug): Others:
/assign bart0sh
/sig storage
What about this change ?
The change looks good to me. Would you be willing to submit a PR?
& : Thanks for the quick turnaround.
We are seeing this issue in 1.18.6 version, can you please push the fix to this branch as well.
Could we know when the problem was introduced? As I suppose we don't have the same issue with K8S 1.17.x release?
Hi same issue found in 1.18.2
It is not yet ported into v1.18.6 as well.
Can you submit your PR for release-1.18 branch?