Skip to content

Commit fab0d76

Browse files
authored
Merge pull request kubernetes#129731 from gjkim42/promote-sidecar-containers-to-ga
Promote SidecarContainers feature to GA
2 parents f82439f + 8d27bf2 commit fab0d76

File tree

17 files changed

+94
-351
lines changed

17 files changed

+94
-351
lines changed

pkg/api/pod/util_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3434
"k8s.io/apimachinery/pkg/util/sets"
3535
"k8s.io/apimachinery/pkg/util/validation/field"
36+
"k8s.io/apimachinery/pkg/util/version"
3637
utilfeature "k8s.io/apiserver/pkg/util/feature"
3738
featuregatetesting "k8s.io/component-base/featuregate/testing"
3839
api "k8s.io/kubernetes/pkg/apis/core"
@@ -2908,7 +2909,11 @@ func TestDropSidecarContainers(t *testing.T) {
29082909
}
29092910

29102911
t.Run(fmt.Sprintf("feature enabled=%v, old pod %v, new pod %v", enabled, oldPodInfo.description, newPodInfo.description), func(t *testing.T) {
2911-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, enabled)
2912+
if !enabled {
2913+
// TODO: Remove this in v1.36
2914+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
2915+
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, false)
2916+
}
29122917

29132918
var oldPodSpec *api.PodSpec
29142919
if oldPod != nil {

pkg/apis/core/validation/validation_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25611,8 +25611,6 @@ func TestValidateSELinuxChangePolicy(t *testing.T) {
2561125611
}
2561225612

2561325613
func TestValidatePodResize(t *testing.T) {
25614-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, true)
25615-
2561625614
mkPod := func(req, lim core.ResourceList, tweaks ...podtest.Tweak) *core.Pod {
2561725615
return podtest.MakePod("pod", append(tweaks,
2561825616
podtest.SetContainers(

pkg/controller/job/backoff_utils_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ import (
2323
"github.com/google/go-cmp/cmp"
2424
v1 "k8s.io/api/core/v1"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26-
utilfeature "k8s.io/apiserver/pkg/util/feature"
27-
featuregatetesting "k8s.io/component-base/featuregate/testing"
2826
"k8s.io/klog/v2/ktesting"
29-
"k8s.io/kubernetes/pkg/features"
3027
clocktesting "k8s.io/utils/clock/testing"
3128
"k8s.io/utils/ptr"
3229
)
@@ -203,7 +200,6 @@ func TestNewBackoffRecord(t *testing.T) {
203200
}
204201

205202
func TestGetFinishedTime(t *testing.T) {
206-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, true)
207203
defaultTestTime := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
208204
defaultTestTimeMinus30s := defaultTestTime.Add(-30 * time.Second)
209205
containerRestartPolicyAlways := v1.ContainerRestartPolicyAlways

pkg/features/versioned_kube_features.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
713713
SidecarContainers: {
714714
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
715715
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta},
716+
{Version: version.MustParse("1.33"), Default: true, LockToDefault: true, PreRelease: featuregate.GA}, // GA in 1.33 remove in 1.36
716717
},
717718

718719
SizeMemoryBackedVolumes: {

pkg/kubelet/apis/podresources/server_v1.go

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,13 @@ func (p *v1PodResourcesServer) List(ctx context.Context, req *podresourcesv1.Lis
6666
Containers: make([]*podresourcesv1.ContainerResources, 0, len(pod.Spec.Containers)),
6767
}
6868

69-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SidecarContainers) {
70-
pRes.Containers = make([]*podresourcesv1.ContainerResources, 0, len(pod.Spec.InitContainers)+len(pod.Spec.Containers))
71-
72-
for _, container := range pod.Spec.InitContainers {
73-
if !podutil.IsRestartableInitContainer(&container) {
74-
continue
75-
}
76-
77-
pRes.Containers = append(pRes.Containers, p.getContainerResources(pod, &container))
69+
pRes.Containers = make([]*podresourcesv1.ContainerResources, 0, len(pod.Spec.InitContainers)+len(pod.Spec.Containers))
70+
for _, container := range pod.Spec.InitContainers {
71+
if !podutil.IsRestartableInitContainer(&container) {
72+
continue
7873
}
74+
75+
pRes.Containers = append(pRes.Containers, p.getContainerResources(pod, &container))
7976
}
8077

8178
for _, container := range pod.Spec.Containers {
@@ -126,16 +123,13 @@ func (p *v1PodResourcesServer) Get(ctx context.Context, req *podresourcesv1.GetP
126123
Containers: make([]*podresourcesv1.ContainerResources, 0, len(pod.Spec.Containers)),
127124
}
128125

129-
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.SidecarContainers) {
130-
podResources.Containers = make([]*podresourcesv1.ContainerResources, 0, len(pod.Spec.InitContainers)+len(pod.Spec.Containers))
131-
132-
for _, container := range pod.Spec.InitContainers {
133-
if !podutil.IsRestartableInitContainer(&container) {
134-
continue
135-
}
136-
137-
podResources.Containers = append(podResources.Containers, p.getContainerResources(pod, &container))
126+
podResources.Containers = make([]*podresourcesv1.ContainerResources, 0, len(pod.Spec.InitContainers)+len(pod.Spec.Containers))
127+
for _, container := range pod.Spec.InitContainers {
128+
if !podutil.IsRestartableInitContainer(&container) {
129+
continue
138130
}
131+
132+
podResources.Containers = append(podResources.Containers, p.getContainerResources(pod, &container))
139133
}
140134

141135
for _, container := range pod.Spec.Containers {

pkg/kubelet/apis/podresources/server_v1_test.go

Lines changed: 4 additions & 210 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,7 @@ func TestListPodResourcesWithInitContainersV1(t *testing.T) {
298298
*podresourcetest.MockCPUsProvider,
299299
*podresourcetest.MockMemoryProvider,
300300
*podresourcetest.MockDynamicResourcesProvider)
301-
sidecarContainersEnabled bool
302-
expectedResponse *podresourcesapi.ListPodResourcesResponse
301+
expectedResponse *podresourcesapi.ListPodResourcesResponse
303302
}{
304303
{
305304
desc: "pod having an init container",
@@ -352,110 +351,7 @@ func TestListPodResourcesWithInitContainersV1(t *testing.T) {
352351
},
353352
},
354353
{
355-
desc: "pod having an init container with SidecarContainers enabled",
356-
pods: []*v1.Pod{
357-
{
358-
ObjectMeta: metav1.ObjectMeta{
359-
Name: podName,
360-
Namespace: podNamespace,
361-
UID: podUID,
362-
},
363-
Spec: v1.PodSpec{
364-
InitContainers: []v1.Container{
365-
{
366-
Name: initContainerName,
367-
},
368-
},
369-
Containers: containers,
370-
},
371-
},
372-
},
373-
mockFunc: func(
374-
pods []*v1.Pod,
375-
devicesProvider *podresourcetest.MockDevicesProvider,
376-
cpusProvider *podresourcetest.MockCPUsProvider,
377-
memoryProvider *podresourcetest.MockMemoryProvider,
378-
dynamicResourcesProvider *podresourcetest.MockDynamicResourcesProvider) {
379-
devicesProvider.EXPECT().UpdateAllocatedDevices().Return().Maybe()
380-
devicesProvider.EXPECT().GetDevices(string(podUID), containerName).Return(devs).Maybe()
381-
cpusProvider.EXPECT().GetCPUs(string(podUID), containerName).Return(cpus).Maybe()
382-
memoryProvider.EXPECT().GetMemory(string(podUID), containerName).Return(memory).Maybe()
383-
dynamicResourcesProvider.EXPECT().GetDynamicResources(pods[0], &pods[0].Spec.Containers[0]).Return([]*podresourcesapi.DynamicResource{}).Maybe()
384-
385-
},
386-
sidecarContainersEnabled: true,
387-
expectedResponse: &podresourcesapi.ListPodResourcesResponse{
388-
PodResources: []*podresourcesapi.PodResources{
389-
{
390-
Name: podName,
391-
Namespace: podNamespace,
392-
Containers: []*podresourcesapi.ContainerResources{
393-
{
394-
Name: containerName,
395-
Devices: devs,
396-
CpuIds: cpus,
397-
Memory: memory,
398-
DynamicResources: []*podresourcesapi.DynamicResource{},
399-
},
400-
},
401-
},
402-
},
403-
},
404-
},
405-
{
406-
desc: "pod having a restartable init container with SidecarContainers disabled",
407-
pods: []*v1.Pod{
408-
{
409-
ObjectMeta: metav1.ObjectMeta{
410-
Name: podName,
411-
Namespace: podNamespace,
412-
UID: podUID,
413-
},
414-
Spec: v1.PodSpec{
415-
InitContainers: []v1.Container{
416-
{
417-
Name: initContainerName,
418-
RestartPolicy: &containerRestartPolicyAlways,
419-
},
420-
},
421-
Containers: containers,
422-
},
423-
},
424-
},
425-
mockFunc: func(
426-
pods []*v1.Pod,
427-
devicesProvider *podresourcetest.MockDevicesProvider,
428-
cpusProvider *podresourcetest.MockCPUsProvider,
429-
memoryProvider *podresourcetest.MockMemoryProvider,
430-
dynamicResourcesProvider *podresourcetest.MockDynamicResourcesProvider) {
431-
devicesProvider.EXPECT().UpdateAllocatedDevices().Return().Maybe()
432-
433-
devicesProvider.EXPECT().GetDevices(string(podUID), containerName).Return(devs).Maybe()
434-
cpusProvider.EXPECT().GetCPUs(string(podUID), containerName).Return(cpus).Maybe()
435-
memoryProvider.EXPECT().GetMemory(string(podUID), containerName).Return(memory).Maybe()
436-
dynamicResourcesProvider.EXPECT().GetDynamicResources(pods[0], &pods[0].Spec.Containers[0]).Return([]*podresourcesapi.DynamicResource{}).Maybe()
437-
438-
},
439-
expectedResponse: &podresourcesapi.ListPodResourcesResponse{
440-
PodResources: []*podresourcesapi.PodResources{
441-
{
442-
Name: podName,
443-
Namespace: podNamespace,
444-
Containers: []*podresourcesapi.ContainerResources{
445-
{
446-
Name: containerName,
447-
Devices: devs,
448-
CpuIds: cpus,
449-
Memory: memory,
450-
DynamicResources: []*podresourcesapi.DynamicResource{},
451-
},
452-
},
453-
},
454-
},
455-
},
456-
},
457-
{
458-
desc: "pod having an init container with SidecarContainers enabled",
354+
desc: "pod having a restartable init container",
459355
pods: []*v1.Pod{
460356
{
461357
ObjectMeta: metav1.ObjectMeta{
@@ -493,7 +389,6 @@ func TestListPodResourcesWithInitContainersV1(t *testing.T) {
493389
dynamicResourcesProvider.EXPECT().GetDynamicResources(pods[0], &pods[0].Spec.Containers[0]).Return([]*podresourcesapi.DynamicResource{}).Maybe()
494390

495391
},
496-
sidecarContainersEnabled: true,
497392
expectedResponse: &podresourcesapi.ListPodResourcesResponse{
498393
PodResources: []*podresourcesapi.PodResources{
499394
{
@@ -521,8 +416,6 @@ func TestListPodResourcesWithInitContainersV1(t *testing.T) {
521416
},
522417
} {
523418
t.Run(tc.desc, func(t *testing.T) {
524-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, pkgfeatures.SidecarContainers, tc.sidecarContainersEnabled)
525-
526419
mockDevicesProvider := podresourcetest.NewMockDevicesProvider(t)
527420
mockPodsProvider := podresourcetest.NewMockPodsProvider(t)
528421
mockCPUsProvider := podresourcetest.NewMockCPUsProvider(t)
@@ -1069,8 +962,7 @@ func TestGetPodResourcesWithInitContainersV1(t *testing.T) {
1069962
*podresourcetest.MockCPUsProvider,
1070963
*podresourcetest.MockMemoryProvider,
1071964
*podresourcetest.MockDynamicResourcesProvider)
1072-
sidecarContainersEnabled bool
1073-
expectedResponse *podresourcesapi.GetPodResourcesResponse
965+
expectedResponse *podresourcesapi.GetPodResourcesResponse
1074966
}{
1075967
{
1076968
desc: "pod having an init container",
@@ -1119,102 +1011,7 @@ func TestGetPodResourcesWithInitContainersV1(t *testing.T) {
11191011
},
11201012
},
11211013
{
1122-
desc: "pod having an init container with SidecarContainers enabled",
1123-
pod: &v1.Pod{
1124-
ObjectMeta: metav1.ObjectMeta{
1125-
Name: podName,
1126-
Namespace: podNamespace,
1127-
UID: podUID,
1128-
},
1129-
Spec: v1.PodSpec{
1130-
InitContainers: []v1.Container{
1131-
{
1132-
Name: initContainerName,
1133-
},
1134-
},
1135-
Containers: containers,
1136-
},
1137-
},
1138-
mockFunc: func(
1139-
pod *v1.Pod,
1140-
devicesProvider *podresourcetest.MockDevicesProvider,
1141-
cpusProvider *podresourcetest.MockCPUsProvider,
1142-
memoryProvider *podresourcetest.MockMemoryProvider,
1143-
dynamicResourcesProvider *podresourcetest.MockDynamicResourcesProvider) {
1144-
devicesProvider.EXPECT().UpdateAllocatedDevices().Return().Maybe()
1145-
devicesProvider.EXPECT().GetDevices(string(podUID), containerName).Return(devs).Maybe()
1146-
cpusProvider.EXPECT().GetCPUs(string(podUID), containerName).Return(cpus).Maybe()
1147-
memoryProvider.EXPECT().GetMemory(string(podUID), containerName).Return(memory).Maybe()
1148-
dynamicResourcesProvider.EXPECT().GetDynamicResources(pod, &pod.Spec.Containers[0]).Return([]*podresourcesapi.DynamicResource{}).Maybe()
1149-
1150-
},
1151-
sidecarContainersEnabled: true,
1152-
expectedResponse: &podresourcesapi.GetPodResourcesResponse{
1153-
PodResources: &podresourcesapi.PodResources{
1154-
Name: podName,
1155-
Namespace: podNamespace,
1156-
Containers: []*podresourcesapi.ContainerResources{
1157-
{
1158-
Name: containerName,
1159-
Devices: devs,
1160-
CpuIds: cpus,
1161-
Memory: memory,
1162-
DynamicResources: []*podresourcesapi.DynamicResource{},
1163-
},
1164-
},
1165-
},
1166-
},
1167-
},
1168-
{
1169-
desc: "pod having a restartable init container with SidecarContainers disabled",
1170-
pod: &v1.Pod{
1171-
ObjectMeta: metav1.ObjectMeta{
1172-
Name: podName,
1173-
Namespace: podNamespace,
1174-
UID: podUID,
1175-
},
1176-
Spec: v1.PodSpec{
1177-
InitContainers: []v1.Container{
1178-
{
1179-
Name: initContainerName,
1180-
RestartPolicy: &containerRestartPolicyAlways,
1181-
},
1182-
},
1183-
Containers: containers,
1184-
},
1185-
},
1186-
mockFunc: func(
1187-
pod *v1.Pod,
1188-
devicesProvider *podresourcetest.MockDevicesProvider,
1189-
cpusProvider *podresourcetest.MockCPUsProvider,
1190-
memoryProvider *podresourcetest.MockMemoryProvider,
1191-
dynamicResourcesProvider *podresourcetest.MockDynamicResourcesProvider) {
1192-
devicesProvider.EXPECT().UpdateAllocatedDevices().Return().Maybe()
1193-
1194-
devicesProvider.EXPECT().GetDevices(string(podUID), containerName).Return(devs).Maybe()
1195-
cpusProvider.EXPECT().GetCPUs(string(podUID), containerName).Return(cpus).Maybe()
1196-
memoryProvider.EXPECT().GetMemory(string(podUID), containerName).Return(memory).Maybe()
1197-
dynamicResourcesProvider.EXPECT().GetDynamicResources(pod, &pod.Spec.Containers[0]).Return([]*podresourcesapi.DynamicResource{}).Maybe()
1198-
1199-
},
1200-
expectedResponse: &podresourcesapi.GetPodResourcesResponse{
1201-
PodResources: &podresourcesapi.PodResources{
1202-
Name: podName,
1203-
Namespace: podNamespace,
1204-
Containers: []*podresourcesapi.ContainerResources{
1205-
{
1206-
Name: containerName,
1207-
Devices: devs,
1208-
CpuIds: cpus,
1209-
Memory: memory,
1210-
DynamicResources: []*podresourcesapi.DynamicResource{},
1211-
},
1212-
},
1213-
},
1214-
},
1215-
},
1216-
{
1217-
desc: "pod having an init container with SidecarContainers enabled",
1014+
desc: "pod having a restartable init container",
12181015
pod: &v1.Pod{
12191016
ObjectMeta: metav1.ObjectMeta{
12201017
Name: podName,
@@ -1250,7 +1047,6 @@ func TestGetPodResourcesWithInitContainersV1(t *testing.T) {
12501047
dynamicResourcesProvider.EXPECT().GetDynamicResources(pod, &pod.Spec.Containers[0]).Return([]*podresourcesapi.DynamicResource{}).Maybe()
12511048

12521049
},
1253-
sidecarContainersEnabled: true,
12541050
expectedResponse: &podresourcesapi.GetPodResourcesResponse{
12551051
PodResources: &podresourcesapi.PodResources{
12561052
Name: podName,
@@ -1276,8 +1072,6 @@ func TestGetPodResourcesWithInitContainersV1(t *testing.T) {
12761072
},
12771073
} {
12781074
t.Run(tc.desc, func(t *testing.T) {
1279-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, pkgfeatures.SidecarContainers, tc.sidecarContainersEnabled)
1280-
12811075
mockDevicesProvider := podresourcetest.NewMockDevicesProvider(t)
12821076
mockPodsProvider := podresourcetest.NewMockPodsProvider(t)
12831077
mockCPUsProvider := podresourcetest.NewMockCPUsProvider(t)

0 commit comments

Comments
 (0)