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: docs/proposals/20240807-in-place-updates.md
+10-6Lines changed: 10 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,7 +100,7 @@ This approach, inspired by the principle of immutable infrastructure (the very s
100
100
101
101
Over time several improvement were made to Cluster API immutable rollouts:
102
102
* Support for delete first strategy, thus making it easier to do immutable rollouts on bare metal / environments with constrained resources.
103
-
* Support for [Inplace propagation of changes affecting Kubernetes objects only](https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md), thus avoiding unnecessary rollouts
103
+
* Support for [In-place propagation of changes affecting Kubernetes objects only](https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md), thus avoiding unnecessary rollouts
104
104
* Support for [Taint nodes with PreferNoSchedule during rollouts](https://github.com/kubernetes-sigs/cluster-api/pull/10223), thus reducing Pod churn by optimizing how Pods are rescheduled during rollouts.
105
105
106
106
Even if the project continues to improve immutable rollouts, most probably there are and there will always be some remaining use cases where it is complex for users to perform immutable rollouts, or where users perceive immutable rollouts to be too disruptive to how they are used to manage machines in their organization:
@@ -321,7 +321,7 @@ end
321
321
322
322
Please note that:
323
323
- When in-place is possible, the system should try to in-place update as many machines as possible.
324
-
In practice, this means that maxSurge might be not fully used (it is used only for scale up by one if maxUnavailable=0)
324
+
In practice, this means that maxSurge might be not fully used (it is used only for scale up by one if maxUnavailable=0)
325
325
- No in-place updates are performed when using rollout strategy on delete.
326
326
327
327
Please refer to [implementation note](./20240807-in-place-updates-implementation-notes.md) for more details about how the move operation is performed.
@@ -333,8 +333,12 @@ In order to do so:
333
333
- The "can update in-place" decision is performed at MachineSet level by calling the `CanUpdateMachine` hook.
334
334
- Before starting an in-place update, the Machine/InfraMachine/BootstrapConfig are updated
335
335
to the new spec.
336
-
- Machines updating in-place are considered not available, because in-place updates are always considered as potentially disruptive.
337
-
- If maxSurge is zero, a new machine must be created first, then as soon as there is “buffer” for in-place, in-place update can proceed (to better understand this, you might want to consider that maxSurge in KCP is a way to express if the control plane rollout should scale-in or scale out).
336
+
- If maxSurge is one, a new machine must be created first, then as soon as there is “buffer” for in-place, in-place update can proceed.
337
+
- If maxSurge is zero, in-place update can proceed immediately.
338
+
- Note: to better understand above points, you might want to consider that maxSurge in KCP is a way to express if the
339
+
control plane rollout should be performed "scaling-out" or "scaling-in"
340
+
- Note: KCP has its own definition of availability, that is preserved during a rollout no matter of it is performed using
341
+
in-place updates or regular rollouts.
338
342
339
343
Notably, while KCP will always try to perform in-place whenever possible, KCP might decide to not perform in-place
340
344
changes when it determines that this might impact the control-plane health.
@@ -366,7 +370,7 @@ Please refer to [implementation note](./20240807-in-place-updates-implementation
366
370
367
371
### Machine updates
368
372
369
-
Once a Machine is marked as `Updating` inplace and the Machine's spec has been updated with the desired changes, the Machine controller takes over. This controller is responsible for calling the updaters and tracking the progress of those updaters and exposing this progress in the Machine conditions.
373
+
Once a Machine is marked as `Updating` in-place and the Machine's spec has been updated with the desired changes, the Machine controller takes over. This controller is responsible for calling the updaters and tracking the progress of those updaters and exposing this progress in the Machine conditions.
370
374
371
375
The Machine controller currently calls only one updater (we are explicitly not trying to design a solution for ordering of execution at this stage. However, determining a specific ordering mechanism or dependency management between update extensions will need to be addressed in future iterations of this proposal).
372
376
@@ -500,7 +504,7 @@ Given that there are still changes not covered, KCP continue with the next updat
500
504
}
501
505
```
502
506
503
-
The difference between current and desired will still be the change applied by the user;
507
+
The difference between current and desired will still be the change applied by the user.
504
508
If instead the `vsphere-vm-memory-update` would have declared its ability to perform some changes via a patch,
505
509
those changes would be applied to change "current" state the second extension should consider.
0 commit comments