Repository: kubernetes
Issue: Fix issue where alpha APIs that have `k8s:prerelease-lifecycle-gen:introduced` have an auto generated `APILifecycleRemoved` (should only be for beta/GA APIs)
Labels: kind/bug,sig/api-machinery,triage/accepted

### What happened?

**EDIT: currently all the info in the issue here uses APIs generally but it should state alpha APIs as the current `APILifecycleRemoved` policy is being added to alpha APIs when it is unclear it should be and that is the root of the issue**

Currently when using the `// +k8s:prerelease-lifecycle-gen:introduced=<version>` tag on API types.go files, the associated generated code (`zz_generated.prerelease-lifecycle.go`) creates an APILifecycleRemoved method for that API automatically set for introduced + 6 minor versions.  Specifically, there are a number of APIs that have // +k8s:prerelease-lifecycle-gen:introduced=1.26 and this means that these APIs have APILifecycleRemoved methods targeting v1.32.  This means when attempting to bump `DefaultKubeBinaryVersion` from v1.31 -> v1.32 there are integration test failures where the test expects APIs to exist that were removed via the above flow (more details in other sections).  Below is an example of such an entry from `master` @ HEAD:
File: ./staging/src/k8s.io/api/authentication/v1alpha1/zz_generated.prerelease-lifecycle.go
```
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or  "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
func (in *SelfSubjectReview) APILifecycleRemoved() (major, minor int) {
	return 1, 32
```

For the integration tests, I have validated it is what [folks mentioned in the PR comments](https://github.com/kubernetes/kubernetes/pull/126977#issuecomment-2332596429) - the usage of `// +k8s:prerelease-lifecycle-gen:introduced=1.26"`

It seems for all APIs where there is used there is a APILifecycleRemoved method added in all of the related generated code with 1.32 as the version to remove that API.   This makes it so that the associated tests fail.  If you manually change these values to 1.33, the tests all pass.  
```
diff --git a/staging/src/k8s.io/api/authentication/v1alpha1/zz_generated.prerelease-lifecycle.go b/staging/src/k8s.io/api/authentication/v1alpha1/zz_generated.prerelease-lifecycle.go
index 62a70a781d1..af598cb4db1 100644
--- 
 // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
 // It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or  "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
 func (in *SelfSubjectReview) APILifecycleRemoved() (major, minor int) {
-    return 1, 32
+    return 1, 33
 }
```

For further evidence this the root cause of the failing integration tests at https://github.com/kubernetes/kubernetes/pull/126977, below is the list of failing integration tests:
- TestGetsSelfAttributes
- TestCTBAttestPlugin
- TestCTBSignerNameFieldSelector
- TestCTBSignerNameChangeForbidden
- TestEncryptAll
- TestEtcdStoragePath
- TestAPIServerMetrics

and here are k8s types that APILifeCycleRemoved and APILifeCycleDeprecated set for 1.32:

APILifecycleDeprecated
- APIGroupDiscovery (from apidiscovery/v2beta1)
- APIGroupDiscoveryList (from apidiscovery/v2beta1)
- VolumeAttributesClass (from storage/v1alpha1)
- VolumeAttributesClassList (from storage/v1alpha1)

APILifecycleRemoved
- SelfSubjectReview (from authentication/v1alpha1)
- FlowSchema (from flowcontrol/v1beta3)
- FlowSchemaList (from flowcontrol/v1beta3)
- PriorityLevelConfiguration (from flowcontrol/v1beta3)
- PriorityLevelConfigurationList (from flowcontrol/v1beta3)
- ClusterTrustBundle (from certificates/v1alpha1)
- ClusterTrustBundleList (from certificates/v1alpha1)

See the gist here for the full code snippets showing the above methods:
https://gist.github.com/aaron-prindle/3e8a5c3cef3b8ff10763be0d4858254d

You can see that the k8s types above align 1:1 with the integration test failues stating that k8s objects don't exist.

In speaking offline w/ @jpbetz it seems a viable short-term solution to unblock PR https://github.com/kubernetes/kubernetes/pull/126977 is to make it so that `APILifecycleRemoved` & `APILifecycleDeprecated` is non-blocking and only warns.  This would mean modifying logic in the two methods APILifecycleRemoved is currently called in:
- staging/src/k8s.io/apiserver/pkg/endpoints/deprecation/deprecation.go
- staging/src/k8s.io/apiserver/pkg/server/deleted_kinds.go



### What did you expect to happen?

I expected to be able to bump DefaultKubeBinaryVersion s/v1.31/v1.32 without any integration test failures.

### How can we reproduce it (as minimally and precisely as possible)?

Modify the code [here](https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/component-base/version/base.go#L69) to bump DefaultKubeBinaryVersion and then run the kubernetes integration tests.  For a quick validation, you can run: test/integration/auth/selfsubjectreview_test.go `TestGetsSelfAttributes`