Skip to content

Commit 87dda33

Browse files
Delete in-tree support for NVIDIA GPUs.
This removes the alpha Accelerators feature gate which was deprecated in 1.10. The alternative feature DevicePlugins went beta in 1.10.
1 parent 1f69c34 commit 87dda33

38 files changed

+42
-1315
lines changed

hack/.golint_failures

-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ pkg/kubelet/dockershim/cm
173173
pkg/kubelet/dockershim/libdocker
174174
pkg/kubelet/dockershim/testing
175175
pkg/kubelet/events
176-
pkg/kubelet/gpu
177176
pkg/kubelet/images
178177
pkg/kubelet/kuberuntime
179178
pkg/kubelet/leaky

pkg/apis/core/helper/helpers.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,11 @@ func IsNativeResource(name core.ResourceName) bool {
172172
strings.Contains(string(name), core.ResourceDefaultNamespacePrefix)
173173
}
174174

175-
var overcommitBlacklist = sets.NewString(string(core.ResourceNvidiaGPU))
176-
177175
// IsOvercommitAllowed returns true if the resource is in the default
178-
// namespace and not blacklisted.
176+
// namespace and is not hugepages.
179177
func IsOvercommitAllowed(name core.ResourceName) bool {
180178
return IsNativeResource(name) &&
181-
!IsHugePageResourceName(name) &&
182-
!overcommitBlacklist.Has(string(name))
179+
!IsHugePageResourceName(name)
183180
}
184181

185182
var standardLimitRangeTypes = sets.NewString(

pkg/apis/core/helper/helpers_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,6 @@ func TestIsOvercommitAllowed(t *testing.T) {
387387
name: core.ResourceMemory,
388388
allowed: true,
389389
},
390-
{
391-
name: core.ResourceNvidiaGPU,
392-
allowed: false,
393-
},
394390
{
395391
name: HugePageResourceName(resource.MustParse("2Mi")),
396392
allowed: false,

pkg/apis/core/resource.go

-7
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,6 @@ func (self *ResourceList) Pods() *resource.Quantity {
4747
return &resource.Quantity{}
4848
}
4949

50-
func (self *ResourceList) NvidiaGPU() *resource.Quantity {
51-
if val, ok := (*self)[ResourceNvidiaGPU]; ok {
52-
return &val
53-
}
54-
return &resource.Quantity{}
55-
}
56-
5750
func (self *ResourceList) StorageEphemeral() *resource.Quantity {
5851
if val, ok := (*self)[ResourceEphemeralStorage]; ok {
5952
return &val

pkg/apis/core/types.go

-2
Original file line numberDiff line numberDiff line change
@@ -3641,8 +3641,6 @@ const (
36413641
// Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
36423642
// The resource name for ResourceEphemeralStorage is alpha and it can change across releases.
36433643
ResourceEphemeralStorage ResourceName = "ephemeral-storage"
3644-
// NVIDIA GPU, in devices. Alpha, might change: although fractional and allowing values >1, only one whole device per node is assigned.
3645-
ResourceNvidiaGPU ResourceName = "alpha.kubernetes.io/nvidia-gpu"
36463644
)
36473645

36483646
const (

pkg/apis/core/v1/helper/BUILD

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ go_library(
2929
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
3030
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
3131
"//vendor/k8s.io/apimachinery/pkg/selection:go_default_library",
32-
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
3332
"//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library",
3433
],
3534
)

pkg/apis/core/v1/helper/helpers.go

+2-6
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"k8s.io/apimachinery/pkg/api/resource"
2626
"k8s.io/apimachinery/pkg/labels"
2727
"k8s.io/apimachinery/pkg/selection"
28-
"k8s.io/apimachinery/pkg/util/sets"
2928
"k8s.io/apimachinery/pkg/util/validation"
3029
"k8s.io/kubernetes/pkg/apis/core/helper"
3130
)
@@ -85,14 +84,11 @@ func HugePageSizeFromResourceName(name v1.ResourceName) (resource.Quantity, erro
8584
return resource.ParseQuantity(pageSize)
8685
}
8786

88-
var overcommitBlacklist = sets.NewString(string(v1.ResourceNvidiaGPU))
89-
9087
// IsOvercommitAllowed returns true if the resource is in the default
91-
// namespace and not blacklisted and is not hugepages.
88+
// namespace and is not hugepages.
9289
func IsOvercommitAllowed(name v1.ResourceName) bool {
9390
return IsNativeResource(name) &&
94-
!IsHugePageResourceName(name) &&
95-
!overcommitBlacklist.Has(string(name))
91+
!IsHugePageResourceName(name)
9692
}
9793

9894
// Extended and Hugepages resources

pkg/apis/core/v1/helper/helpers_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,6 @@ func TestIsOvercommitAllowed(t *testing.T) {
125125
resourceName: "kubernetes.io/resource-foo",
126126
expectVal: true,
127127
},
128-
{
129-
resourceName: "alpha.kubernetes.io/nvidia-gpu",
130-
expectVal: false,
131-
},
132128
{
133129
resourceName: "hugepages-100m",
134130
expectVal: false,

pkg/apis/core/v1/helper/qos/qos_test.go

+3-29
Original file line numberDiff line numberDiff line change
@@ -38,26 +38,13 @@ func TestGetPodQOS(t *testing.T) {
3838
}),
3939
expected: v1.PodQOSGuaranteed,
4040
},
41-
{
42-
pod: newPod("guaranteed-with-gpu", []v1.Container{
43-
newContainer("guaranteed", getResourceList("100m", "100Mi"), addResource("nvidia-gpu", "2", getResourceList("100m", "100Mi"))),
44-
}),
45-
expected: v1.PodQOSGuaranteed,
46-
},
4741
{
4842
pod: newPod("guaranteed-guaranteed", []v1.Container{
4943
newContainer("guaranteed", getResourceList("100m", "100Mi"), getResourceList("100m", "100Mi")),
5044
newContainer("guaranteed", getResourceList("100m", "100Mi"), getResourceList("100m", "100Mi")),
5145
}),
5246
expected: v1.PodQOSGuaranteed,
5347
},
54-
{
55-
pod: newPod("guaranteed-guaranteed-with-gpu", []v1.Container{
56-
newContainer("guaranteed", getResourceList("100m", "100Mi"), addResource("nvidia-gpu", "2", getResourceList("100m", "100Mi"))),
57-
newContainer("guaranteed", getResourceList("100m", "100Mi"), getResourceList("100m", "100Mi")),
58-
}),
59-
expected: v1.PodQOSGuaranteed,
60-
},
6148
{
6249
pod: newPod("best-effort-best-effort", []v1.Container{
6350
newContainer("best-effort", getResourceList("", ""), getResourceList("", "")),
@@ -71,29 +58,16 @@ func TestGetPodQOS(t *testing.T) {
7158
}),
7259
expected: v1.PodQOSBestEffort,
7360
},
74-
{
75-
pod: newPod("best-effort-best-effort-with-gpu", []v1.Container{
76-
newContainer("best-effort", getResourceList("", ""), addResource("nvidia-gpu", "2", getResourceList("", ""))),
77-
newContainer("best-effort", getResourceList("", ""), getResourceList("", "")),
78-
}),
79-
expected: v1.PodQOSBestEffort,
80-
},
81-
{
82-
pod: newPod("best-effort-with-gpu", []v1.Container{
83-
newContainer("best-effort", getResourceList("", ""), addResource("nvidia-gpu", "2", getResourceList("", ""))),
84-
}),
85-
expected: v1.PodQOSBestEffort,
86-
},
8761
{
8862
pod: newPod("best-effort-burstable", []v1.Container{
89-
newContainer("best-effort", getResourceList("", ""), addResource("nvidia-gpu", "2", getResourceList("", ""))),
63+
newContainer("best-effort", getResourceList("", ""), getResourceList("", "")),
9064
newContainer("burstable", getResourceList("1", ""), getResourceList("2", "")),
9165
}),
9266
expected: v1.PodQOSBurstable,
9367
},
9468
{
9569
pod: newPod("best-effort-guaranteed", []v1.Container{
96-
newContainer("best-effort", getResourceList("", ""), addResource("nvidia-gpu", "2", getResourceList("", ""))),
70+
newContainer("best-effort", getResourceList("", ""), getResourceList("", "")),
9771
newContainer("guaranteed", getResourceList("10m", "100Mi"), getResourceList("10m", "100Mi")),
9872
}),
9973
expected: v1.PodQOSBurstable,
@@ -132,7 +106,7 @@ func TestGetPodQOS(t *testing.T) {
132106
},
133107
{
134108
pod: newPod("burstable-2", []v1.Container{
135-
newContainer("burstable", getResourceList("0", "0"), addResource("nvidia-gpu", "2", getResourceList("100m", "200Mi"))),
109+
newContainer("burstable", getResourceList("0", "0"), getResourceList("100m", "200Mi")),
136110
}),
137111
expected: v1.PodQOSBurstable,
138112
},

pkg/apis/core/v1/validation/validation.go

-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
6161
} else if quantity.Cmp(limitQuantity) > 0 {
6262
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be less than or equal to %s limit", resourceName)))
6363
}
64-
} else if resourceName == v1.ResourceNvidiaGPU {
65-
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be equal to %s request", v1.ResourceNvidiaGPU)))
6664
}
6765
}
6866

pkg/apis/core/v1/validation/validation_test.go

+5-56
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,15 @@ func TestValidateResourceRequirements(t *testing.T) {
3232
requirements v1.ResourceRequirements
3333
}{
3434
{
35-
Name: "GPU only setting Limits",
36-
requirements: v1.ResourceRequirements{
37-
Limits: v1.ResourceList{
38-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("10"),
39-
},
40-
},
41-
},
42-
{
43-
Name: "GPU setting Limits equals Requests",
44-
requirements: v1.ResourceRequirements{
45-
Limits: v1.ResourceList{
46-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("10"),
47-
},
48-
Requests: v1.ResourceList{
49-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("10"),
50-
},
51-
},
52-
},
53-
{
54-
Name: "Resources with GPU with Requests",
35+
Name: "Resources with Requests equal to Limits",
5536
requirements: v1.ResourceRequirements{
5637
Requests: v1.ResourceList{
57-
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10"),
58-
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10G"),
59-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("1"),
38+
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10"),
39+
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10G"),
6040
},
6141
Limits: v1.ResourceList{
62-
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10"),
63-
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10G"),
64-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("1"),
42+
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10"),
43+
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10G"),
6544
},
6645
},
6746
},
@@ -111,36 +90,6 @@ func TestValidateResourceRequirements(t *testing.T) {
11190
Name string
11291
requirements v1.ResourceRequirements
11392
}{
114-
{
115-
Name: "GPU only setting Requests",
116-
requirements: v1.ResourceRequirements{
117-
Requests: v1.ResourceList{
118-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("10"),
119-
},
120-
},
121-
},
122-
{
123-
Name: "GPU setting Limits less than Requests",
124-
requirements: v1.ResourceRequirements{
125-
Limits: v1.ResourceList{
126-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("10"),
127-
},
128-
Requests: v1.ResourceList{
129-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("11"),
130-
},
131-
},
132-
},
133-
{
134-
Name: "GPU setting Limits larger than Requests",
135-
requirements: v1.ResourceRequirements{
136-
Limits: v1.ResourceList{
137-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("10"),
138-
},
139-
Requests: v1.ResourceList{
140-
v1.ResourceName(v1.ResourceNvidiaGPU): resource.MustParse("9"),
141-
},
142-
},
143-
},
14493
{
14594
Name: "Resources with Requests Larger Than Limits",
14695
requirements: v1.ResourceRequirements{

pkg/apis/core/validation/validation_test.go

+3-57
Original file line numberDiff line numberDiff line change
@@ -5042,35 +5042,16 @@ func TestValidateContainers(t *testing.T) {
50425042
TerminationMessagePolicy: "File",
50435043
},
50445044
{
5045-
Name: "resources-test-with-gpu-with-request",
5046-
Image: "image",
5047-
Resources: core.ResourceRequirements{
5048-
Requests: core.ResourceList{
5049-
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5050-
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
5051-
core.ResourceName(core.ResourceNvidiaGPU): resource.MustParse("1"),
5052-
},
5053-
Limits: core.ResourceList{
5054-
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5055-
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
5056-
core.ResourceName(core.ResourceNvidiaGPU): resource.MustParse("1"),
5057-
},
5058-
},
5059-
ImagePullPolicy: "IfNotPresent",
5060-
TerminationMessagePolicy: "File",
5061-
},
5062-
{
5063-
Name: "resources-test-with-gpu-without-request",
5045+
Name: "resources-test-with-request-and-limit",
50645046
Image: "image",
50655047
Resources: core.ResourceRequirements{
50665048
Requests: core.ResourceList{
50675049
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
50685050
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
50695051
},
50705052
Limits: core.ResourceList{
5071-
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5072-
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
5073-
core.ResourceName(core.ResourceNvidiaGPU): resource.MustParse("1"),
5053+
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5054+
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
50745055
},
50755056
},
50765057
ImagePullPolicy: "IfNotPresent",
@@ -5359,41 +5340,6 @@ func TestValidateContainers(t *testing.T) {
53595340
TerminationMessagePolicy: "File",
53605341
},
53615342
},
5362-
"Resource GPU limit must match request": {
5363-
{
5364-
Name: "gpu-resource-request-limit",
5365-
Image: "image",
5366-
Resources: core.ResourceRequirements{
5367-
Requests: core.ResourceList{
5368-
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5369-
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
5370-
core.ResourceName(core.ResourceNvidiaGPU): resource.MustParse("0"),
5371-
},
5372-
Limits: core.ResourceList{
5373-
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5374-
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
5375-
core.ResourceName(core.ResourceNvidiaGPU): resource.MustParse("1"),
5376-
},
5377-
},
5378-
TerminationMessagePolicy: "File",
5379-
ImagePullPolicy: "IfNotPresent",
5380-
},
5381-
},
5382-
"Resource GPU invalid setting only request": {
5383-
{
5384-
Name: "gpu-resource-request-limit",
5385-
Image: "image",
5386-
Resources: core.ResourceRequirements{
5387-
Requests: core.ResourceList{
5388-
core.ResourceName(core.ResourceCPU): resource.MustParse("10"),
5389-
core.ResourceName(core.ResourceMemory): resource.MustParse("10G"),
5390-
core.ResourceName(core.ResourceNvidiaGPU): resource.MustParse("1"),
5391-
},
5392-
},
5393-
TerminationMessagePolicy: "File",
5394-
ImagePullPolicy: "IfNotPresent",
5395-
},
5396-
},
53975343
"Request limit simple invalid": {
53985344
{
53995345
Name: "abc-123",

pkg/features/kube_features.go

-11
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,6 @@ const (
5353
// Note: This feature is not supported for `BestEffort` pods.
5454
ExperimentalCriticalPodAnnotation utilfeature.Feature = "ExperimentalCriticalPodAnnotation"
5555

56-
// owner: @vishh
57-
// alpha: v1.6
58-
//
59-
// This is deprecated and will be removed in v1.11. Use DevicePlugins instead.
60-
//
61-
// Enables support for GPUs as a schedulable resource.
62-
// Only Nvidia GPUs are supported as of v1.6.
63-
// Works only with Docker Container Runtime.
64-
Accelerators utilfeature.Feature = "Accelerators"
65-
6656
// owner: @jiayingz
6757
// beta: v1.10
6858
//
@@ -296,7 +286,6 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
296286
DynamicKubeletConfig: {Default: false, PreRelease: utilfeature.Alpha},
297287
ExperimentalHostUserNamespaceDefaultingGate: {Default: false, PreRelease: utilfeature.Beta},
298288
ExperimentalCriticalPodAnnotation: {Default: false, PreRelease: utilfeature.Alpha},
299-
Accelerators: {Default: false, PreRelease: utilfeature.Alpha},
300289
DevicePlugins: {Default: true, PreRelease: utilfeature.Beta},
301290
TaintBasedEvictions: {Default: false, PreRelease: utilfeature.Alpha},
302291
RotateKubeletServerCertificate: {Default: false, PreRelease: utilfeature.Alpha},

pkg/kubelet/BUILD

-4
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ go_library(
5555
"//pkg/kubelet/envvars:go_default_library",
5656
"//pkg/kubelet/events:go_default_library",
5757
"//pkg/kubelet/eviction:go_default_library",
58-
"//pkg/kubelet/gpu:go_default_library",
59-
"//pkg/kubelet/gpu/nvidia:go_default_library",
6058
"//pkg/kubelet/images:go_default_library",
6159
"//pkg/kubelet/kubeletconfig:go_default_library",
6260
"//pkg/kubelet/kuberuntime:go_default_library",
@@ -179,7 +177,6 @@ go_test(
179177
"//pkg/kubelet/container:go_default_library",
180178
"//pkg/kubelet/container/testing:go_default_library",
181179
"//pkg/kubelet/eviction:go_default_library",
182-
"//pkg/kubelet/gpu:go_default_library",
183180
"//pkg/kubelet/images:go_default_library",
184181
"//pkg/kubelet/lifecycle:go_default_library",
185182
"//pkg/kubelet/logs:go_default_library",
@@ -264,7 +261,6 @@ filegroup(
264261
"//pkg/kubelet/envvars:all-srcs",
265262
"//pkg/kubelet/events:all-srcs",
266263
"//pkg/kubelet/eviction:all-srcs",
267-
"//pkg/kubelet/gpu:all-srcs",
268264
"//pkg/kubelet/images:all-srcs",
269265
"//pkg/kubelet/kubeletconfig:all-srcs",
270266
"//pkg/kubelet/kuberuntime:all-srcs",

0 commit comments

Comments
 (0)