Skip to content

☂️ [GEP-31] Support for In-Place Node Updates #10219

Open
1 of 3 issues completed
Open
1 of 3 issues completed
@vlerenc

Description

@vlerenc

What would you like to be added:
We like/need to offer, for all spec changes, a way to update cluster nodes in-place (all except for the ones where we have no other technical alternative, e.g. switching out physical machines will always require node rolling).

For these in-place node updates, we need to understand what exactly should to be done:

  • Roll the nodes if otherwise technically impossible (a physical machine is no longer operational or goes into maintenance)
  • Update the node (with or without drain; has its pros and cons) and reboot (e.g. OS update)
  • Drain the node before we update it and restart the kubelet (e.g. K8s minor update, see ref)
  • Just update the node (w/o drain) and restart the kubelet (e.g. K8s patch update, see ref)

All of the above (and maybe more cases) need to be detected and should trigger different forms of in-place node updates.

Note: Maybe some stakeholders would want to avoid an actual drain that would move the pod to another machine. In this case, we might get away with "local cleaning" (files/containers) after we stop the kubelet. When it restarts, it won't know that it used to run these containers. Would that be of any help to some users?

Until now, Gardener only supported the very first and last use case. Now we need to support also all the other use cases, trying to hold on to the machines (whether physical or virtual) and their Kubernetes node resources indefinitely, while keeping the impact under update as minimal as possible.

Why is this needed:
Physical machines/bare metal nodes (whether manually joined or programmatically provisioned) cannot be easily rolled like we roll today virtual machines. Physical machines/bare metal nodes are rather "pets", not "cattle" (like virtual machines). Usually:

  • They have long boot times, unless they already fully booted and can be (UEFI) fast-booted without running certain checks like POST (Power-On Self-Test, e.g. memory tests)
  • They have long cleanup/sanitization times to erase all data before returning them to a pool
  • They have locally attached disks that cannot be "moved" like network-attached volumes that can be "re-attached" easily
  • They are rather large in size and limited in number and not as interchangeable and sliceable as virtual machines

This is why we need to find a way to preserve them/never roll this kind nodes. In some cases, this may be also beneficial to brownfield/singleton applications/services that are rather sensitive to node rolling/disruptions in general.

Tasks

Sub-issues

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions