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
-[We will move following <ahref="https://github.com/kubernetes-sigs/kube-storage-version-migrator/blob/60dee538334c2366994c2323c0db5db8ab4d2838/pkg/apis/migration/v1alpha1/types.go">APIs</a> in-tree:](#we-will-move-following-apis-in-tree)
19
-
-[[Undecided]Changes while we move above APIs in-tree:](#undecided-changes-while-we-move-above-apis-in-tree)
19
+
-[Changes while we move above APIs in-tree:](#changes-while-we-move-above-apis-in-tree)
20
20
-[<ahref="https://github.com/kubernetes-sigs/kube-storage-version-migrator/tree/60dee538334c2366994c2323c0db5db8ab4d2838/pkg/controller">Controller</a> to move](#controller-to-move)
- APIs in-tree will be _converted to `built-in types`_ from CRD.
185
236
186
-
#### [Undecided] Changes while we move above APIs in-tree:
237
+
#### Changes while we move above APIs in-tree:
187
238
To avoid any conflicts with the StorageVersionMigrators running out of tree, we will change the _`group`_ from `migration.k8s.io` to `storagemigration.k8s.io`.
188
239
189
240
The final APIs that will be moved in-tree are:
@@ -195,6 +246,11 @@ Currently, the Storage Version Migrator comprises two controllers: the `Trigger`
195
246
196
247
When transitioning the StorageVersionMigrator in-tree, we will exclusively move the Migrator controller as a component of KCM. The creation of the Migration resource will be deferred to the user, instead of being triggered automatically.
197
248
249
+
### Approach
250
+
#### GarbageCollectionCache
251
+
Kube ControllerManager's garbage collection cache contains the name and namespace for all resources, providing a suitable dataset for the migration process. This approach is detailed [here](https://docs.google.com/document/d/1lHDbrMCmNG1KXEpw6gMhDL8qWAWgeSlfW6gbCvD80uw/edit?usp=sharing). _We will use this approach for the Alpha release_.
252
+
253
+
### Rejected Alternative
198
254
#### Streaming List
199
255
Currently, the Migrator controller uses the `chunked List` method to retrieve the list of resources from the API server and subsequently perform storage migrations as needed. However, chunked lists are [resource-intensive]((https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/3157-watch-list/README.md#motivation)) and can lead to a significant overload on the API server, potentially resulting in it being terminated due to out-of-memory (OOM) issues. To address this concern, we have proposed the adoption of an Alpha feature introduced in Kubernetes _v1.27_, known as [`Streaming List`](https://kubernetes.io/docs/reference/using-api/api-concepts/#streaming-lists).
200
256
@@ -325,16 +381,22 @@ total:
325
381
326
382
- Feature implemented behind a feature flag
327
383
- Initial e2e tests completed and enabled
384
+
- Move apis in-tree under new group while keeping schema same as out-of-tree CRD.
385
+
- Controller will use Garbage Collection Cache to carry out the migration.
386
+
- Resolve potential kube-apiserver OOMs and cascading failure issues that may occur due to the use of paginated lists by using KCM's GC cache.
328
387
329
388
#### Beta
330
389
331
-
- Resolve potential kube-apiserver OOMs and cascading failure issues that may occur due to the use of paginated lists.
332
390
- Feature is enabled by default
333
391
- All of the above documented tests are complete
392
+
- Leader election to make sure new controller can work with both CRD and in-tree APIs.
393
+
- UsingGarbageCollectionCache means using RV as an integer to validate the freshness of the cache. Approval from SigArch is required on this RV semantics.
334
394
335
395
### Upgrade / DowngradeStrategy
396
+
The feature is enabled using the feature gate `StorageVersionMigrator`. During an upgrade, this gate must be set to true. During a downgrade, this gate must be set to false, and any remaining _StorageVersionMigration_ resources should be manually removed.
336
397
337
398
### VersionSkewStrategy
399
+
The feature will be enabled by the feature gate `StorageVersionMigrator` on both the _api-server_ and the _kube-controller-manager_. This gate must be set for both components during installation. Otherwise, since the kube-controller-manager is allowed to be one version lower than the api-server, it won't be able to process any StorageVersionMigration resources created by the API server.
338
400
339
401
## Production Readiness Review Questionnaire
340
402
@@ -431,7 +493,7 @@ No.
431
493
432
494
###### Will enabling / using this feature result in any new API calls?
433
495
434
-
Yes. Creation of the MigrationRequest which creates`StorageVersionMigration` resource.
496
+
Yes. Creation of the Migration Request which _creates_ `StorageVersionMigration` resource. Additionally, there will be `List` requests made for resource types that need to be migrated. Moreover, an `Update` request will be generated for each resource of the specified type to perform the migration.
435
497
436
498
###### Will enabling / using this feature result in introducing new API types?
0 commit comments