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-api-machinery/555-server-side-apply/README.md
+20-18Lines changed: 20 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -322,19 +322,19 @@ _This section must be completed when targeting alpha to a release._
322
322
323
323
***Does enabling the feature change any default behavior?**
324
324
325
-
While this changes how objects are modified and then stored in the database, all the changes should be strictly backward compatible, and shouldn’t break existing automation or users. The increase in size can possibly have adverse, surprising consequences including increased memory usage for controllers, increased bandwidth usage when fetching objects, bigger objects when displaying for users (kubectl get -o yaml). We’re trying to mitigate all of these with the addition of a new header.
325
+
While this changes how objects are modified and then stored in the database, all the changes should be strictly backward compatible, and shouldn’t break existing automation or users. The increase in size can possibly have adverse, surprising consequences including increased memory usage for controllers, increased bandwidth usage when fetching objects, bigger objects when displaying for users (kubectl get -o yaml). We’re trying to mitigate all of these with the addition of a new header.
326
326
327
327
***Can the feature be disabled once it has been enabled (i.e. can we roll back
328
328
the enablement)?**
329
329
Also set `disable-supported` to `true` or `false` in `kep.yaml`.
330
330
Describe the consequences on existing workloads (e.g., if this is a runtime
331
331
feature, can it break the existing applications?).
332
332
333
-
Yes. Managed fields will be reset for server-side applied objects.
333
+
Yes. The consequence is that managed fields will be reset for server-side applied objects (requiring a read/write cycle on the impacted resources).
334
334
335
335
***What happens if we reenable the feature if it was previously rolled back?**
336
336
337
-
The feature will be restored. Server-side applied objects will have lost their “set” which may cause some surprising behavior (fields might not be removed as expected).
337
+
The feature will be restored. Server-side applied objects will have lost their “set” which may cause some surprising behavior (fields might not be removed as expected).
338
338
339
339
***Are there any tests for feature enablement/disablement?**
340
340
The e2e framework does not currently support enabling or disabling feature
@@ -351,15 +351,19 @@ _This section must be completed when targeting beta graduation to a release._
351
351
***How can a rollout fail? Can it impact already running workloads?**
352
352
Try to be as paranoid as possible - e.g., what if some components will restart
353
353
mid-rollout?
354
-
There is no specific way that the rollout can fail. The rollout can't impact existing workload.
354
+
There is no specific way that the rollout can fail. The rollout can't impact existing workload.
355
355
***What specific metrics should inform a rollback?**
356
356
357
-
The feature shouldn't affect any existing behavior. A surprisingly high number of modification rejections could be a sign that something is not working properly.
357
+
The feature shouldn't affect any existing behavior. A surprisingly high number of modification rejections could be a sign that something is not working properly.
358
358
359
359
***Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?**
360
-
Because the feature doesn't affect existing behavior, rollback and upgrades haven't be specifically tested.
361
360
362
-
The new `managedFields` field is cleared when it is incorrect. That protects us from having invalid data inserted by a potential bad upgrade.
361
+
Because the feature doesn't affect existing behavior, rollback and upgrades haven't be specifically tested.
362
+
The feature is being used by the cluster role aggregator though. Upgrading/downgrading/upgrading, which
363
+
could result in the managedFields being removed, wouldn't cause any problems since the `Rules` field
364
+
filled by the controller is `atomic`, and thus doesn't depend on the current state of the managedFields.
365
+
366
+
The new `managedFields` field is cleared when it is incorrect. That protects us from having invalid data inserted by a potential bad upgrade.
363
367
364
368
***Is the rollout accompanied by any deprecations and/or removals of features, APIs,
365
369
fields of API types, flags, etc.?** No
@@ -373,9 +377,9 @@ _This section must be completed when targeting beta graduation to a release._
373
377
checking if there are objects with field X set) may be a last resort. Avoid
374
378
logs or events for this purpose.
375
379
376
-
Any existing metric split by request verb will record the [APPLY](https://github.com/kubernetes/kubernetes/blob/8f6ffb24df989608b87451f89b8ac9fc338ed71c/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go#L507-L509) verb if the feature is in use.
380
+
Any existing metric split by request verb will record the [APPLY](https://github.com/kubernetes/kubernetes/blob/8f6ffb24df989608b87451f89b8ac9fc338ed71c/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go#L507-L509) verb if the feature is in use.
377
381
378
-
Additionally, the OpenAPI spec exposes the available media-type for each individual endpoint. The presence of the `apply` type for the PATCH verb of a endpoints indicates whether the feature is enabled for that specific resource, e.g.
382
+
Additionally, the OpenAPI spec exposes the available media-type for each individual endpoint. The presence of the `apply` type for the PATCH verb of a endpoints indicates whether the feature is enabled for that specific resource, e.g.
379
383
```json
380
384
...
381
385
"patch": {
@@ -388,14 +392,15 @@ Additionally, the OpenAPI spec exposes the available media-type for each individ
388
392
...
389
393
}
390
394
...
395
+
```
391
396
392
397
***What are the SLIs (Service Level Indicators) an operator can use to determine
393
398
the health of the service?**
394
399
395
-
There is no specific metric attached to server side apply. All PATCH requests that utilize SSA will use the verb APPLY when logging metrics. API Server metrics that are split by verb automatically include this. They include `apiserver_request_total`, `apiserver_longrunning_gauge`, `apiserver_response_sizes`, `apiserver_request_terminations_total`, `apiserver_selfrequest_total`
400
+
There is no specific metric attached to server side apply. All PATCH requests that utilize SSA will use the verb APPLY when logging metrics. API Server metrics that are split by verb automatically include this. They include `apiserver_request_total`, `apiserver_longrunning_gauge`, `apiserver_response_sizes`, `apiserver_request_terminations_total`, `apiserver_selfrequest_total`
396
401
- Components exposing the metric: kube-apiserver
397
-
398
-
Apply requests (`PATCH` with `application/apply-patch+yaml` mime type) have the same level of SLIs as other types of requests.
402
+
403
+
Apply requests (`PATCH` with `application/apply-patch+yaml` mime type) have the same level of SLIs as other types of requests.
399
404
400
405
***What are the reasonable SLOs (Service Level Objectives) for the above SLIs?** n/a
401
406
Apply requests (`PATCH` with `application/apply-patch+yaml` mime type) have the same level of SLOs as other types of requests.
@@ -423,7 +428,7 @@ the existing API objects?** Objects applied using server side apply will have th
423
428
operations covered by [existing SLIs/SLOs]?** No
424
429
425
430
***Will enabling / using this feature result in non-negligible increase of
426
-
resource usage (CPU, RAM, disk, IO, ...) in any components?** Since objects are larger with the new `managedFields`, caches as well as network bandwidth requirement will increase.
431
+
resource usage (CPU, RAM, disk, IO, ...) in any components?** Since objects are larger with the new `managedFields`, caches as well as network bandwidth requirement will increase.
427
432
428
433
### Troubleshooting
429
434
@@ -435,7 +440,7 @@ _This section must be completed when targeting beta graduation to a release._
435
440
436
441
***How does this feature react if the API server and/or etcd is unavailable?**
437
442
438
-
The feature is part of of the API server and will not function without it
443
+
The feature is part of of the API server and will not function without it
439
444
440
445
***What are other known failure modes?**
441
446
For each of them, fill in the following information by copying the below template:
@@ -451,9 +456,6 @@ The feature is part of of the API server and will not function without it
451
456
452
457
***What steps should be taken if SLOs are not being met to determine the problem?** n/a
We used a feature branch to ensure that no partial state of this feature would
@@ -529,7 +531,7 @@ updated when we know the concrete things changing for beta.
529
531
A GA version of this is targeted for 1.21.
530
532
531
533
- E2E tests are created and graduate to conformance
532
-
- [Apply for client-go's typed client](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/2144-clientgo-apply) is implemented and has an in-tree controller using it
534
+
-[Apply for client-go's typed client](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/2144-clientgo-apply) is implemented and at least one kube-controller-manager uses that client
533
535
- Outstanding bugs around status wiping and scale subresource are fixed
0 commit comments