Added functionality and API for pod autoscaling based on container resources

Signed-off-by: Arjun Naik <anaik@redhat.com>
This commit is contained in:
Arjun Naik
2020-10-21 11:29:17 +02:00
parent 7509c4eb47
commit 0fec7b0f7e
54 changed files with 5526 additions and 806 deletions

View File

@@ -42,7 +42,7 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
for resourceName, quantity := range requirements.Limits {
fldPath := limPath.Key(string(resourceName))
// Validate resource name.
allErrs = append(allErrs, validateContainerResourceName(string(resourceName), fldPath)...)
allErrs = append(allErrs, ValidateContainerResourceName(string(resourceName), fldPath)...)
// Validate resource quantity.
allErrs = append(allErrs, ValidateResourceQuantityValue(string(resourceName), quantity, fldPath)...)
@@ -51,7 +51,7 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
for resourceName, quantity := range requirements.Requests {
fldPath := reqPath.Key(string(resourceName))
// Validate resource name.
allErrs = append(allErrs, validateContainerResourceName(string(resourceName), fldPath)...)
allErrs = append(allErrs, ValidateContainerResourceName(string(resourceName), fldPath)...)
// Validate resource quantity.
allErrs = append(allErrs, ValidateResourceQuantityValue(string(resourceName), quantity, fldPath)...)
@@ -70,7 +70,8 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
return allErrs
}
func validateContainerResourceName(value string, fldPath *field.Path) field.ErrorList {
// ValidateContainerResourceName checks the name of resource specified for a container
func ValidateContainerResourceName(value string, fldPath *field.Path) field.ErrorList {
allErrs := validateResourceName(value, fldPath)
if len(strings.Split(value, "/")) == 1 {
if !helper.IsStandardContainerResourceName(value) {

View File

@@ -129,6 +129,62 @@ func TestValidateResourceRequirements(t *testing.T) {
}
}
func TestValidateContainerResourceName(t *testing.T) {
successCase := []struct {
Name string
ResourceName string
}{
{
Name: "CPU resource",
ResourceName: "cpu",
},
{
Name: "Memory resource",
ResourceName: "memory",
},
{
Name: "Hugepages resource",
ResourceName: "hugepages-2Mi",
},
{
Name: "Namespaced resource",
ResourceName: "kubernetes.io/resource-foo",
},
{
Name: "Extended Resource",
ResourceName: "my.org/resource-bar",
},
}
for _, tc := range successCase {
if errs := ValidateContainerResourceName(tc.ResourceName, field.NewPath(tc.ResourceName)); len(errs) != 0 {
t.Errorf("%q unexpected error: %v", tc.Name, errs)
}
}
errorCase := []struct {
Name string
ResourceName string
}{
{
Name: "Invalid standard resource",
ResourceName: "cpu-core",
},
{
Name: "Invalid namespaced resource",
ResourceName: "kubernetes.io/",
},
{
Name: "Invalid extended resource",
ResourceName: "my.org-foo-resource",
},
}
for _, tc := range errorCase {
if errs := ValidateContainerResourceName(tc.ResourceName, field.NewPath(tc.ResourceName)); len(errs) == 0 {
t.Errorf("%q expected error", tc.Name)
}
}
}
func TestValidatePodLogOptions(t *testing.T) {
var (