Add support to size memory backed volumes

This commit is contained in:
Derek Carr
2020-09-02 14:29:05 -04:00
parent 512b7b75a8
commit 7eb37a7497
6 changed files with 253 additions and 7 deletions

View File

@@ -25,7 +25,7 @@ import (
"path/filepath"
"testing"
"k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
@@ -918,3 +918,109 @@ func TestGetPageSize(t *testing.T) {
})
}
}
func TestCalculateEmptyDirMemorySize(t *testing.T) {
testCases := map[string]struct {
pod *v1.Pod
nodeAllocatableMemory resource.Quantity
emptyDirSizeLimit resource.Quantity
expectedResult resource.Quantity
featureGateEnabled bool
}{
"SizeMemoryBackedVolumesDisabled": {
pod: &v1.Pod{
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceName("memory"): resource.MustParse("10Gi"),
},
},
},
},
},
},
nodeAllocatableMemory: resource.MustParse("16Gi"),
emptyDirSizeLimit: resource.MustParse("1Gi"),
expectedResult: resource.MustParse("0"),
featureGateEnabled: false,
},
"EmptyDirLocalLimit": {
pod: &v1.Pod{
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceName("memory"): resource.MustParse("10Gi"),
},
},
},
},
},
},
nodeAllocatableMemory: resource.MustParse("16Gi"),
emptyDirSizeLimit: resource.MustParse("1Gi"),
expectedResult: resource.MustParse("1Gi"),
featureGateEnabled: true,
},
"PodLocalLimit": {
pod: &v1.Pod{
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceName("memory"): resource.MustParse("10Gi"),
},
},
},
},
},
},
nodeAllocatableMemory: resource.MustParse("16Gi"),
emptyDirSizeLimit: resource.MustParse("0"),
expectedResult: resource.MustParse("10Gi"),
featureGateEnabled: true,
},
"NodeAllocatableLimit": {
pod: &v1.Pod{
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceName("memory"): resource.MustParse("10Gi"),
},
},
},
},
},
},
nodeAllocatableMemory: resource.MustParse("16Gi"),
emptyDirSizeLimit: resource.MustParse("0"),
expectedResult: resource.MustParse("16Gi"),
featureGateEnabled: true,
},
}
for testCaseName, testCase := range testCases {
t.Run(testCaseName, func(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SizeMemoryBackedVolumes, testCase.featureGateEnabled)()
spec := &volume.Spec{
Volume: &v1.Volume{
VolumeSource: v1.VolumeSource{
EmptyDir: &v1.EmptyDirVolumeSource{
Medium: v1.StorageMediumMemory,
SizeLimit: &testCase.emptyDirSizeLimit,
},
},
}}
result := calculateEmptyDirMemorySize(&testCase.nodeAllocatableMemory, spec, testCase.pod)
if result.Cmp(testCase.expectedResult) != 0 {
t.Errorf("%s: Unexpected result. Expected %v, got %v", testCaseName, testCase.expectedResult.String(), result.String())
}
})
}
}