@@ -889,7 +889,8 @@ version of the API and update to a matching kubelet and making node schedulable
889
889
Downgrade involves doing the above in reverse.
890
890
891
891
### Version Skew Strategy
892
- Kubelet and the CRI runtime versions are expected to match so we don't have to worry about.
892
+ CRI changes were merged in v1.25 in order to enable runtimes to implement support.
893
+ - containerd added support for this feature in 1.6.9
893
894
894
895
Previous versions of clients that are unaware of the new ResizePolicy fields would set them
895
896
to nil. API server mutates such updates by copying non-nil values from old Pod to the current
@@ -898,7 +899,48 @@ Pod.
898
899
A previous version of kubelet interprets mutation to Pod Resources as a Container definition
899
900
change and will restart the container with the new Resources. This could lead to Node resource
900
901
over-subscription. In order to address this, the feature-gate will remain default false for
901
- atleast two versions after the initial release that carries it.
902
+ atleast two versions after v1.27 alpha release. i.e: beta is planned for v1.29 and
903
+ InPlacePodVeritcalScaling feature-gate will be true in versions v1.29+
904
+
905
+ kubelet: When feature-gate is disabled, if kubelet sees a Proposed resize, it rejects the
906
+ resize as Infeasible.
907
+
908
+ scheduler: If PodStatus.Resize field is not empty, scheduler uses max(ResourcesAllocated, Requests)
909
+ even if the feature-gate is disabled.
910
+
911
+ Allowed [ version skews] ( https://kubernetes.io/releases/version-skew-policy/ ) are handled as below:
912
+
913
+ | apiserver ver -> | v1.27 | v1.28 | v1.29 | v1.30 |
914
+ | ------------------| -------------| --------------| -------------| -------------|
915
+ | kubelet v1.25 | N | X | X | X |
916
+ | kubelet v1.26 | N | N | X | X |
917
+ | kubelet v1.27 | N | N | A | X |
918
+ | kubelet v1.28 | X | N | A | A |
919
+ | kubelet v1.29 | X | X | A | N |
920
+ | kubelet v1.30 | X | X | X | N |
921
+ | scheduler v1.26 | N | X | X | X |
922
+ | scheduler v1.27 | N | N | X | X |
923
+ | scheduler v1.28 | X | N | B | X |
924
+ | scheduler v1.29 | X | X | N | N |
925
+ | scheduler v1.30 | X | X | X | N |
926
+ | kubectl v1.26 | C | X | X | X |
927
+ | kubectl v1.27 | N | N | X | X |
928
+ | kubectl v1.28 | N | N | N | X |
929
+ | kubectl v1.29 | X | N | N | N |
930
+ | kubectl v1.30 | X | X | N | N |
931
+ | kubectl v1.31 | X | X | X | N |
932
+
933
+ ** X** : Not allowed
934
+
935
+ ** N** : No special handling needed.
936
+
937
+ ** A** : kubelet sets PodStatus.Resize=Infeasible if it sees PodStatus.Resize=Proposed
938
+ when feature-gate is disabled on kubelet
939
+
940
+ ** B** : Use max(ResourcesAllocated, Requests) if PodStatus.Resize != "" (empty)
941
+
942
+ ** C** : dropDisabledPodFields/dropDisabledPodStatusFields function sets ResizePolicy,
943
+ ResourcesAllocated, and ContainerStatus.Resources fields to nil.
902
944
903
945
## Production Readiness Review Questionnaire
904
946
0 commit comments