mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
Merge pull request #8161 from rjnagal/rc
Use non-root available space to trigger out-of-disk events.
This commit is contained in:
commit
67d576cf48
@ -48,6 +48,7 @@ type DiskSpacePolicy struct {
|
|||||||
type fsInfo struct {
|
type fsInfo struct {
|
||||||
Usage int64
|
Usage int64
|
||||||
Capacity int64
|
Capacity int64
|
||||||
|
Available int64
|
||||||
Timestamp time.Time
|
Timestamp time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +78,7 @@ func (dm *realDiskSpaceManager) getFsInfo(fsType string, f func() (cadvisorApi.F
|
|||||||
fsi.Timestamp = time.Now()
|
fsi.Timestamp = time.Now()
|
||||||
fsi.Usage = int64(fs.Usage)
|
fsi.Usage = int64(fs.Usage)
|
||||||
fsi.Capacity = int64(fs.Capacity)
|
fsi.Capacity = int64(fs.Capacity)
|
||||||
|
fsi.Available = int64(fs.Available)
|
||||||
dm.cachedInfo[fsType] = fsi
|
dm.cachedInfo[fsType] = fsi
|
||||||
}
|
}
|
||||||
return fsi, nil
|
return fsi, nil
|
||||||
@ -99,17 +101,16 @@ func (dm *realDiskSpaceManager) isSpaceAvailable(fsType string, threshold int, f
|
|||||||
return true, fmt.Errorf("failed to get fs info for %q: %v", fsType, err)
|
return true, fmt.Errorf("failed to get fs info for %q: %v", fsType, err)
|
||||||
}
|
}
|
||||||
if fsInfo.Capacity == 0 {
|
if fsInfo.Capacity == 0 {
|
||||||
return true, fmt.Errorf("could not determine capacity for %q fs.", fsType)
|
return true, fmt.Errorf("could not determine capacity for %q fs. Info: %+v", fsType, fsInfo)
|
||||||
}
|
}
|
||||||
free := fsInfo.Capacity - fsInfo.Usage
|
if fsInfo.Available < 0 {
|
||||||
if free < 0 {
|
return true, fmt.Errorf("wrong available space for %q: %+v", fsType, fsInfo)
|
||||||
return true, fmt.Errorf("wrong fs usage for %q: capacity %d, usage %d", fsType, fsInfo.Capacity, fsInfo.Usage)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const mb = int64(1024 * 1024)
|
const mb = int64(1024 * 1024)
|
||||||
|
|
||||||
if free < int64(threshold)*mb {
|
if fsInfo.Available < int64(threshold)*mb {
|
||||||
glog.Infof("Running out of space on disk for %q: free %d MB, threshold %d MB", fsType, free/mb, threshold)
|
glog.Infof("Running out of space on disk for %q: available %d MB, threshold %d MB", fsType, fsInfo.Available/mb, threshold)
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
return true, nil
|
return true, nil
|
||||||
|
@ -81,15 +81,17 @@ func testRootFsAvailable(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
const mb = 1024 * 1024
|
const mb = 1024 * 1024
|
||||||
// 500MB free
|
// 500MB available
|
||||||
mockCadvisor.On("DockerImagesFsInfo").Return(cadvisorApi.FsInfo{
|
mockCadvisor.On("DockerImagesFsInfo").Return(cadvisorApi.FsInfo{
|
||||||
Usage: 9500 * mb,
|
Usage: 9500 * mb,
|
||||||
Capacity: 10000 * mb,
|
Capacity: 10000 * mb,
|
||||||
|
Available: 500 * mb,
|
||||||
}, nil)
|
}, nil)
|
||||||
// 10MB free
|
// 10MB available
|
||||||
mockCadvisor.On("RootFsInfo").Return(cadvisorApi.FsInfo{
|
mockCadvisor.On("RootFsInfo").Return(cadvisorApi.FsInfo{
|
||||||
Usage: 990 * mb,
|
Usage: 990 * mb,
|
||||||
Capacity: 1000 * mb,
|
Capacity: 1000 * mb,
|
||||||
|
Available: 10 * mb,
|
||||||
}, nil)
|
}, nil)
|
||||||
ok, err := dm.IsDockerDiskSpaceAvailable()
|
ok, err := dm.IsDockerDiskSpaceAvailable()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -124,12 +126,14 @@ func testCache(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
const mb = 1024 * 1024
|
const mb = 1024 * 1024
|
||||||
mockCadvisor.On("DockerImagesFsInfo").Return(cadvisorApi.FsInfo{
|
mockCadvisor.On("DockerImagesFsInfo").Return(cadvisorApi.FsInfo{
|
||||||
Usage: 400 * mb,
|
Usage: 400 * mb,
|
||||||
Capacity: 1000 * mb,
|
Capacity: 1000 * mb,
|
||||||
|
Available: 300 * mb,
|
||||||
}, nil).Once()
|
}, nil).Once()
|
||||||
mockCadvisor.On("RootFsInfo").Return(cadvisorApi.FsInfo{
|
mockCadvisor.On("RootFsInfo").Return(cadvisorApi.FsInfo{
|
||||||
Usage: 9 * mb,
|
Usage: 9 * mb,
|
||||||
Capacity: 10 * mb,
|
Capacity: 10 * mb,
|
||||||
|
Available: 500,
|
||||||
}, nil).Once()
|
}, nil).Once()
|
||||||
ok, err := dm.IsDockerDiskSpaceAvailable()
|
ok, err := dm.IsDockerDiskSpaceAvailable()
|
||||||
ok, err = dm.IsRootDiskSpaceAvailable()
|
ok, err = dm.IsRootDiskSpaceAvailable()
|
||||||
|
Loading…
Reference in New Issue
Block a user