@@ -328,6 +328,12 @@ the following parts:
328
328
` SchedulingPaused ` to the "phase" column of ` kubectl get pod ` . This new literal indicates whether it's
329
329
scheduling-paused or not.
330
330
331
+ - ** Downgrade->Upgrade path:** For a Pod that has non-empty scheduling gates, if it's downgraded to a
332
+ version with this feature disabled, and then upgraded to a version with this feature enabled, the Pod
333
+ is still treated as scheduling gated, but its condition may be misleading. Please check the
334
+ "Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?" portion in
335
+ section [ Rollout, Upgrade and Rollback Planning] ( #rollout-upgrade-and-rollback-planning ) for more details.
336
+
331
337
### Risks and Mitigations
332
338
333
339
<!--
@@ -827,11 +833,34 @@ Longer term, we may want to require automated upgrade/rollback tests, but we
827
833
are missing a bunch of machinery and tooling and can't do that now.
828
834
-->
829
835
830
- It will be tested manually prior to beta launch.
836
+ - Start a local Kubernetes 1.26 cluster (` PodSchedulingReadiness ` defaulted to false)
837
+ - Create a Pod ` test-pod ` with one scheduling gate
838
+ - The Pod's scheduling gate gets dropped as expected due to disabled feature gate
839
+ - Delete the Pod
840
+ - Re-start API Server and scheduler with version 1.27, and specify ` PodSchedulingReadiness=true `
841
+ - Create the same Pod ` test-pod ` with one scheduling gate
842
+ - The Pod stays in ` SchedulingGated ` state, and its ` .spec.schedulingGates ` is persisted
843
+ - Re-start API Server and scheduler with version 1.26
844
+ - The Pod ` test-pod ` enters ` Pending ` state, with old ` .spec.schedulingGates ` reserved<sup >1</sup >
845
+ - Re-start API Server and scheduler with version 1.27, and specify ` PodSchedulingReadiness=true `
846
+ - The Pod stays in ` Pending ` state, with old ` .spec.schedulingGates ` reserved<sup >2</sup >
847
+
848
+ <sup >1</sup > It's pending because binding a node to a Pod with non-empty scheduling gates are not allowed:
849
+ ``` yaml
850
+ status :
851
+ conditions :
852
+ - message : ' running Bind plugin "DefaultBinder": Operation cannot be fulfilled on
853
+ pods/binding "pause": pod pause has non-empty .spec.schedulingGates'
854
+ reason : SchedulerError
855
+ status : " False"
856
+ type : PodScheduled
857
+ phase : Pending
858
+ ` ` `
831
859
832
- <<UNRESOLVED >>
833
- Add detailed scenarios and result here, and cc @wojtek-t .
834
- <</UNRESOLVED >>
860
+ <sup>2</sup> Although the Pod is still considered as "gated" internally, its ` {PodScheduled, SchedulerError}`
861
+ condition that was persisted previously is not updated - which is designed to be responsible by
862
+ API Server but is not triggered in this downgrade->upgrade path. Please check
863
+ https://github.com/kubernetes/enhancements/pull/3871#discussion_r1102315845 for more details.
835
864
836
865
# ##### Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.?
837
866
0 commit comments