diff --git a/test/e2e_node/disk_eviction_test.go b/test/e2e_node/disk_eviction_test.go index 2415dd158e8..b8fc9ee9307 100644 --- a/test/e2e_node/disk_eviction_test.go +++ b/test/e2e_node/disk_eviction_test.go @@ -110,6 +110,12 @@ var _ = framework.KubeDescribe("Kubelet Eviction Manager [Serial] [Disruptive]", nodeDiskPressureCondition := false podRescheduleable := false Eventually(func() error { + // Avoid the test using up all the disk space + err := checkDiskUsage(0.05) + if err != nil { + return err + } + // The pod should be evicted. if !evictionOccurred { podData, err := podClient.Get(busyPodName) @@ -227,3 +233,29 @@ func isImageSupported() bool { // instead of skipping images the eviction thresholds should be adjusted based on the images. return strings.Contains(framework.TestContext.NodeName, "-gci-dev-") } + +// checkDiskUsage verifies that the available bytes on disk are above the limit. +func checkDiskUsage(limit float64) error { + summary, err := getNodeSummary() + if err != nil { + return err + } + + if nodeFs := summary.Node.Fs; nodeFs != nil { + if nodeFs.AvailableBytes != nil && nodeFs.CapacityBytes != nil { + if float64(*nodeFs.CapacityBytes)*limit > float64(*nodeFs.AvailableBytes) { + return fmt.Errorf("available nodefs byte is less than %v%%", limit*float64(100)) + } + } + } + + if summary.Node.Runtime != nil { + if imageFs := summary.Node.Runtime.ImageFs; imageFs != nil { + if float64(*imageFs.CapacityBytes)*limit > float64(*imageFs.AvailableBytes) { + return fmt.Errorf("available imagefs byte is less than %v%%", limit*float64(100)) + } + } + } + + return nil +}