mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-14 21:53:52 +00:00
Merge pull request #38124 from kubernetes/Dec/gluster
Automatic merge from submit-queue Fix GCI mounter issue
This commit is contained in:
@@ -31,7 +31,7 @@ function gc {
|
|||||||
# Rkt pods end up creating new copies of mounts on the host. Hence it is ideal to clean them up right away.
|
# Rkt pods end up creating new copies of mounts on the host. Hence it is ideal to clean them up right away.
|
||||||
attempt=0
|
attempt=0
|
||||||
until [ $attempt -ge 5 ]; do
|
until [ $attempt -ge 5 ]; do
|
||||||
${RKT_BINARY} gc --grace-period=0s &> /dev/null && break
|
${RKT_BINARY} gc --grace-period=0s &> /dev/null
|
||||||
attempt=$[$attempt+1]
|
attempt=$[$attempt+1]
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
@@ -130,13 +130,21 @@ func GetMountRefs(mounter Interface, mountPath string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: this is a workaround for the unmount device issue caused by gci mounter.
|
||||||
|
// In GCI cluster, if gci mounter is used for mounting, the container started by mounter
|
||||||
|
// script will cause additional mounts created in the container. Since these mounts are
|
||||||
|
// irrelavant to the original mounts, they should be not considered when checking the
|
||||||
|
// mount references. Current solution is to filter out those mount paths that contain
|
||||||
|
// the string of original mount path.
|
||||||
|
// Plan to work on better approach to solve this issue.
|
||||||
|
|
||||||
// Find all references to the device.
|
// Find all references to the device.
|
||||||
var refs []string
|
var refs []string
|
||||||
if deviceName == "" {
|
if deviceName == "" {
|
||||||
glog.Warningf("could not determine device for path: %q", mountPath)
|
glog.Warningf("could not determine device for path: %q", mountPath)
|
||||||
} else {
|
} else {
|
||||||
for i := range mps {
|
for i := range mps {
|
||||||
if mps[i].Device == deviceName && mps[i].Path != slTarget {
|
if mps[i].Device == deviceName && !strings.Contains(mps[i].Path, slTarget) {
|
||||||
refs = append(refs, mps[i].Path)
|
refs = append(refs, mps[i].Path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -98,7 +98,7 @@ func TestGetMountRefs(t *testing.T) {
|
|||||||
{Device: "/dev/sdb", Path: "/var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/gce-pd"},
|
{Device: "/dev/sdb", Path: "/var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/gce-pd"},
|
||||||
{Device: "/dev/sdb", Path: "/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd-in-pod"},
|
{Device: "/dev/sdb", Path: "/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd-in-pod"},
|
||||||
{Device: "/dev/sdc", Path: "/var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/gce-pd2"},
|
{Device: "/dev/sdc", Path: "/var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/gce-pd2"},
|
||||||
{Device: "/dev/sdc", Path: "/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod"},
|
{Device: "/dev/sdc", Path: "/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod1"},
|
||||||
{Device: "/dev/sdc", Path: "/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod2"},
|
{Device: "/dev/sdc", Path: "/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod2"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ func TestGetMountRefs(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod",
|
"/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod1",
|
||||||
[]string{
|
[]string{
|
||||||
"/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod2",
|
"/var/lib/kubelet/pods/some-pod/volumes/kubernetes.io~gce-pd/gce-pd2-in-pod2",
|
||||||
"/var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/gce-pd2",
|
"/var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/gce-pd2",
|
||||||
|
@@ -94,7 +94,7 @@ func UnmountPath(mountPath string, mounter mount.Interface) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if notMnt {
|
if notMnt {
|
||||||
glog.V(4).Info("%q is unmounted, deleting the directory", mountPath)
|
glog.V(4).Infof("%q is unmounted, deleting the directory", mountPath)
|
||||||
return os.Remove(mountPath)
|
return os.Remove(mountPath)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Reference in New Issue
Block a user