You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: keps/sig-scheduling/3902-decoupled-taint-manager/README.md
+47-22Lines changed: 47 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -45,17 +45,17 @@ Items marked with (R) are required *prior to targeting to a milestone / release*
45
45
-[X] (R) Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements](https://git.k8s.io/enhancements) (not the initial KEP PR)
46
46
-[X] (R) KEP approvers have approved the KEP status as `implementable`
47
47
-[X] (R) Design details are appropriately documented
48
-
-[] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input (including test refactors)
49
-
-[] e2e Tests for all Beta API Operations (endpoints)
50
-
-[] (R) Ensure GA e2e tests meet requirements for [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
51
-
-[] (R) Minimum Two Week Window for GA e2e tests to prove flake free
52
-
-[] (R) Graduation criteria is in place
53
-
-[] (R) [all GA Endpoints](https://github.com/kubernetes/community/pull/1806) must be hit by [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
54
-
-[] (R) Production readiness review completed
55
-
-[] (R) Production readiness review approved
56
-
-[] "Implementation History" section is up-to-date for milestone
57
-
-[] User-facing documentation has been created in [kubernetes/website](https://git.k8s.io/website), for publication to [kubernetes.io](https://kubernetes.io/)
58
-
-[] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
48
+
-[X] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input (including test refactors)
49
+
-[X] e2e Tests for all Beta API Operations (endpoints)
50
+
-[X] (R) Ensure GA e2e tests meet requirements for [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
51
+
-[X] (R) Minimum Two Week Window for GA e2e tests to prove flake free
52
+
-[X] (R) Graduation criteria is in place
53
+
-[X] (R) [all GA Endpoints](https://github.com/kubernetes/community/pull/1806) must be hit by [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
54
+
-[X] (R) Production readiness review completed
55
+
-[X] (R) Production readiness review approved
56
+
-[X] "Implementation History" section is up-to-date for milestone
57
+
-[X] User-facing documentation has been created in [kubernetes/website](https://git.k8s.io/website), for publication to [kubernetes.io](https://kubernetes.io/)
58
+
-[X] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
59
59
60
60
## Summary
61
61
@@ -140,24 +140,27 @@ The creation and startup of the default taint-manager is performed by `kube-cont
140
140
Kubernetes already has a good coverage of node `No-Execute` eviction. We will add tests only for the changed code.
@@ -168,19 +171,29 @@ Since there are no new API changes, we can skip Alpha and go to Beta directly.
168
171
169
172
* Support `kube-controller-manager` flag `--controllers=-taint-eviction-controller` to disable the default `TaintEvictionController`.
170
173
* Unit and e2e tests completed and passed.
171
-
* Performance and scalability tests to verify there is non-negligible performance degradation in node taint-based eviction.
172
174
* Update documents to reflect the changes.
175
+
* In the past, the taint-manager was running as an internal controller in the `NodeLifecycleManager`, so moving and renaming it as a new top-level controller has a low chance of degrading performance. And no bugs are reported in the current implementation.
173
176
174
177
#### GA
175
178
176
-
*Fix all reported bugs if any.
179
+
*No negative feedback.
177
180
178
181
### Upgrade / Downgrade Strategy
179
182
180
183
A feature gate `SeparateTaintEvictionController` enables and disables the new feature. When the feature is turned on, a user can use `kube-controller-manager`'s flag to disable the default `TaintEvictionController`.
181
184
185
+
Regarding taint-based eviction, all versions of kube-controller-manager have this feature. The key difference is which controller implements the feature. The feature is implemented in the `NodeLifecycleController` before v1.29; the feature is implemented in a separate controller since v1.29.
186
+
187
+
For upgrade/downgrade scenarios, only one instance of the controller is leader and does the taint-based eviction.
188
+
* If the newer instance becomes a leader, the taint-based eviction will work as usual.
189
+
* If the older instance becomes a leader, the taint-based eviction will work as usual.
190
+
191
+
But if the cluster admin disables the default controller via the `kube-controller-manager`'s flag during upgrading, the taint-based eviction won't work once the newer instance becomes a leader.
192
+
182
193
### Version Skew Strategy
183
194
195
+
This feature affects only the kube-controller-manager, so there is no issue with version skew with other components.
196
+
184
197
## Production Readiness Review Questionnaire
185
198
186
199
### Feature Enablement and Rollback
@@ -213,11 +226,22 @@ This section must be completed when targeting beta to a release.
213
226
This is an opt-in feature, and it does not change any default behavior. Unless there is a bug in the implementation, a rollout can not fail. If a rollout does fail, running workloads will not be evicted properly on tainted nodes. We don't except a rollback can fail.
214
227
215
228
###### What specific metrics should inform a rollback?
216
-
A significantly changing number of pod evictions (`taint_eviction_controller_pod_evictions_total`) and/or a substantial increase in pod eviction latency (`taint_eviction_controller_pod_deletion_duration_seconds`) in Kubernetes.
229
+
A significantly changing number of pod evictions (`taint_eviction_controller_pod_deletions_total`) and/or a substantial increase in pod eviction latency (`taint_eviction_controller_pod_deletion_duration_seconds`) in Kubernetes.
217
230
218
231
###### Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?
219
-
The upgrade will be tested in the planned unit and e2e tests. The rollback and upgrade-downgrade-upgrade path will
220
-
be tested manually (see [Test Plan](#test-plan) section).
232
+
Manually tested. No issues were found when we enabled the feature gate -> disabled it ->
233
+
re-enabled the feature gate.
234
+
235
+
Upgrade->downgrade->upgrade testing was done manually using the following steps:
236
+
237
+
1. Create a cluster in v1.29, the `SeparateTaintEvictionController` enabled by default.
238
+
2. Run the existing e2e tests to verify the new controllers work as expected. Above mentioned metrics found.
239
+
3. Simulate downgrade by modifying control-plane manifests to disable `SeparateTaintEvictionController`.
240
+
4. Run the existing e2e tests to verify the current behavior without the new controllers.
241
+
5. Simulate upgrade by modifying control-plane manifests to enable `SeparateTaintEvictionController`.
242
+
6. Repeat step 2.
243
+
244
+
The e2e tests are mentioned in the [Test Plan](#test-plan) section.
221
245
222
246
###### Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.?
223
247
No
@@ -238,7 +262,7 @@ The performance of node taint-based eviction should remain the same level as bef
238
262
The metrics for both `NodeLifecycleController` and `TaintEvictionController`'s queues should stay the same levels as before, the number of pod evictions and pod eviction latency.
0 commit comments