Repository: kubernetes/kubernetes
Pull request #130574: [FG:InPlacePodVerticalScaling] Drop `Proposed` resize status
Author: login: natasha41575
Labels: name: kind/bug
description: Categorizes issue or PR as related to a bug.
name: area/test
name: priority/important-soon
description: Must be staffed and worked on either currently, or very soon, ideally in time for the next release.
name: kind/cleanup
description: Categorizes issue or PR as related to cleaning up code, process, or technical debt.
name: lgtm
description: "Looks good to me", indicates that a PR is ready to be merged.
name: sig/node
description: Categorizes an issue or PR as relevant to SIG Node.
name: release-note
description: Denotes a PR that will be considered when it comes time to generate release notes.
name: size/XL
description: Denotes a PR that changes 500-999 lines, ignoring generated files.
name: kind/api-change
description: Categorizes issue or PR as related to adding, removing, or otherwise changing an API
name: sig/apps
description: Categorizes an issue or PR as relevant to SIG Apps.
name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
name: cncf-cla: yes
description: Indicates the PR's author has signed the CNCF CLA.
name: sig/testing
description: Categorizes an issue or PR as relevant to SIG Testing.
name: area/e2e-test-framework
description: Issues or PRs related to refactoring the kubernetes e2e test framework
name: triage/accepted
description: Indicates an issue or PR is ready to be actively worked on.
Created: 2025-03-04T21:03:25Z | Merged: 2025-03-11T16:49:46Z

<!--  Thanks for sending a pull request!  Here are some tips for you:

1. If this is your first time, please read our contributor guidelines: https://git.k8s.io/community/contributors/guide/first-contribution.md#your-first-contribution and developer guide https://git.k8s.io/community/contributors/devel/development.md#development-guide
2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request. For reference on required PR/issue labels, read here:
https://git.k8s.io/community/contributors/devel/sig-release/release.md#issuepr-kind-label
3. Ensure you have added or ran the appropriate tests for your PR: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md
4. If you want *faster* PR reviews, read how: https://git.k8s.io/community/contributors/guide/pull-requests.md#best-practices-for-faster-reviews
5. If the PR is unfinished, see how to mark it: https://git.k8s.io/community/contributors/guide/pull-requests.md#marking-unfinished-pull-requests
-->

#### What type of PR is this?

<!--
Add one of the following kinds:
/kind bug
/kind cleanup
/kind documentation
/kind feature

Optionally add one or more of the following kinds if applicable:
/kind api-change
/kind deprecation
/kind failing-test
/kind flake
/kind regression
-->

/kind cleanup
/kind bug

#### What this PR does / why we need it:

The API server will no longer set the resize status to `Proposed` when it receives a resize request.

#### Which issue(s) this PR fixes:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
-->
Fixes https://github.com/kubernetes/kubernetes/issues/125394

#### Does this PR introduce a user-facing change?
<!--
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".

For more information on release notes see: https://git.k8s.io/community/contributors/guide/release-notes.md
-->
```release-note
For the InPlacePodVerticalScaling feature, the API server will no longer set the resize status to `Proposed` upon receiving a resize request. 
```





Diff:
diff --git a/pkg/api/pod/util.go b/pkg/api/pod/util.go
index 06a2573fcd2eb..41b9307c36c05 100644
--- a/pkg/api/pod/util.go
+++ b/pkg/api/pod/util.go
@@ -19,7 +19,6 @@ package pod
 import (
 	"strings"
 
-	apiequality "k8s.io/apimachinery/pkg/api/equality"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	metavalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
 	"k8s.io/apimachinery/pkg/util/sets"
@@ -1285,43 +1284,6 @@ func hasInvalidLabelValueInRequiredNodeAffinity(spec *api.PodSpec) bool {
 	return helper.HasInvalidLabelValueInNodeSelectorTerms(spec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms)
 }
 
-func MarkPodProposedForResize(oldPod, newPod *api.Pod) {
-	if len(newPod.Spec.Containers) != len(oldPod.Spec.Containers) {
-		// Update is invalid: ignore changes and let validation handle it
-		return
-	}
-
-	if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) && len(newPod.Spec.InitContainers) != len(oldPod.Spec.InitContainers) {
-		return
-	}
-
-	for i, c := range newPod.Spec.Containers {
-		if c.Name != oldPod.Spec.Containers[i].Name {
-			return // Update is invalid (container mismatch): let validation handle it.
-		}
-		if apiequality.Semantic.DeepEqual(oldPod.Spec.Containers[i].Resources, c.Resources) {
-			continue
-		}
-		newPod.Status.Resize = api.PodResizeStatusProposed
-		return
-	}
-
-	if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) {
-		for i, c := range newPod.Spec.InitContainers {
-			if IsRestartableInitContainer(&c) {
-				if c.Name != oldPod.Spec.InitContainers[i].Name {
-					return // Update is invalid (container mismatch): let validation handle it.
-				}
-				if apiequality.Semantic.DeepEqual(oldPod.Spec.InitContainers[i].Resources, c.Resources) {
-					continue
-				}
-				newPod.Status.Resize = api.PodResizeStatusProposed
-				return
-			}
-		}
-	}
-}
-
 // KEP: https://kep.k8s.io/4639
 func dropImageVolumes(podSpec, oldPodSpec *api.PodSpec) {
 	if utilfeature.DefaultFeatureGate.Enabled(features.ImageVolume) || imageVolumesInUse(oldPodSpec) {
diff --git a/pkg/api/pod/util_test.go b/pkg/api/pod/util_test.go
index 42678e29b8b41..50c7879a85231 100644
--- a/pkg/api/pod/util_test.go
+++ b/pkg/api/pod/util_test.go
@@ -2954,657 +2954,6 @@ func TestDropSidecarContainers(t *testing.T) {
 	}
 }
 
-func TestMarkPodProposedForResize(t *testing.T) {
-	featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, true)
-	containerRestartPolicyAlways := api.ContainerRestartPolicyAlways
-	testCases := []struct {
-		desc                 string
-		newPodSpec           api.PodSpec
-		oldPodSpec           api.PodSpec
-		expectProposedResize bool
-	}{
-		{
-			desc: "nil requests",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "resources unchanged",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "requests resized",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: true,
-		},
-		{
-			desc: "limits resized",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("500m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: true,
-		},
-		{
-			desc: "the number of containers in the pod has increased; no action should be taken.",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "the number of containers in the pod has decreased; no action should be taken.",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "containers reordered",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "resources unchanged with sidecar containers",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "requests resized with sidecar containers",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			expectProposedResize: true,
-		},
-		{
-			desc: "limits resized with sidecar containers",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("500m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			expectProposedResize: true,
-		},
-		{
-			desc: "requests resized should fail with non-sidecar init container",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "limits resized should fail with non-sidecar init containers",
-			newPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				Containers: []api.Container{
-					{
-						Name:  "c1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-					},
-				},
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("500m")},
-						},
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "the number of sidecar containers in the pod has increased; no action should be taken.",
-			newPodSpec: api.PodSpec{
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-					{
-						Name:  "i2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "the number of sidecar containers in the pod has decreased; no action should be taken.",
-			newPodSpec: api.PodSpec{
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-					{
-						Name:  "i2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-		{
-			desc: "sidecar containers reordered",
-			newPodSpec: api.PodSpec{
-				InitContainers: []api.Container{
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-					{
-						Name:  "i2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			oldPodSpec: api.PodSpec{
-				InitContainers: []api.Container{
-					{
-						Name:  "i2",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("100m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("200m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-					{
-						Name:  "i1",
-						Image: "image",
-						Resources: api.ResourceRequirements{
-							Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("300m")},
-							Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("400m")},
-						},
-						RestartPolicy: &containerRestartPolicyAlways,
-					},
-				},
-			},
-			expectProposedResize: false,
-		},
-	}
-	for _, tc := range testCases {
-		t.Run(tc.desc, func(t *testing.T) {
-			newPod := &api.Pod{Spec: tc.newPodSpec}
-			newPodUnchanged := newPod.DeepCopy()
-			oldPod := &api.Pod{Spec: tc.oldPodSpec}
-			MarkPodProposedForResize(oldPod, newPod)
-			if tc.expectProposedResize {
-				assert.Equal(t, api.PodResizeStatusProposed, newPod.Status.Resize)
-			} else {
-				assert.Equal(t, api.PodResizeStatus(""), newPod.Status.Resize)
-			}
-			newPod.Status.Resize = newPodUnchanged.Status.Resize // Only field that might have changed.
-			assert.Equal(t, newPodUnchanged, newPod, "No fields other than .status.resize should be modified")
-		})
-	}
-}
-
 func TestDropClusterTrustBundleProjectedVolumes(t *testing.T) {
 	testCases := []struct {
 		description                         string
diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go
index 25b5885bb3a49..5a20fdc64dad2 100644
--- a/pkg/apis/core/types.go
+++ b/pkg/apis/core/types.go
@@ -2971,8 +2971,6 @@ type PodCondition struct {
 type PodResizeStatus string
 
 const (
-	// Pod resources resize has been requested and will be evaluated by node.
-	PodResizeStatusProposed PodResizeStatus = "Proposed"
 	// Pod resources resize has been accepted by node and is being actuated.
 	PodResizeStatusInProgress PodResizeStatus = "InProgress"
 	// Node cannot resize the pod at this time and will keep retrying.
diff --git a/pkg/registry/core/pod/strategy.go b/pkg/registry/core/pod/strategy.go
index 5cd2ee19a0504..18ef5acb08433 100644
--- a/pkg/registry/core/pod/strategy.go
+++ b/pkg/registry/core/pod/strategy.go
@@ -335,7 +335,6 @@ func (podResizeStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.
 	oldPod := old.(*api.Pod)
 
 	*newPod = *dropNonResizeUpdates(newPod, oldPod)
-	podutil.MarkPodProposedForResize(oldPod, newPod)
 	podutil.DropDisabledPodFields(newPod, oldPod)
 	updatePodGeneration(newPod, oldPod)
 }
diff --git a/pkg/registry/core/pod/strategy_test.go b/pkg/registry/core/pod/strategy_test.go
index 6255c526b43f8..208d071cdd857 100644
--- a/pkg/registry/core/pod/strategy_test.go
+++ b/pkg/registry/core/pod/strategy_test.go
@@ -2723,7 +2723,6 @@ func TestPodResizePrepareForUpdate(t *testing.T) {
 				)),
 				podtest.SetGeneration(2),
 				podtest.SetStatus(podtest.MakePodStatus(
-					podtest.SetResizeStatus(api.PodResizeStatusProposed), // Resize status set
 					podtest.SetContainerStatuses(podtest.MakeContainerStatus("container1",
 						api.ResourceList{
 							api.ResourceCPU:    resource.MustParse("100m"),
@@ -2828,7 +2827,6 @@ func TestPodResizePrepareForUpdate(t *testing.T) {
 				),
 				podtest.SetGeneration(2),
 				podtest.SetStatus(podtest.MakePodStatus(
-					podtest.SetResizeStatus(api.PodResizeStatusProposed), // Resize status set
 					podtest.SetContainerStatuses(
 						podtest.MakeContainerStatus("container1",
 							api.ResourceList{
@@ -2984,7 +2982,6 @@ func TestPodResizePrepareForUpdate(t *testing.T) {
 				),
 				podtest.SetGeneration(2),
 				podtest.SetStatus(podtest.MakePodStatus(
-					podtest.SetResizeStatus(api.PodResizeStatusProposed), // Resize status set
 					podtest.SetContainerStatuses(
 						podtest.MakeContainerStatus("init-container1",
 							api.ResourceList{
diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go
index 2fc4c3a76e89a..b9b0dd2c9a1ef 100644
--- a/staging/src/k8s.io/api/core/v1/types.go
+++ b/staging/src/k8s.io/api/core/v1/types.go
@@ -3330,8 +3330,6 @@ type PodCondition struct {
 type PodResizeStatus string
 
 const (
-	// Pod resources resize has been requested and will be evaluated by node.
-	PodResizeStatusProposed PodResizeStatus = "Proposed"
 	// Pod resources resize has been accepted by node and is being actuated.
 	PodResizeStatusInProgress PodResizeStatus = "InProgress"
 	// Node cannot resize the pod at this time and will keep retrying.
diff --git a/test/e2e/common/node/pod_resize.go b/test/e2e/common/node/pod_resize.go
index 81f86b47b9e3d..09f91f214b4fd 100644
--- a/test/e2e/common/node/pod_resize.go
+++ b/test/e2e/common/node/pod_resize.go
@@ -1159,7 +1159,7 @@ func doPodResizeTests() {
 				e2epod.VerifyPodResources(patchedPod, expectedContainers)
 
 				ginkgo.By(fmt.Sprintf("waiting for %s to be actuated", opStr))
-				resizedPod := e2epod.WaitForPodResizeActuation(ctx, f, podClient, newPod)
+				resizedPod := e2epod.WaitForPodResizeActuation(ctx, f, podClient, newPod, expectedContainers)
 				e2epod.ExpectPodResized(ctx, f, resizedPod, expectedContainers)
 			}
 
diff --git a/test/e2e/framework/pod/resize.go b/test/e2e/framework/pod/resize.go
index 6e3b6a6f5d876..9ee975c27269d 100644
--- a/test/e2e/framework/pod/resize.go
+++ b/test/e2e/framework/pod/resize.go
@@ -386,17 +386,30 @@ func verifyContainerRestarts(gotStatuses []v1.ContainerStatus, wantStatuses []v1
 	return utilerrors.NewAggregate(errs)
 }
 
-func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podClient *PodClient, pod *v1.Pod) *v1.Pod {
+func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podClient *PodClient, pod *v1.Pod, expectedContainers []ResizableContainerInfo) *v1.Pod {
 	ginkgo.GinkgoHelper()
 	// Wait for resize to complete.
-	framework.ExpectNoError(WaitForPodCondition(ctx, f.ClientSet, pod.Namespace, pod.Name, "resize status cleared", f.Timeouts.PodStart,
-		func(pod *v1.Pod) (bool, error) {
+
+	framework.ExpectNoError(framework.Gomega().
+		Eventually(ctx, framework.RetryNotFound(framework.GetObject(f.ClientSet.CoreV1().Pods(pod.Namespace).Get, pod.Name, metav1.GetOptions{}))).
+		WithTimeout(f.Timeouts.PodStart).
+		Should(framework.MakeMatcher(func(pod *v1.Pod) (func() string, error) {
 			if pod.Status.Resize == v1.PodResizeStatusInfeasible {
 				// This is a terminal resize state
-				return false, fmt.Errorf("resize is infeasible")
+				return func() string {
+					return "resize is infeasible"
+				}, nil
+			}
+			// TODO: Replace this check with a combination of checking the status.observedGeneration
+			// and the resize status when available.
+			if resourceErrs := VerifyPodStatusResources(pod, expectedContainers); resourceErrs != nil {
+				return func() string {
+					return fmt.Sprintf("container status resources don't match expected: %v", formatErrors(resourceErrs))
+				}, nil
 			}
-			return pod.Status.Resize == "", nil
-		}), "pod should finish resizing")
+			return nil, nil
+		})),
+	)
 
 	resizedPod, err := framework.GetObject(podClient.Get, pod.Name, metav1.GetOptions{})(ctx)
 	framework.ExpectNoError(err, "failed to get resized pod")
@@ -406,19 +419,6 @@ func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podC
 func ExpectPodResized(ctx context.Context, f *framework.Framework, resizedPod *v1.Pod, expectedContainers []ResizableContainerInfo) {
 	ginkgo.GinkgoHelper()
 
-	// Put each error on a new line for readability.
-	formatErrors := func(err error) error {
-		var agg utilerrors.Aggregate
-		if !errors.As(err, &agg) {
-			return err
-		}
-
-		errStrings := make([]string, len(agg.Errors()))
-		for i, err := range agg.Errors() {
-			errStrings[i] = err.Error()
-		}
-		return fmt.Errorf("[\n%s\n]", strings.Join(errStrings, ",\n"))
-	}
 	// Verify Pod Containers Cgroup Values
 	var errs []error
 	if cgroupErrs := VerifyPodContainersCgroupValues(ctx, f, resizedPod, expectedContainers); cgroupErrs != nil {
@@ -460,3 +460,17 @@ func ResizeContainerPatch(containers []ResizableContainerInfo) (string, error) {
 
 	return string(patchBytes), nil
 }
+
+func formatErrors(err error) error {
+	// Put each error on a new line for readability.
+	var agg utilerrors.Aggregate
+	if !errors.As(err, &agg) {
+		return err
+	}
+
+	errStrings := make([]string, len(agg.Errors()))
+	for i, err := range agg.Errors() {
+		errStrings[i] = err.Error()
+	}
+	return fmt.Errorf("[\n%s\n]", strings.Join(errStrings, ",\n"))
+}
diff --git a/test/e2e/node/pod_resize.go b/test/e2e/node/pod_resize.go
index 17f66f644c5a5..1a03e592f5176 100644
--- a/test/e2e/node/pod_resize.go
+++ b/test/e2e/node/pod_resize.go
@@ -159,7 +159,7 @@ func doPodResizeAdmissionPluginsTests() {
 			e2epod.VerifyPodResources(patchedPod, expected)
 
 			ginkgo.By("waiting for resize to be actuated")
-			resizedPod := e2epod.WaitForPodResizeActuation(ctx, f, podClient, newPods[0])
+			resizedPod := e2epod.WaitForPodResizeActuation(ctx, f, podClient, newPods[0], expected)
 			e2epod.ExpectPodResized(ctx, f, resizedPod, expected)
 
 			ginkgo.By("verifying pod resources after resize")


Reviews:
user: login: tallclair
body: Thanks!
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-05T19:19:53Z
user: login: natasha41575
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-07T15:56:08Z
user: login: natasha41575
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-07T16:38:51Z
user: login: liggitt
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-07T16:40:25Z
user: login: tallclair
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-10T20:01:05Z
user: login: natasha41575
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-10T20:47:23Z

Review comments:
diff_hunk: @@ -2971,8 +2971,6 @@ type PodCondition struct {
 type PodResizeStatus string
 
 const (
-	// Pod resources resize has been requested and will be evaluated by node.
-	PodResizeStatusProposed PodResizeStatus = "Proposed"
path: pkg/apis/core/types.go
user: login: tallclair
body: I'm not sure if there's any reason to keep this as a deprecated value... if not, you should also remove it from the v1 types.

I'll defer to the api reviewer on whether to keep it or not.
created_at: 2025-03-05T19:06:42Z
author_association: MEMBER
diff_hunk: @@ -395,15 +395,16 @@ func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podC
 				// This is a terminal resize state
 				return false, fmt.Errorf("resize is infeasible")
 			}
-			return pod.Status.Resize == "", nil
+
+			return ExpectPodResized(ctx, f, pod, expectedContainers) == nil, nil
path: test/e2e/framework/pod/resize.go
user: login: tallclair
body: I think this approach is  going to hide the error message from `ExpectPodResized` on failure, which will make this impossible to debug. You could capture the last error, and make sure it gets logged on failure, but that also means if the resize is "done" but failed validation it will take the full timeout for the test to fail.

We're blocked on ObservedGeneration to really implement this the right way (let's leave a TODO here), but for now I think I'd prefer to just wait on `VerifyPodStatusResources`, and then keep the full `ExpectPodResized` as a separate call. This will still require capturing the last error from `VerifyPodStatusResources`. It might be easier to just relpace this `WaitForPodCondition` with a `gomega.Eventually` .
created_at: 2025-03-05T19:19:32Z
author_association: MEMBER
diff_hunk: @@ -2971,8 +2971,6 @@ type PodCondition struct {
 type PodResizeStatus string
 
 const (
-	// Pod resources resize has been requested and will be evaluated by node.
-	PodResizeStatusProposed PodResizeStatus = "Proposed"
path: pkg/apis/core/types.go
user: login: natasha41575
body: /assign @liggitt 
for api review
created_at: 2025-03-07T15:56:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -395,15 +395,16 @@ func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podC
 				// This is a terminal resize state
 				return false, fmt.Errorf("resize is infeasible")
 			}
-			return pod.Status.Resize == "", nil
+
+			return ExpectPodResized(ctx, f, pod, expectedContainers) == nil, nil
path: test/e2e/framework/pod/resize.go
user: login: natasha41575
body: thanks! Updated this to wait for `VerifyPodStatusResources` and left `ExpectPodResized` as its own call. I ended up not seeing a strong reason to replace `WaitForPodCondition` with `gomega.Eventually` but I can change it if you prefer 
created_at: 2025-03-07T16:38:51Z
author_association: CONTRIBUTOR
diff_hunk: @@ -2971,8 +2971,6 @@ type PodCondition struct {
 type PodResizeStatus string
 
 const (
-	// Pod resources resize has been requested and will be evaluated by node.
-	PodResizeStatusProposed PodResizeStatus = "Proposed"
path: pkg/apis/core/types.go
user: login: liggitt
body: just drop it
created_at: 2025-03-07T16:40:24Z
author_association: MEMBER
diff_hunk: @@ -395,7 +396,14 @@ func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podC
 				// This is a terminal resize state
 				return false, fmt.Errorf("resize is infeasible")
 			}
-			return pod.Status.Resize == "", nil
+			// TODO: Replace this check with a combination of checking the status.observedGeneration
+			// and the resize status when available.
+			if resourceErrs := VerifyPodStatusResources(pod, expectedContainers); resourceErrs != nil {
+				klog.Errorf("container status resources don't match expected: %v", formatErrors(resourceErrs))
+				return false, nil
+			}
+
+			return true, nil
path: test/e2e/framework/pod/resize.go
user: login: tallclair
body: Logging in the wait loop will be spammy and have false positives. I'd just replace this whole WaitForPodCondition block with something like:

```go
	gomega.Eventually(ctx, framework.GetObject(c.CoreV1().Pods(ns).Get, podName, metav1.GetOptions{})).
		WithTimeout(timeout).
		Should(framework.MakeMatcher(func(pod *v1.Pod) (func() string, error) {
			if pod.Status.Resize == v1.PodResizeStatusInfeasible {
				// This is a terminal resize state
				return "", fmt.Errorf("resize is infeasible")
			}
			// TODO: Replace this check with a combination of checking the status.observedGeneration
			// and the resize status when available.
			if resourceErrs := VerifyPodStatusResources(pod, expectedContainers); resourceErrs != nil {
				return func() string { return fmt.Sprintf("container status resources don't match expected: %v", formatErrors(resourceErrs)) }, nil
			}
			return nil, nil
		}))
```
created_at: 2025-03-10T20:00:30Z
author_association: MEMBER
diff_hunk: @@ -395,7 +396,14 @@ func WaitForPodResizeActuation(ctx context.Context, f *framework.Framework, podC
 				// This is a terminal resize state
 				return false, fmt.Errorf("resize is infeasible")
 			}
-			return pod.Status.Resize == "", nil
+			// TODO: Replace this check with a combination of checking the status.observedGeneration
+			// and the resize status when available.
+			if resourceErrs := VerifyPodStatusResources(pod, expectedContainers); resourceErrs != nil {
+				klog.Errorf("container status resources don't match expected: %v", formatErrors(resourceErrs))
+				return false, nil
+			}
+
+			return true, nil
path: test/e2e/framework/pod/resize.go
user: login: natasha41575
body: fixed, thanks!
created_at: 2025-03-10T20:47:23Z
author_association: CONTRIBUTOR

PR comments:
user: login: natasha41575
created_at: 2025-03-04T21:04:51Z
body: /remove-sig apps
/assign @tallclair 
/priority important-soon
author_association: CONTRIBUTOR
user: login: k8s-triage-robot
created_at: 2025-03-04T21:45:15Z
body: This PR [may require API review](https://git.k8s.io/community/sig-architecture/api-review-process.md#what-apis-need-to-be-reviewed).

If so, when the changes are ready, [complete the pre-review checklist and request an API review](https://git.k8s.io/community/sig-architecture/api-review-process.md#mechanics).

Status of requested reviews is tracked in the [API Review project](https://github.com/orgs/kubernetes/projects/169).
author_association: NONE
user: login: hshiina
created_at: 2025-03-05T15:30:45Z
body: It might be necessary to modify here. Without `Proposed`, the resize status is empty before `InProgress` is set:
https://github.com/kubernetes/kubernetes/blob/91d6fd3455c4a071408df20c7f48df221f2b6d30/test/e2e/framework/pod/resize.go#L398
I suspect this PR may break CI jobs with InPlacePodVerticalScaling enabled.

author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-05T16:30:35Z
body: /test pull-kubernetes-node-kubelet-podresize
author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-05T16:56:59Z
body: > I suspect this PR may break CI jobs with InPlacePodVerticalScaling enabled.

@hshiina you are correct! Thank you for reminding me to run those tests, will fix this up
author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-05T16:57:32Z
body: /hold

until pull-kubernetes-node-kubelet-podresize passes
author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-05T17:18:04Z
body: /test pull-kubernetes-node-kubelet-podresize
author_association: CONTRIBUTOR
user: login: liggitt
created_at: 2025-03-07T16:41:31Z
body: API changes lgtm
will approve once the test changes have lgtm from @tallclair 
author_association: MEMBER
user: login: natasha41575
created_at: 2025-03-07T19:14:37Z
body: /unhold
author_association: CONTRIBUTOR
user: login: bart0sh
created_at: 2025-03-10T09:20:10Z
body: /triage accepted
author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-10T20:46:50Z
body: /test pull-kubernetes-node-kubelet-podresize
author_association: CONTRIBUTOR
user: login: tallclair
created_at: 2025-03-10T21:40:03Z
body: /lgtm
/approve

Thanks!
author_association: MEMBER
user: login: k8s-ci-robot
created_at: 2025-03-10T21:40:08Z
body: LGTM label has been added.  <details>Git tree hash: 5f1d2a9c974c2056819801a240af8199ebd97287</details>
author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-11T02:47:31Z
body: /retest
author_association: CONTRIBUTOR
user: login: natasha41575
created_at: 2025-03-11T14:43:15Z
body: /retest
author_association: CONTRIBUTOR
user: login: liggitt
created_at: 2025-03-11T15:21:45Z
body: /approve
author_association: MEMBER
user: login: k8s-ci-robot
created_at: 2025-03-11T15:21:58Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/kubernetes/pull/130574#issuecomment-2714744814" title="Approved">liggitt</a>*, *<a href="https://github.com/kubernetes/kubernetes/pull/130574#" title="Author self-approved">natasha41575</a>*, *<a href="https://github.com/kubernetes/kubernetes/pull/130574#issuecomment-2711909985" title="Approved">tallclair</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fkubernetes).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[pkg/api/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/pkg/api/OWNERS)~~ [liggitt]
- ~~[pkg/apis/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/OWNERS)~~ [liggitt]
- ~~[pkg/registry/core/pod/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/pkg/registry/core/pod/OWNERS)~~ [liggitt,tallclair]
- ~~[staging/src/k8s.io/api/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/api/OWNERS)~~ [liggitt]
- ~~[test/e2e/common/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/test/e2e/common/OWNERS)~~ [liggitt,tallclair]
- ~~[test/e2e/framework/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/test/e2e/framework/OWNERS)~~ [liggitt]
- ~~[test/e2e/node/OWNERS](https://github.com/kubernetes/kubernetes/blob/master/test/e2e/node/OWNERS)~~ [liggitt,tallclair]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR