From 45fb31ec073c311eefbac9f5ed6f5e41bff83201 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Wed, 23 May 2018 12:47:42 -0400 Subject: [PATCH] Implement API changes needed for dynamic volume limits define alpha feature and make api changes --- pkg/apis/core/types.go | 2 ++ pkg/apis/core/v1/helper/helpers.go | 6 +++++- pkg/apis/core/validation/validation_test.go | 13 +++++++++++++ pkg/features/kube_features.go | 8 ++++++++ staging/src/k8s.io/api/core/v1/types.go | 2 ++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go index 0dc0a4e8a2b..51c34d1030b 100644 --- a/pkg/apis/core/types.go +++ b/pkg/apis/core/types.go @@ -3590,6 +3590,8 @@ const ( ResourceDefaultNamespacePrefix = "kubernetes.io/" // Name prefix for huge page resources (alpha). ResourceHugePagesPrefix = "hugepages-" + // Name prefix for storage resource limits + ResourceAttachableVolumesPrefix = "attachable-volumes-" ) // ResourceList is a set of (resource name, quantity) pairs. diff --git a/pkg/apis/core/v1/helper/helpers.go b/pkg/apis/core/v1/helper/helpers.go index c7e2c2d0c7a..667ff54a20f 100644 --- a/pkg/apis/core/v1/helper/helpers.go +++ b/pkg/apis/core/v1/helper/helpers.go @@ -92,10 +92,14 @@ func IsOvercommitAllowed(name v1.ResourceName) bool { !IsHugePageResourceName(name) } +func IsAttachableVolumeResourceName(name v1.ResourceName) bool { + return strings.HasPrefix(string(name), v1.ResourceAttachableVolumesPrefix) +} + // Extended and Hugepages resources func IsScalarResourceName(name v1.ResourceName) bool { return IsExtendedResourceName(name) || IsHugePageResourceName(name) || - IsPrefixedNativeResource(name) + IsPrefixedNativeResource(name) || IsAttachableVolumeResourceName(name) } // this function aims to check if the service's ClusterIP is set or not diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index 416f4cd4890..c2a0bf65486 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -5549,6 +5549,19 @@ func TestValidateContainers(t *testing.T) { TerminationMessagePolicy: "File", }, }, + "Invalid storage limit request": { + { + Name: "abc-123", + Image: "image", + Resources: core.ResourceRequirements{ + Limits: core.ResourceList{ + core.ResourceName("attachable-volumes-aws-ebs"): *resource.NewQuantity(10, resource.DecimalSI), + }, + }, + ImagePullPolicy: "IfNotPresent", + TerminationMessagePolicy: "File", + }, + }, "Request limit multiple invalid": { { Name: "abc-123", diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index c152b9caa97..84034c1c23d 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -284,6 +284,13 @@ const ( // Do not remove this feature gate even though it's GA VolumeSubpath utilfeature.Feature = "VolumeSubpath" + // owner: @gnufied + // alpha : v1.11 + // + // Add support for volume plugins to report node specific + // volume limits + AttachVolumeLimit utilfeature.Feature = "AttachVolumeLimit" + // owner: @ravig // alpha: v1.11 // @@ -341,6 +348,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS QOSReserved: {Default: false, PreRelease: utilfeature.Alpha}, ExpandPersistentVolumes: {Default: true, PreRelease: utilfeature.Beta}, ExpandInUsePersistentVolumes: {Default: false, PreRelease: utilfeature.Alpha}, + AttachVolumeLimit: {Default: false, PreRelease: utilfeature.Alpha}, CPUManager: {Default: true, PreRelease: utilfeature.Beta}, ServiceNodeExclusion: {Default: false, PreRelease: utilfeature.Alpha}, MountContainers: {Default: false, PreRelease: utilfeature.Alpha}, diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index 11985464334..2f98c481520 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -4028,6 +4028,8 @@ const ( ResourceDefaultNamespacePrefix = "kubernetes.io/" // Name prefix for huge page resources (alpha). ResourceHugePagesPrefix = "hugepages-" + // Name prefix for storage resource limits + ResourceAttachableVolumesPrefix = "attachable-volumes-" ) // ResourceList is a set of (resource name, quantity) pairs.