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
@@ -133,7 +135,7 @@ checklist items _must_ be updated for the enhancement to be released.
133
135
Items marked with (R) are required *prior to targeting to a milestone / release*.
134
136
135
137
-[X] (R) Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR)
136
-
-[] (R) KEP approvers have approved the KEP status as `implementable`
138
+
-[X] (R) KEP approvers have approved the KEP status as `implementable`
137
139
-[X] (R) Design details are appropriately documented
138
140
-[X] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input (including test refactors)
139
141
-[ ] e2e Tests for all Beta API Operations (endpoints)
@@ -143,8 +145,8 @@ Items marked with (R) are required *prior to targeting to a milestone / release*
143
145
-[ ] (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)
144
146
-[ ] (R) Production readiness review completed
145
147
-[ ] (R) Production readiness review approved
146
-
-[] "Implementation History" section is up-to-date for milestone
147
-
-[] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
148
+
-[X] "Implementation History" section is up-to-date for milestone
149
+
-[X] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
148
150
-[ ] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
149
151
150
152
<!--
@@ -201,7 +203,7 @@ This feature is motivated by the use case of orchestrating the migration of a St
201
203
namespace or a Kubernetes cluster without disruption. Existing approaches to
202
204
this problem include:
203
205
204
-
1.Back and restore: This approach takes a backup of an application (StatefulSet, underlying storage), and re-creates it in a different location. This introduces application downtime, the duration of time between old StatefulSet termination and new StatefulSet recreation.
206
+
1.Backup and restore: This approach takes a backup of an application (StatefulSet, underlying storage), and re-creates it in a different location. This introduces application downtime, the duration of time between old StatefulSet termination and new StatefulSet recreation.
205
207
2. Pod level migration: Using `--cascade=orphan` when deleting a StatefulSet preserves the pods. This allows an application operator to evict and reschedule pods individually. However, as pods are ephemeral, this requires the application operator to emulate the behavior of the StatefulSet, to reschedule pods as they restart, or are evicted and rescheduled.
206
208
207
209
Migrating a StatefulSet in slices allows for gradual migration of the application, as only a subset of replicas are migrated at any time. Consider the scenario of transferring pod ordinal ownership from a source StatefulSet with `N` pods to a destination StatefulSet with `0` pods. Further, to maintain application availability, no more than `d` pods should be unavailable at any time during the transfer. An orchestrator can manipulate `.spec.replicas` and `.spec.ordinals.start` to perform this migration:
@@ -435,10 +437,11 @@ This can inform certain test coverage improvements that we want to do before
435
437
extending the production code to implement this enhancement.
436
438
-->
437
439
438
-
*`pkg/controller/statefulset/stateful_set_control_test.go - Tests that a StatefulSet slice can be created from specified starting ordinal`
439
-
*`pkg/apis/apps/v1/defaults_test.go - Tests defaults for new fields added to StatefulSet`
440
+
*`pkg/apis/apps/validation/validation_test.go` - Tests that the .spec.ordinals.start value is properly validated.
441
+
*`pkg/controller/statefulset/stateful_set_control_test.go` - Tests that a StatefulSet slice can be created from specified starting ordinal.
442
+
*`pkg/registry/apps/statefulset/strategy_test.go` - Tests the create/update strategy of a StatefulSet with start ordinals. Also validates enablement/disablement of the feature.
440
443
441
-
##### e2e/Integration tests
444
+
##### E2E tests
442
445
443
446
<!--
444
447
This question should be filled when targeting a release.
@@ -448,12 +451,18 @@ For Beta and GA, add links to added tests together with links to k8s-triage for
`Feature:StatefulSetStartOrdinal` in `k8s.io/kubernetes/test/e2e/apps/`.
455
+
456
+
* Adding `ordinals.start`: Validate that setting `ordinals.start` to `k` causes StatefulSet ordinals to be scaled (pods `[0, k-1]` are terminated, pods `[N, N+k-1]` are created)
457
+
* Increasing `ordinals.start`: Validate that increasing `ordinals.start` from `m` to `n` causes StatefulSet ordinals to be scaled (pods `[m, n-1]` are terminated, pods `[m+N, n+N-1]` are created)
458
+
* Removing `ordinals.start`: Validate that setting `ordinals.start` causes StatefulSet ordinals to be scaled (pods `[N-1, N+k-1]` are terminated, pods `[0, k-1]` are created)
459
+
* Decreasing `ordinals.start`: Validate that decreasing `ordinals.start` from `m` to `n` causes StatefulSet ordinals to be scaled (pods `[m+N, n+N-1]` are terminated, pods `[m, n-1]` are created)
460
+
461
+
#### Integration tests
462
+
463
+
`StatefulSetStartOrdinal` in `k8s.io/kubernetes/test/integration/statefulset`.
464
+
451
465
* Pod Restart Tests: Validate that StatefulSet RollingUpdate behavior is preserved, with an replica ordinal offset starting at `ordinals.start`
452
-
* Scaling Tests
453
-
* Adding `ordinals.start`: Validate that setting `ordinals.start` to `k` causes StatefulSet ordinals to be scaled (pods `[0, k-1]` are terminated, pods `[N, N+k-1]` are created)
454
-
* Increasing `ordinals.start`: Validate that increasing `ordinals.start` from `m` to `n` causes StatefulSet ordinals to be scaled (pods `[m, n-1]` are terminated, pods `[m+N, n+N-1]` are created)
455
-
* Removing `ordinals.start`: Validate that setting `ordinals.start` causes StatefulSet ordinals to be scaled (pods `[N-1, N+k-1]` are terminated, pods `[0, k-1]` are created)
456
-
* Decreasing `ordinals.start`: Validate that decreasing `ordinals.start` from `m` to `n` causes StatefulSet ordinals to be scaled (pods `[m+N, n+N-1]` are terminated, pods `[m, n-1]` are created)
457
466
458
467
### Graduation Criteria
459
468
@@ -487,7 +496,7 @@ Below are some examples to consider, in addition to the aforementioned [maturity
487
496
#### Alpha
488
497
489
498
- Feature implemented behind a feature flag
490
-
- Initial e2e tests completed and enabled
499
+
- Add unitInitial e2e tests completed and enabled
491
500
492
501
#### Beta
493
502
@@ -522,8 +531,12 @@ in back-to-back releases.
522
531
#### Alpha
523
532
524
533
* Feature functionality implemented but hidden behind a feature gate
525
-
* Add unit, functional, upgrade and downgrade tests to automated k8s test.
534
+
* Add unit, e2e and functional tests to automated k8s test.
526
535
536
+
#### Beta
537
+
538
+
* Validate with user workloads
539
+
* Enable feature gate for e2e pipelines
527
540
528
541
### Upgrade / Downgrade Strategy
529
542
@@ -658,14 +671,14 @@ You can take a look at one potential example of such test in:
0 commit comments